情况如下:我使用 2 个 FBO,1 个用于图像过滤分辨率 640*480,另一个用于实际渲染,使用过滤后的图像分辨率 1024*768。然而,帧率远低于我的预期,例如 30+ fps -> 15 fps。我检查了代码的每一步,发现(这是我创建的一个额外的 FBO):
// Render to our holefilling framebuffer
glBindFramebuffer(GL_FRAMEBUFFER, holeFillingFramebufferName);
//Attach depth buffer to the FBO
glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, depthBufferTexture, 0);
// No color output in the bound framebuffer, only depth.
glDrawBuffer(GL_NONE);
// Always check that our framebuffer is ok
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
return false;
// image filtering staff
这部分需要很长时间,我相信平均 30 毫秒。于是我评论glCheckFramebufferStatus
了几行,发现时间转移到了下面的部分。我认为这是因为系统需要时间在图像过滤作业开始之前准备 FBO。我试图将两个 FBO 更改为相同的分辨率,但似乎没有任何区别。有什么加快速度的技巧吗?
PS 我使用 OpenGL/glsl 3.3 和 glfw,VS2010 Win7