1

フォトショップのようなレイヤー機能を実装しようとしています。これが私が描きたいものです。

http://s19.postimage.org/6n8eejbkz/image.png

でも下のように描かれています

http://s19.postimage.org/hpdhcz5nn/image.png

2層を使用しています。2つのテクスチャフレームバッファで作成され、1つは背景用、もう1つは描画用です。テクスチャはフラグメントシェーダーとミックスされます。

mediump  vec4 tex0_color = texture2D(texunit0,TexCoordOut);  // bg texture
mediump  vec4 tex1_color = texture2D(texunit1,TexCoordOut);  // drawing texture 
mediump  vec4 mix_color  = mix(tex0_color,tex1_color,tex1_color.a);

描画レイヤーの各描画は、頂点ポイントスプライトを使用して実行されます

highp float a = DestinationColor.a * texture2D(texunit0,gl_PointCoord).a;
gl_FragColor  = vec4(DestinationColor.rgb,a);

以下のように設定されたブレンド機能。

glEnable    (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

アドバイスをいただけますか?

4

2 に答える 2

3

シェーダーはブレンド操作を実行するように作成されていません。これは、ターゲット テクスチャへの読み取りと書き込みの両方が必要であり、同期的にしか実行できないため、パフォーマンスが非常に低下するためです。このような同期は、現時点では非プログラマブル パイプラインでのみ実装できます。

読み取り用と書き込み用の 2 つのテクスチャを用意することを検討してください。ブラシを適用したら、それらを切り替えます。

于 2012-09-06T07:46:53.733 に答える
1

GLSL を介したブレンド モードなど、さまざまな Photoshop を実装する必要がある場合は、この記事も参照してください

于 2012-09-06T06:26:52.060 に答える