背景:
デフォルトのウィンドウ システム フレームバッファ オブジェクトにプリミティブを描画しようとしています。正しくレンダリングされる 3 つのオブジェクトがあります。ここで、これらと同じ画像を含む独自のフレームバッファ オブジェクトを生成したいと考えていますが、実行時の選択に使用されるフラットな一意のカラー ID で各オブジェクトをレンダリングします。ユーザーには 3 つのオブジェクトが表示され、マウス クリックでオブジェクトの 1 つを選択すると、コードはフレームバッファ オブジェクトのピクセルを読み取って色を決定します。色が読み取られると、オブジェクトの色が変更され、選択されたことを示します。
問題:
何らかの理由で、glBindFramebuffer(GL_FRAMEBUFFER, fbo);
がGL_INCOMPLETE_DRAW_BUFFER
への呼び出し後にglCheckFramebufferStatus(GL_FRAMEBUFFER)
. コードが添付されています。フレームバッファオブジェクトを正しく設定していないのでしょうか? それとも、VMWare がフレームバッファ オブジェクトを許可していないのでしょうか? これがフレームバッファオブジェクトを行う正しい方法であることを確認するために、いくつかの健全性チェックが必要です。
コード (できれば関連部分のみ):
void initFrameBuffers()
{
glGenRenderbuffers(NumRBOs, rbos);
glBindRenderbuffer(GL_RENDERBUFFER, rbos[COLOR]);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, WIDTH, HEIGHT);
glBindRenderbuffer(GL_RENDERBUFFER, rbos[DEPTH]);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, WIDTH, HEIGHT);
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo); // Causes the error
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbos[COLOR]);
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbos[DEPTH]);
glEnable(GL_DEPTH_TEST);
// Re-enable the default window-system framebuffer for drawing
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
}
void drawToFBO()
{
// Load the user defined framebuffer object
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
glDrawBuffer(GL_COLOR_ATTACHMENT0);
glViewport(0, 0, WIDTH, HEIGHT);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Draw into the user defined framebuffer object, not the default window-system FBO
glBindVertexArray(vaos[CYLINDER]);
glDrawArrays(GL_TRIANGLES, 0, cylinder.vertices.size());
// Re-enable the default window-system framebuffer
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
}
さて、initFrameBuffers メソッドを呼び出す前に何か特別なことをする必要があるかどうかはわかりませんが、これが私がやっていることです。メイン関数は を呼び出しinitFrameBuffers
、次にinit()
メソッドを呼び出します。これにより、3 つのオブジェクトがデフォルトのウィンドウ システム FBO に描画されます。
これと同じコードを新しいバージョンの Kubuntu で試してみたところ、別のエラー コードが表示されましGL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
たGL_INCOMPLETE_DRAW_BUFFER
。ここで何が起こっているのか、私にはまったくわかりません。私はレッドブックの第8版を読んでいて、彼らの提案に従っていますが、フレームバッファをバインドすることを乗り越えることができないようです.