我的程序中我正在使用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