OpenGL ES 2.0 iPhoneで深度バッファーを使用します
-
27-09-2019 - |
質問
OpenGL ES 1.1の深度バッファーを使用してチュートリアルに従いました。しかし、OpenGL ES 2.0を使用しています。実装されたコードの結果、エラーが発生します。完全なframebufferオブジェクト8cd6の作成に失敗しました。以下の実装コードを参照してください。
(void)createFramebuffer
{
if (context && !defaultFramebuffer)
{
[EAGLContext setCurrentContext:context];
// Create default framebuffer object.
glGenFramebuffers(1, &defaultFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebuffer);
// Create color render buffer and allocate backing store.
glGenRenderbuffers(1, &colorRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);
// Create depth render buffer
glGenRenderbuffers(1, &depthRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer *)self.layer];
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &framebufferWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &framebufferHeight);
glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, framebufferWidth, framebufferHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorRenderbuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer);
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER));
}
}
よろしくニクラス
解決
問題は、ストレージを深度renderbufferに2回バインドしていることであり、色がrenderbufferにならないことです。 -renderbufferStorage:fromDrawable:
EaglContextへのメッセージは、ストレージを現在バインドされたRenderBufferにバインドします。以下、あなたはそれを再びそれに結合しています glRenderbufferStorage
電話。
解決策は、ストレージメッセージを送信する前に色のrenderbufferを結合することです。そうすることで、ストレージが境界を獲得するようにします。つまり、行を挿入します glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);
メッセージのすぐ上で、深度renderbufferを作成した後。それは機能するはずです、私はあなたのエラーを再現し、その後この方法でそれを解決することができました。
NB。常に正しいバッファがバインドされていることを確認してください。使用して確認できます glGetIntegerv()
結合のために、そして glGetRenderbufferParameteriv()
追加のパラメーターの場合。
所属していません StackOverflow