1

フラグメント シェーダー コードのフラグメントを次に示します (シェーダーでブレンディングを行う必要があります)。

float a = texture2D(tMask, texCoords).x; // opacity of current pixel from mask texture.
if ( a == 0.0)
    discard;
else {
    vec4 dst_clr = texture2D(tBkgText, posCoords); // color of current pixel in current framebuffer.
    vec4 src_clr = vec4(vColor.rgb, sOpacity);
    gl_FragColor = src_clr * a + dst_clr * (1.0 - a);
}

ブレンド関数と方程式は次のとおりです。

glBlendFunc(GL_ONE, GL_ZERO);
glBlendEquation(GL_FUNC_ADD);

デバイス (左) とシミュレータ (右) での結果は次のとおりです。

デバイス上 シミュレーターで

エミュレータのように動作するようにするにはどうすればよいですか?

アップデート:

削除しましたdiscard

float a = texture2D(tMask, texCoords).x; // opacity of current pixel from mask texture.
vec4 dst_clr = texture2D(tBkgText, posCoords); // color of current pixel in current framebuffer.
vec4 src_clr = vec4(vColor.rgb, sOpacity);
gl_FragColor = src_clr * a + dst_clr * (1.0 - a);

デバイスでの結果は次のようになります。

なしのデバイスで

4

1 に答える 1

0

glFlushafterを追加してこの問題を解決しましたglDrawArrays。問題は、関連付けられたフレーム バッファで描画が行われるときに、テクスチャが更新されないことでした。

于 2013-02-07T09:34:23.230 に答える