国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

SDL2和OpenGL使用踩坑筆記經驗分享

2019-10-21 21:33:06
字體:
來源:轉載
供稿:網友

SDL + OpenGL使用筆記

LFTK 是一個嵌入式GUI,為了開發方便,需要提供PC運行環境。我選擇了SDL2+OpenGL+nanovg來實現底層的渲染,讓LFTK可以運行在各個平臺上。GLFW+OpenGL也是一個不錯的選擇,但是GLFW沒有Android和iOS的移植,而且沒有提供原生輸入法的支持。LFTK雖然最初是為嵌入式系統而生,但也有一個小目標:可以用于開發嵌入式系統,也可以開發PC軟件和移動APP,所以最后選擇了SDL2+OpenGL+nanovg。在使用SDL2+OpenGL+nanovg的過程中,踩了一些坑,這里做個筆記,給需要的朋友參考:

一、在MacPro上顯示模糊的問題。

在網上查了一下,有人提供的方案是設置SCALE_QUALITY,貌似也有些道理,但是效果不佳。

SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "nearest");

花了一些時間去看SDL的源碼后,發現其實SDL在創建窗口時提供了SDL_WINDOW_ALLOW_HIGHDPI標志,可以用來解決模糊的問題:

SDL_CreateWindow("LFTK Simulator", x, y, w, h, SDL_WINDOW_OPENGL | SDL_WINDOW_ALLOW_HIGHDPI);

如果設置了SDL_WINDOW_ALLOW_HIGHDPI標志,窗口大小和Drawable的大小可能不一致,在繪圖時需要做相應縮放:

SDL_GetWindowSize(sdl_window, &ww, &wh);SDL_GL_GetDrawableSize(sdl_window, &fw, &fh);ratio = (float)fw / (float)ww;

二、nanovg裁剪算法無效。

使用低級的OpenGL去繪圖是一個比較麻煩的事情。在LFTK中,采用了nanovg矢量圖繪圖函數庫,nanovg缺省使用的GLFW,要移植到SDL2上也不難。但是我發現nanovg的示例在SDL上和在GLFW上的效果有些差異,仔細觀察后,初步判斷與用stencil進行裁剪有關,以為是沒有啟用stencil測試引起的,于是加了下面的代碼:

glEnable(GL_STENCIL_TEST);

但是沒有效果,在nanovg的代碼中,也發現它自己會啟用stencil測試。對比基于nanovg基于GLFW的例子,也沒發現有價值的線索。然后對比SDL_CreateWindow/glfwCreateWindow和SDL_Init/glfwInit的實現,發現SDL中,stencil_size的缺省值是0,嘗試把設置它為8:

SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);

顯示正常了。

三、Windows下的OpenGL

在MacPro和Ubuntu下測試沒有問題,在Window測試時發現一些OpenGL函數找不到,明明已經鏈接了opengl32.dll啊。網上的方案多是基于GLUT和GLFW在Windows下做OpenGL開發的,SDL則沒有找到相關資料,只好再去研讀GLFW,看能不能從中借用部分代碼。很快發現deps/glad是干這個的,而glad是http://glad.dav1d.de/上在線生成的。把glad.c加入項目中,并調用初始化函數:

gladLoadGL();

編譯沒有問題了,不過運行起來就崩掉了。調試時發現glGetString(GL_VERSION)返回NULL,這個簡單的函數居然會失??!后來在google搜索 到glGetString(GL_VERSION)失敗的原因: gladLoadGL需要放在SDL_GL_CreateContext之后調用。而我把它放在了SDL_Init和SDL_GL_CreateContext之間了。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广东省| 博野县| 方正县| 炉霍县| 明溪县| 衡水市| 昔阳县| 遵化市| 天水市| 修文县| 平度市| 中西区| 依安县| 盐山县| 苍南县| 茌平县| 呼图壁县| 江源县| 杭锦后旗| 曲松县| 双峰县| 松江区| 南汇区| 汕头市| 疏附县| 上栗县| 江津市| 根河市| 徐州市| 河池市| 乌兰察布市| 烟台市| 慈溪市| 邢台县| 肇源县| 兴安盟| 崇左市| 荣成市| 霍城县| 崇义县| 永兴县|