欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SDL2和OpenGL使用踩坑筆記經(jīng)驗(yàn)分享

 更新時(shí)間:2018年12月18日 11:36:16   作者:李先靜  
今天小編就為大家分享一篇關(guān)于SDL2和OpenGL使用踩坑筆記經(jīng)驗(yàn)分享,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

SDL + OpenGL使用筆記

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

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

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

SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "nearest");

花了一些時(shí)間去看SDL的源碼后,發(fā)現(xiàn)其實(shí)SDL在創(chuàng)建窗口時(shí)提供了SDL_WINDOW_ALLOW_HIGHDPI標(biāo)志,可以用來解決模糊的問題:

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

如果設(shè)置了SDL_WINDOW_ALLOW_HIGHDPI標(biāo)志,窗口大小和Drawable的大小可能不一致,在繪圖時(shí)需要做相應(yīng)縮放:

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

二、nanovg裁剪算法無效。

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

glEnable(GL_STENCIL_TEST);

但是沒有效果,在nanovg的代碼中,也發(fā)現(xiàn)它自己會(huì)啟用stencil測(cè)試。對(duì)比基于nanovg基于GLFW的例子,也沒發(fā)現(xiàn)有價(jià)值的線索。然后對(duì)比SDL_CreateWindow/glfwCreateWindow和SDL_Init/glfwInit的實(shí)現(xiàn),發(fā)現(xiàn)SDL中,stencil_size的缺省值是0,嘗試把設(shè)置它為8:

SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);

顯示正常了。

三、Windows下的OpenGL

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

gladLoadGL();

編譯沒有問題了,不過運(yùn)行起來就崩掉了。調(diào)試時(shí)發(fā)現(xiàn)glGetString(GL_VERSION)返回NULL,這個(gè)簡(jiǎn)單的函數(shù)居然會(huì)失??!后來在google搜索 到glGetString(GL_VERSION)失敗的原因: gladLoadGL需要放在SDL_GL_CreateContext之后調(diào)用。而我把它放在了SDL_Init和SDL_GL_CreateContext之間了。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

最新評(píng)論