テクスチャユニットから読み込んだシェーダを書きました。実行パスを分割する可能性があるため、一般的にシェーダの条件を避ける必要があります。あなたが条件付きで動作しているものが統一されている場合、通常、コンパイラはそれを理解することができますが、ユニフォームを設定するたびに再コンパイルを支払う可能性があります。かもしれない代替としてプロファイルする可能性
uniform bool u_ApplyTexture;
...
if(u_ApplyTexture)
gl_FragColor = {what you already have};
else
gl_FragColor = v_Color;
非条件代替:
uniform float u_TextureWeight;
...
gl_FragColor = v_Color*
mix(vec4(1.0),
texture2D(u_TextureUnit, v_TextureCoordinates),
u_TextureWeight);
ES 2は一応の解決策のようなものであるかもしれないので、サンプリング部の電流特性をイントロスペクトする手段を持ちません
u_TextureWeight
が
1.0
とき
u_TextureWeight
が
0.0
と
v_Color*texture2D(u_TextureUnit, v_TextureCoordinates)
あるときによう
はv_Color*vec4(1.0)
に評価されます。
あなたが本当にハックであることを探している場合、あなただけのシェーダで再びそれらを負イメージとしてあなたのテクスチャをアップロードして、負のかもしれません。そして、明らかとして
gl_FragColor = v_Color*(vec4(1.0) - texture2D(u_TextureUnit, v_TextureCoordinates));
あなたは、サンプリング部からvec4(0.0)
を取得している場合テクスチャが付いていないので、v_Color
と1.0
を掛け合わせることになります。
私は最初の非ハッキリ解決策に固執します:)または2つの異なるシェーダを使用してください。 – 246tNt
確かに。最も簡単なことは、まず、常に。性能がそれを必要とする程度にまで複雑性を加える。 – Tommy
理想的な回答、ありがとう – Mohamed