2

OpenGL ES 2.0 コードを変換して、OpenGL ES 2.0 をサポートせず、標準 OpenGL のみをサポートする標準デスクトップ ハードウェアで実行します。

このコードでは、拡張機能GL_EXT_shader_framebuffer_fetch(以前は として知られていましたGL_APPLE_shader_framebuffer_fetch) を使用しています。これにより、フラグメント シェーダーは次の方法で「前の」フラグメント カラーを読み取ることができます。

mediump vec4 lastFragColor = gl_LastFragData[0];

これは、カスタム (プログラム可能な) ブレンディングに使用できます。

OpenGLにこれに相当するものはありますか?

そうでない場合は、フレーム バッファ テクスチャにレンダリングし、このテクスチャをレンダリングしている同じフラグメント シェーダにアタッチする必要があります。

4

1 に答える 1

3

直接の同等物ではありませんが、デスクトップ OpenGL (4.5 のコア、または ARB_texture_barrier/GL_NV_texture_barrier 経由) の glTextureBarrier() を使用すると、現在バインドされている fbo にレンダリング中に、現在バインドされている fbo にアタッチされている同じテクスチャから読み取ることができます (いくつかの制限があります)。

そのため、GL_EXT_shader_framebuffer_fetch を使用すると、次のようなことができます

gl_FragColor = 0.5 * gl_LastFragData[0];

glTextureBarrier を使用すると、次のようなことができます

gl_FragColor = 0.5 * texelFetch(current_color_attachment, ivec2(gl_FragCoord.xy), 0)​;

どちらのメソッドも、現在のフラグメントの色を読み取り、変更してから書き戻します。

于 2016-09-20T06:41:55.570 に答える