我正在使用 FBO+RBO,而不是在默认帧缓冲区上进行常规双缓冲,而是绘制到 RBO,然后在单个缓冲 OpenGL 上下文中直接在默认 FBO (0) 的 GL_FRONT 缓冲区上进行 blit。
这很好,我没有任何闪烁,但如果场景变得有点复杂,我会经历 fps 的巨大下降,这太奇怪了,我知道一定有问题。而且我的意思不是因为跳过同步而从 1/60 到 1/30,我的意思是 90% 的 fps 突然下降。
我在 blit 之后尝试了 glFlush() - 没有区别,然后我在 blit 之后尝试了 glFinish(),我得到了 10 倍的 fps 提升。
因此,我在默认帧缓冲区和 swapbuffers() 上使用了常规双缓冲,并且 fps 也得到了提升,就像使用 glFinish() 时一样。
我无法弄清楚发生了什么。为什么 glFinish() 在不应该的情况下会产生如此大的影响?并且,可以直接在前端缓冲区上使用 RBO 和 blit,而不是在双缓冲上下文中使用 swapbuffers 调用吗?我知道我缺少 vsync,但复合管理器无论如何都会同步(事实上我没有看到任何撕裂),就好像监视器缺少 10 帧中的 9 帧。
只是出于好奇,本机 swapbuffers() 在 windows 或 linux 上使用 glFinish() 吗?