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 は使いたくない...)