2

テクスチャ iPhone コードへのレンダリングは、MSAA を無効にした場合にのみ機能します。それ以外の場合は、黒いテクスチャしか得られません。問題の原因は何ですか?

これが私のコードです:

glViewport(0,0, target->_Width, target->_Height);
glClear(GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT Or GL_STENCIL_BUFFER_BIT);

glBindTexture(GL_TEXTURE_2D, target->_Handle);          

// render stuff here

glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, target->_Width, target->_Height, 0);
glBindTexture(GL_TEXTURE_2D, 0);
4

2 に答える 2

3

どうやら、メイン フレーム バッファに MSAA を使用している場合は、レンダリング先の他の FBO にもそれを使用する必要があります。は OpenGL ES 2 では使用できないためGL_TEXTURE_2D_MULTISAMPLE、私が見つけた解決策は、通常のレンダリングから MSAA レンダリングに必要な同じ変更を、レンダリングからテクスチャへのコードにも適用することです。

3 つの追加バッファーが必要です: マルチサンプリングされたカラー レンダーバッファー、マルチサンプリングされた深度レンダーバッファー、およびそれらをアタッチするための新しい FBO。レンダリングする前に、テクスチャ FBO の代わりに新しい FBO をバインドします。レンダリング後、 を使用してメイン レンダリング コードで行うのと同じ方法で、新しい MSAA FBO をテクスチャ FBO に解決しますglResolveMultisampleFramebufferAPPLE()

何らかの理由で、MSAA を有効にしたテクスチャ レンダリングは、シミュレータでこれらの変更を行わなくても機能することに注意してください。多分それはGL_TEXTURE_2D_MULTISAMPLE自動的に使用しますか?

于 2011-09-12T09:16:36.960 に答える
0

この問題の原因は、OpenGL ES でマルチサンプリングされたテクスチャにレンダリングできないことです。確かに、私の記憶が正しければ、OpenGL ES にはマルチサンプル テクスチャは存在しません。デスクトップ OpenGL ではそれが可能ですが、それを行うためにまったく新しいテクスチャ ターゲット (GL_TEXTURE_2D_MULTISAMPLE) が導入されています。

マルチサンプリングを提供するバッファは、通常のテクスチャと同じではありません。そのため、デスクトップ OpenGL は、独自の GLSL サンプラー タイプを持つ特別なテクスチャ ターゲットを使用します。

于 2011-06-14T11:53:35.883 に答える