4

opengles1.1でデプスバッファを使用したチュートリアルに従いました。しかし、私はopengles2.0を使用しています。実装されたコードはエラーになります:完全なフレームバッファオブジェクト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));
    }
}

よろしくニクラス

4

1 に答える 1

3

問題は、ストレージをDepthレンダーバッファーに2回バインドし、Colorレンダーバッファーにはバインドしないことです。EAGLContextへの-renderbufferStorage:fromDrawable:メッセージは、ストレージを現在バインドされているレンダーバッファー(この場合はDepthレンダーバッファー)にバインドします。glRenderbufferStorage続いて、呼び出しを使用してストレージを再度バインドします。

解決策は、ストレージメッセージを送信する前にColorレンダーバッファをバインドして、ストレージがそれにバインドされるようにすることです。つまりglBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);、Depthレンダーバッファを作成した後、メッセージのすぐ上に行を挿入します。それはうまくいくはずです、私はあなたのエラーを再現し、その後この方法でそれを解決することができました。

NB。常に正しいバッファがバインドされていることを確認してください。glGetIntegerv()バインディングとglGetRenderbufferParameteriv()追加パラメータの使用を確認できます。

于 2010-11-02T13:46:34.677 に答える