내 프로그램 내에서 대상을 설정하기 위해 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);
편집 : 문제점을 발견했습니다! 내 스왑 체인 안에있었습니다. 나는 원래 그림을 그리고 그 후에 검은 그림을 렌더링했다. 그래서 프레임 속도가 떨어지면 깜박 거립니다.
이중 버퍼링이 깜박임을 줄이는 이유는 무엇입니까? –
프레임 버퍼가 하나 뿐이고 렌더 타겟이 두 개 있습니다 (텍스처로). 이제 약간의 깜박임이 있습니다. 두 개의 프레임 버퍼 (각자 자신의 렌더 타겟을 얻음) - glBindFramebuffer로 프레임 버퍼 전환 - 깜박임이 없습니다. 그러나 필자가 읽은 여러 웹 사이트에서는 새로운 렌더링 타겟을 설정할 때 framebuffer를 전환하는 속도가 느리다는 내용의 글이 있습니다. –
"나는 그것을 느꼈다"* 한숨 *. 조기에 최적화하지 마십시오. 먼저 측정하십시오. 또한 거의 모든 응용 프로그램이 이중 버퍼링을 사용합니다. –