我的程序中我正在使用glFramebufferTexture2D来设置目标。但是如果我使用它,输出开始闪烁。如果我使用两个帧缓冲区,输出看起来很正常。什么是更快? glFramebufferTexture2D输出闪烁
有没有人知道为什么会发生这种情况,或者在以下源代码中可以做些什么? - 这是一个例子,一些不相关的代码不在里面。
// bind framebuffer for post process
::glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_SwapBuffer);
::glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_SwapBufferTargets[SwapBufferTarget1]->m_NativeTextureHandle, 0);
unsigned int DrawAttachments = { GL_COLOR_ATTACHMENT0 };
::glDrawBuffers(1, &DrawAttachments);
...
// render gaussian blur
m_Shader->Use();
::glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_BlurredImageFromPass1->m_NativeTextureHandle, 0);
_InputTexturePtr->ActivateTexture(GL_TEXTURE0);
RenderMesh();
::glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _TargetTexturePtr->m_NativeTextureHandle, 0);
m_BlurredImageFromPass1->ActivateTexture(GL_TEXTURE0);
RenderMesh();
...
// copy swap buffer to system buffer
::glBindFramebuffer(GL_READ_FRAMEBUFFER, m_SwapBuffer);
::glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
::glBlitFramebuffer(0, 0, m_pConfig->m_Width, m_pConfig->m_Height, 0, 0, m_pConfig->m_Width, m_pConfig->m_Height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
编辑:我发现了问题!它在我的交换链中。我已经呈现了原始图片,然后是黑色的。所以如果帧频下降,我会闪烁。
你问为什么双缓冲减少闪烁? – 2013-03-05 15:22:11
我只有一个帧缓冲区和两个渲染目标(作为纹理)。现在我有一些闪烁。两个帧缓冲区(每个都有自己的渲染目标) - 用glBindFramebuffer切换帧缓冲区 - 我没有闪烁。但是在我读过的几个网站上,写道,切换帧缓存比设置新的rendertarget要慢。 – 2013-03-05 15:29:46
“我读过它比较慢”*叹*。不要过早地优化。先量一下。而且,几乎每个应用程序都使用双缓冲。 – 2013-03-05 15:34:13