固定機能は通常、最新のGLドライバーのシェーダーを使用して実装されます(すべての固定機能にSM2.0 +シェーダーを使用した古いATIのプレゼンテーションがあります)。
このような自明に近いブレンディングフラグメントシェーダー
in vec2 TexCoord;
uniform sampler2D Texture0;
uniform sampler2D Texture1;
out vec4 out_FragColor;
void main()
{
vec4 Color = texture(Texture0, TexCoord);
/// The mask contains (R,G,B,A) - image + transparency
/// for both the mask and the source
vec4 Mask = texture(Texture1, TexCoord);
/// Mask is also significant as a color source, not only the alpha
out_FragColor = Color * ( 1.0 - Mask.a ) + Mask * Mask.a;
/// Thanks to Tim's comment, the last line can be done simpler:
/* out_FragColor = mix(Color, Mask, Mask.a); */
}
あなたが望むように画像を混ぜる必要があります。
これは最新のハードウェアにとってはやり過ぎではなく、GL ES 2.0ハードウェアと100%互換性があります。
編集:
私のプロジェクトの1つからの画像(フェードアウェイ反射を作成するために使用される単純なマスク)。
このマスクを使用します
この画像で最終結果を取得します:ギャラリー