英特尔核显运行opengl时的帧数过高或过低问题,opengl帧数问题
我相信不止我一個(gè)人在學(xué)習(xí)OpenGL時(shí)遇到了這些問題,國(guó)內(nèi)外的相關(guān)資料或解決方法很難找,也僅在glfw論壇里找到了幾個(gè)提出這個(gè)問題的人,并摸索到了莫名其妙的解決方法,具體原因也沒弄清楚。
這里也希望如果有遇到相同問題的人,也能搜索到我寫的這些東西來暫時(shí)解決這個(gè)問題和它帶來的煩惱。
下面就是幀數(shù)的問題:
1.opengl的代碼在英特爾核心顯卡上運(yùn)行時(shí)幀數(shù)超高,會(huì)超過1000fps甚至達(dá)到2000fps,核顯GPU負(fù)載直接達(dá)到100%
這個(gè)問題具體的原因暫時(shí)不清楚,但有說法是英特爾核顯在運(yùn)行時(shí)沒有幀數(shù)限制,能跑多快就跑多快,從而產(chǎn)生這個(gè)問題。
解決的方法是在主函數(shù)進(jìn)入循環(huán)之前加入glfwSwapInterval(1),這個(gè)代碼能啟動(dòng)opengl的垂直同步功能。但在英偉達(dá)GPU上加入這行代碼反而會(huì)引起畫面撕裂的問題,具體原因不清楚,但英偉達(dá)GPU在運(yùn)行OpenGL代碼時(shí)本就自帶垂直同步功能,也就無視掉吧。
2.在加入glfwSwapInterval(1)之后,英特爾核顯運(yùn)行OpenGL代碼時(shí)會(huì)出現(xiàn)渲染窗口幀數(shù)低于屏幕刷新率的現(xiàn)象,產(chǎn)生明顯的卡頓感,然而主循環(huán)每秒循環(huán)次數(shù)不受影響
這個(gè)問題的解決方法是在循環(huán)中加入glGetError()或glFinish(),窗口的幀數(shù)就會(huì)恢復(fù)到與屏幕刷新率同步恢復(fù)正常,順便一提啟動(dòng)Fraps也會(huì)使窗口幀數(shù)恢復(fù)正常。具體的原因不知道,也許是軟件問題,也許是驅(qū)動(dòng)問題,也許是硬件問題,也許是硬件廠商問題。但這已經(jīng)超越了初學(xué)者的范疇,也暫時(shí)不打算討論了。
這是我在glfw論壇上提出的這個(gè)問題,回答者也在回復(fù)里貼上了其他與我相似的問題:
https://discourse.glfw.org/t/i-have-a-question-about-fps/1498/2
glfw論壇的老哥很好,懂點(diǎn)英語(yǔ)的朋友也以去那里學(xué)習(xí)學(xué)習(xí)。
再添加點(diǎn)關(guān)鍵字:英特爾核顯opengl,opengl幀數(shù)問題,相同opengl代碼在不同GPU上幀數(shù)不同,英特爾核顯運(yùn)行opengl卡頓,英特爾核顯運(yùn)行opengl幀數(shù)過高。
希望這點(diǎn)文字被更多的opengl初學(xué)者看到,并解決他們的問題和問題帶來的煩惱。
總結(jié)
以上是生活随笔為你收集整理的英特尔核显运行opengl时的帧数过高或过低问题,opengl帧数问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 理解使用requests库
- 下一篇: 通达信交易接口及说明用法