状況は次のとおりです。2 つの FBO を使用します。1 つはイメージ フィルタリングの解像度 640*480 用で、もう 1 つはフィルター処理されたイメージの解像度 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 を準備する時間が必要だからだと思います。2 つの FBO を同じ解像度に変更しようとしましたが、違いはないようです。それをスピードアップするためのヒントはありますか?
PS私はglfw、VS2010 Win7でOpenGL/glsl 3.3を使用しています