vec4がNULLかどうかをシェーダー(GLSL)内で確認しようとしています。これが必要な理由はいくつかあります。主に、特定のグラフィックカードに互換性を持たせるためです。これは、gl_FragColorで以前の色を渡すものと、渡さないもの(上書きする必要のあるnull vec4を提供するもの)があるためです。まあ、かなり新しいMacで、誰かがこのエラーを受け取りました:
java.lang.RuntimeException: Error creating shader: ERROR: 0:107: '==' does not operate on 'vec4' and 'int'
ERROR: 0:208: '!=' does not operate on 'mat3' and 'int'
これは、フラグメントシェーダーの私のコードです。
void main()
{
if(gl_FragColor == 0) gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); //Line 107
vec4 newColor = vec4(0.0, 0.0, 0.0, 0.0);
[...]
if(inverseViewMatrix != 0) //Line 208
{
[do stuff with it; though I can replace this NULL check with a boolean]
}
[...]
gl_FragColor.rgb = mix(gl_FragColor.rgb, newColor.rgb, newColor.a);
gl_FragColor.a += newColor.a;
}
ご覧のとおり、最初にgl_FragColorの0 / NULLチェックを行います。これは、グラフィックカードの中には貴重な情報を渡すものもあれば、渡さないものもあるためです。さて、その特別なマックでは、それは機能しませんでした。調査を行いましたが、GLSLで適切なNULLチェックを行う方法に関する情報が見つかりませんでした。1つでもありますか、それともここで個別のシェーダーを作成する必要がありますか?