0

iPhoneからAndroidにゲームを移植しています。NDK と OpenGLES 2.0 を使用しています。
後でレンダリングするために使用するテクスチャが添付されたフレームバッファを作成する次のコードに問題があります。

glGenFramebuffersOES(1, &glTextureFrameBuffer);
glBindFramebufferOES(GL_FRAMEBUFFER, glTextureFrameBuffer);

// attach renderbuffer
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, glName, 0);

GLint status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(status == GL_FRAMEBUFFER_COMPLETE) {
    cout << "Framebuffer completed" << endl;
} else {
    cout << "Framebuffer error: " << status << endl;
}

// unbind frame buffer
glBindFramebufferOES(GL_FRAMEBUFFER, 0);

cout << "CREATED FRAMEBUFFER ID: " << glTextureFrameBuffer << endl;

これにより、次のように出力されます。

Framebuffer error: 0
CREATED FRAMEBUFFER ID: 4294967295

そして、そのテクスチャへのレンダリングは何もしないので、何かが失敗しており、glGenFramebuffersOES (4294967295) によって返された ID から、フレームバッファが生成されていないと思われます。

コードはiOSで完全に機能しています。
何が問題なのですか?

編集:

エラー ckecking を追加しました: glFramebufferTexture2D の後に GL_INVALID_OPERATION を取得しています。
しかし、glGenFramebuffersOES の後で GL_INVALID_VALUE エラーも発生します。奇妙なことに、iPhoneでもそのエラーが発生しますが、とにかくすべてが機能します。

OpenGLES のドキュメントを読みましたが、最初のパラメーターが負の場合、glGenFramebuffersOES は GL_INVALID_VALUE エラーを設定しますが、そうではありません。

編集2:

私の悪い、 glGenFramebuffersOES はエラーを設定していません.GL_INVALID_VALUEは以前のどこかに設定されていました.
それでも、glFramebufferTexture2D は GL_INVALID_OPERATION を設定しています。また、glGenFramebuffersOES によって返される ID が 4294967295 であることも奇妙に思えます。

何か案が?

4

2 に答える 2

2

glBindFramebufferOESの代わりになぜ使用しているのglBindFramebufferですか? OpenGL ES 2.0 には、(OpenGL ES 1.0 のように) OES 拡張ではなく、そのコア仕様にフレームバッファがあります。

あなたはすでにglFramebufferTexture2Dfunction notを使用していますglFramebufferTexture2DOESよね?したがって、glGenFramebuffers関数と も使用しますglGenFramebuffers

于 2012-06-09T17:14:03.833 に答える