3

編集:解決済み

テクスチャにレンダリングしようとしたときに問題が発生しました。次のようなフレームバッファオブジェクトを作成します。

glGenTextures(1, &renderFBOtex);
glBindTexture(GL_TEXTURE_2D, renderFBOtex);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);

glGenRenderbuffers(1, &renderFBOrender);
glBindRenderbuffer(GL_RENDERBUFFER, renderFBOrender);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);

glGenFramebuffers(1, &renderFBO);
glBindFramebuffer(GL_FRAMEBUFFER, renderFBO);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, renderFBOtex, 0);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, renderFBOrender);

GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
glBindFramebuffer(GL_FRAMEBUFFER, 0);

ただし、の戻り値glCheckFrambufferStatusは常にGL_FRAMEBUFFER_INCOMPLETE_ATTACHMENTです。

Renderbufferがアタッチされていなくても同じであるため、問題はテクスチャにあるようです。フレームバッファ自体への描画は問題にはなりません。

誰かが私がここで欠けているものを指摘してもらえますか?

4

3 に答える 3

1

カラーバッファにアタッチする前に、テクスチャミップマップを作成します。

このタスク専用のルーチンはglGenerateMipmapです。


もう1つの提案は、テクスチャの内部形式で遊ぶことです。サイズ設定された内部フォーマットを指定していません。エラーの理由の1つは、テクスチャにサポートされている色レンダリング可能な内部形式がないことであるため、試してみることができます。

于 2011-12-02T12:33:28.643 に答える
1

問題はプログラムの別の部分にありました。これは非常に愚かな間違いであり、テクスチャの幅と高さに誤って初期化された値を使用することになりました。両方とも0に設定されているため、不完全な接続エラーが発生します。

于 2011-12-03T17:44:53.043 に答える
0

これを試して:

glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, renderFBOtex, 0);
                          ^^^^

技術的には違いはありませんが、一部のドライバーにはこのバグがある可能性があります。

于 2011-12-01T19:35:58.713 に答える