2010-06-17 62 views
4

我正在WebGL中編寫我的第一個着色器。我想知道GLSL語言是否有任何方法來評估屬性或制服是否爲空。根據該規範,不支持像做我在WebGL中的第一個着色器

if (attributeX) { 
dothis(); 
} 
else{ 
dothat(): 
} 

而且我認爲這將是寫爲每個這些情況下,布爾屬性將是一種浪費的浪費。

另一個問題:渲染過程中發生了什麼,當你沒有將制服或屬性傳遞給着色器時?

謝謝!

回答

5

GLSL沒有null的概念,在這種情況下使用bool uniform是很好的。

如果你不通過制服,他們得到零初始化,對於attribs,我認爲你會得到垃圾。

+0

不,你不會得到垃圾。你可以得到這個屬性的常量值(你可以用glVertexAttrib來設置它http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml) – Bahbar 2010-06-18 08:08:11

+0

對,如果你沒有設置它,你會得到默認的初始化爲零,但仍然看到實現崩潰或給垃圾。 – 2010-06-18 19:47:18

2

另一種選擇是擁有多個着色器並根據情況使用它們。這裏的目標是消除如果來自着色器的聲明使它們更有效。