4

FrameBuffers について少し混乱しています。GL_COLOR_ATTACHMENT0現在、画面に描画するために、このコードを使用するための Renderbuffer でフレームバッファを生成しています。

-(void)initializeBuffers{

    //Build the main FrameBuffer
    glGenFramebuffers(1, &frameBuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);

    //Build the color Buffer
    glGenRenderbuffers(1, &colorBuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, colorBuffer);

    //setup the color buffer with the EAGLLayer (it automatically defines width and height of the buffer)
    [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:EAGLLayer];
    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &bufferWidth);
    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &bufferHeight);

    //Attach the colorbuffer to the framebuffer
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorBuffer);

    //Check the Framebuffer status
    GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);

    NSAssert(status == GL_FRAMEBUFFER_COMPLETE, ERROR_FRAMEBUFFER_FAIL);

}

そして、次を使用してバッファの内容を表示します

[context presentRenderbuffer:GL_RENDERBUFFER];

この質問を読んで、次のような Arttu Peltonen のコメントを見ました。

デフォルトのフレームバッファは、デフォルトでレンダリングする場所です。それを取得するために何もする必要はありません。Framebuffer オブジェクトは、代わりにレンダリングできるものであり、一部では「オフスクリーン レンダリング」と呼ばれています。これを行うと、デフォルトのフレームバッファ (画面に表示される) ではなく、画像がテクスチャになります。そのテクスチャからデフォルトのフレームバッファ (画面上) にイメージをコピーできます。これは通常、ブリッティングで行われます (ただし、OpenGL ES 3.0 でのみ使用できます)。しかし、画像を画面に表示したいだけなら、そもそも FBO を使用しないでしょう。

だから、私の方法はオフスクリーンレンダリングに使用されるだけなのだろうか。その場合、デフォルト バッファでレンダリングするにはどうすればよいでしょうか?! (注、GLKView は使いたくない...)

4

1 に答える 1