a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統 > 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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 最新国产精品精品视频 | 这里精品| 日韩精品www | 中文字幕一区二区三区精彩视频 | 中文无码久久精品 | 亚洲视频一区 | 无套内谢孕妇毛片免费看红桃影视 | 激情婷婷 | 综合一区| 免费特级黄毛片 | 欧洲精品一区 | 精品国产一区二区三区性色av | 久久精品小视频 | 亚洲精品视频在线播放 | 日本精品二区 | 精品久久一区二区三区 | 亚洲成人福利 | 久久sese| 一级毛片在线播放 | 天堂精品一区 | 不卡三区 | 亚洲天堂一区 | 91精品国产综合久久久蜜臀粉嫩 | 一区二区三区四区 | 精品无码久久久久国产 | 国产精品久久久久永久免费观看 | 九九热精 | 九七超碰在线 | www久| 午夜视频91 | av在线免费观看一区二区 | 国产精品一区二区三区免费看 | 免费精品视频 | 国产日韩欧美综合 | 色综合88| 国产三级电影 | 欧美精品久久久久久久宅男 | 欧美精品1区2区 | 色黄网站 | 日本在线观看视频网站 | 日韩在线免费电影 |