我相信不止我一个人在学习OpenGL时遇到了这些问题,国内外的相关资料或解决方法很难找,也仅在glfw论坛里找到了几个提出这个问题的人,并摸索到了莫名其妙的解决方法,具体原因也没弄清楚。
这里也希望如果有遇到相同问题的人,也能搜索到我写的这些东西来暂时解决这个问题和它带来的烦恼。
下面就是帧数的问题:
1.opengl的代码在英特尔核心显卡上运行时帧数超高,会超过1000fps甚至达到2000fps,核显GPU负载直接达到100%
这个问题具体的原因暂时不清楚,但有说法是英特尔核显在运行时没有帧数限制,能跑多快就跑多快,从而产生这个问题。
解决的方法是在主函数进入循环之前加入glfwSwapInterval(1),这个代码能启动opengl的垂直同步功能。但在英伟达GPU上加入这行代码反而会引起画面撕裂的问题,具体原因不清楚,但英伟达GPU在运行OpenGL代码时本就自带垂直同步功能,也就无视掉吧。
2.在加入glfwSwapInterval(1)之后,英特尔核显运行OpenGL代码时会出现渲染窗口帧数低于屏幕刷新率的现象,产生明显的卡顿感,然而主循环每秒循环次数不受影响
这个问题的解决方法是在循环中加入glGetError()或glFinish(),窗口的帧数就会恢复到与屏幕刷新率同步恢复正常,顺便一提启动Fraps也会使窗口帧数恢复正常。具体的原因不知道,也许是软件问题,也许是驱动问题,也许是硬件问题,也许是硬件厂商问题。但这已经超越了初学者的范畴,也暂时不打算讨论了。
这是我在glfw论坛上提出的这个问题,回答者也在回复里贴上了其他与我相似的问题:
https://discourse.glfw.org/t/i-have-a-question-about-fps/1498/2
glfw论坛的老哥很好,懂点英语的朋友也以去那里学习学习。
再添加点关键字:英特尔核显opengl,opengl帧数问题,相同opengl代码在不同GPU上帧数不同,英特尔核显运行opengl卡顿,英特尔核显运行opengl帧数过高。
希望这点文字被更多的opengl初学者看到,并解决他们的问题和问题带来的烦恼。