我想檢查內部着色器(GLSL)如果我的vec4是NULL。我需要這樣做的原因有很多,主要是爲了獲得特定的圖形卡兼容,因爲它們中的一些在gl_FragColor中傳遞了以前的顏色,而另一些則沒有(提供需要被覆蓋的空vec4)。 好了,一個相當新的Mac,有人得到這個錯誤:在GLSL NULL檢查
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;
}
正如你所看到的,我做了一個0/NULL檢查gl_FragColor在開始時,因爲有些圖形卡在那裏傳遞了有價值的信息,但有些卻沒有。現在,在那個特殊的mac上,它不起作用。我做了一些研究,但找不到有關如何在GLSL中進行適當NULL檢查的任何信息。是否還有一個,還是我真的需要在這裏製作單獨的着色器?
我不認爲GLSL中的矢量數據類型可以爲NULL。與C/C++中可以爲NULL的指針和Java中的引用不同,它們總是一些東西。 –
好吧,除非我也改變了別的東西,那NULL檢查正是解決了一些其他圖形卡上的錯誤(與alpha相關)的問題。它也適用於大多數,所以我不能想象爲什麼它不會在這個?我只能猜測它總是會在vec4 - int比較中返回false ... =/ – Ivorius