4

これはどういうわけか可能だと思います:

glBindFramebuffer(GL_READ_FRAMEBUFFER_APPLE, _multisampleFramebuffer);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER_APPLE, _framebuffer);
glResolveMultisampleFramebufferAPPLE();

まさにそれを行い、その上でマルチサンプリングを解決します。ただし、これは Apple の拡張機能であり、すべての論理バッファを 1 つのフレームバッファから別のフレームバッファにコピーし、バニラの実装でマルチサンプリング部分を実行しないようなものがあるかどうか疑問に思っていました。GL_READ_FRAMEBUFFER有効なターゲットではないようですので、直接的な方法はないと思いますか? 回避策はどうですか?

編集:glCopyImageSubDataOpenGL 4で使用できるようですが、残念ながらiPhoneでOpenGL ES 2.0を使用しているため、私の場合は機能が不足しているようです。その他の方法で?

4

3 に答える 3

3

glBlitFramebuffer は、探しているものを実現します。さらに、フレームバッファを 2 つ必要とせずに、1 つの TEXTURE を別の TEXTURE にブリットできます。OpenGL ES 2.0 で 1 つの fbo を使用できるかどうかはわかりませんが、次のコードを簡単に変更して 2 つの fbo を使用できます。異なるフレーム バッファ アタッチメントに異なるテクスチャをアタッチするだけです。glBlitFramebuffer 関数は、アンチエイリアス アプリケーションのダウンサンプリング/アップサンプリングも管理します! 使用例を次に示します。

// bind fbo as read / draw fbo
glBindFramebuffer(GL_DRAW_FRAMEBUFFER,m_fbo);
glBindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo);

// bind source texture to color attachment
glBindTexture(GL_TEXTURE_2D,m_textureHandle0);
glFramebufferTexture2D(GL_TEXTURE_2D, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_textureHandle0, 0);
glDrawBuffer(GL_COLOR_ATTACHMENT0);

// bind destination texture to another color attachment
glBindTexture(GL_TEXTURE_2D,m_textureHandle1);
glFramebufferTexture2D(GL_TEXTURE_2D, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, m_textureHandle1, 0);
glReadBuffer(GL_COLOR_ATTACHMENT1);


// specify source, destination drawing (sub)rectangles. 
glBlitFramebuffer(from.left(),from.top(), from.width(), from.height(),
                  to.left(),to.top(), to.width(), to.height(), GL_COLOR_BUFFER_BIT, GL_NEAREST);

// release state
glBindTexture(GL_TEXTURE_2D,0);
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER,0);
于 2013-03-09T07:58:19.710 に答える