ベーステクスチャ(128 * 128)に「マーク」(64 * 64)を配置する単純なシェーダーを作成しようとしています。マークが必要な場所を示すために、ベースにシアン色のマークサイズ(64 * 64)領域を使用しますテクスチャ。
になる
フラグメントシェーダー
precision lowp float;
uniform sampler2D us_base_tex;
uniform sampler2D us_mark_tex;
varying vec2 vv_base_tex;
varying vec2 vv_mark_tex;
const vec4 c_mark_col = vec4(0.0, 1.0, 1.0, 1.0);//CYAN
void main()
{
vec4 base_col = texture2D(us_base_tex, vv_base_tex);
if(base_col == c_mark_col)
{
vec4 mark_col = texture2D(us_mark_tex, vv_mark_tex);//texelFetch magic overhere must be
base_col = mix(base_col, mark_col, mark_col.a);
}
gl_FragColor = base_col;
}
もちろん、それはうまく機能しません。私はこのようなものを得ました(デモンストレーションのみの透明度、シアン領域はなく、「T」の部分のみ):
私はそれを理解しようとしていますが、texelFetchのようなものだけが助けになりますが、ベーステクスチャシアンテクセルのtex座標を取得し、それを取得するように変換する方法がわかりません-最初の列/最初の行のシアンベーステクセル=最初の列/最初行マーク テクセル、2 列目/1 行目のベース = 2 列目/マークの 1 行目。等