OpenGL ES 1.1テクスチャを作成しようとしています。画面にレンダリングされたオフスクリーンレンダリング画面上に空の矩形をレンダリングする
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
GLuint texFrambuffer;
glGenFramebuffers(1, &texFrambuffer);
glBindFramebuffer(GL_FRAMEBUFFER, texFrambuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER) ;
if(status != GL_FRAMEBUFFER_COMPLETE) {
NSLog(@"failed to make complete framebuffer object %x", status);
// this message doesn't appear, thus, framebuffer is complete
}
glViewport(0, 0, 32, 32);
glClearColor(1.0f, 0.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
GLfloat vertices[] = {
10.0f, 10.0f, 0.0f,
20.0f, 40.0f, 0.0f,
10.0f, 30.0f, 0.0f
};
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glDeleteFramebuffers(1, &texFrambuffer);
がシーンにテクスチャをレンダリング:テクスチャ準備
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
GLshort texCoord[] = {0, 0, 0, 1, 1, 0, 1, 1};
GLfloat vertices2[] = {0.0, 0.0, 0.0, 31.0f, 31.0f, 0.0f, 31.0f, 31.0f};
glVertexPointer(2, GL_FLOAT, 0, vertices2);
glTexCoordPointer(2, GL_SHORT, 0, texCoord);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisable(GL_TEXTURE_2D);
完全なソースコードはのBitbucketで公開されています。https://bitbucket.org/amjaliks/gl2/src/66ee4932e212/GL2/GL2View.m
あり、他のコンテンツが正しくレンダリングされます。問題はこのテクスチャのみであり、白い四角形としてレンダリングされます。
私は多くの例を研究しましたが、私が間違っていることをまだ理解できません。何が欠けている?
アップデート1:私はglClearColor()
を設定し、texFrambuffer
がバインドされている間、これらの変更は、私のテクスチャに保存されているglClear()
を呼び出す場合、私は、気づきました。したがって、glDrawArrays()
および/または関連するものに問題があります。
texFrambuffer
のマトリックスモードと投影を設定する必要がありますか?
アップデート2:私はテクスチャに「メイン」フレームバッファからコンテンツをコピーするglCopyTexImage2D
を使用することも試してみました。
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glViewport(0, 0, 32, 32);
glClearColor(1.0f, 0.75f, 0.5f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
GLfloat vertices[] = {
0.0f, 0.0f, 0.0f,
20.0f, 32.0f, 0.0f,
10.0f, 30.0f, 0.0f
};
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
glBindTexture(GL_TEXTURE_2D, texture);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 32, 32, 0);
のBitbucketで入手可能
完全なソースコード:https://bitbucket.org/amjaliks/gl2/src/b3339661650e/GL2/GL2View.m
結果は同じです。塗りつぶされた矩形のみ。私の行列には間違いなく問題があるようです。
あなたはglGenFramebuffersOES、glBindFramebufferOESなどを使用していません...コアではなくOES関数ですか? ES 1.1にはフレームバッファオブジェクトがコアに含まれていないため、拡張として使用できます。 –
AppleがAPIを統合したようです。 OESを使用し、OESを使用しない方法を使用する違いはありません。 –
あなたは一体どういう意味ですか? Appleのドキュメントにも書かれています:https://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/OpenGLESontheiPhone/OpenGLESontheiPhone.html#//apple_ref/doc/uid/TP40008793-CH101-SW6フレームバッファオブジェクトはiOSの唯一のレンダリングターゲットです).GLES 1.1では、OES_framebuffer_object拡張を使用する必要があります。 –