2015-12-15 36 views
1

我想我明白glEnableVertexAttribArray的作用 - 它激活程序的特定屬性(如果我錯了,請糾正我)。glEnableVertexAttribArray修改了什麼對象的狀態?

我不明白,雖然是哪個對象存儲這些信息。它是程序對象嗎?也就是說,如果我做的:

glUseProgram(program); 
glEnableVertexAttribArray(0); 

再後來就做:

glUseProgram(program); 
glDrawArray(...); 

將在位置0的屬性被啓用?

或者它是否正在修改某些全局狀態,每次在每次繪製調用之前需要重新設置? 或者它是否修改了VAO的狀態?如果是這樣,那麼在沒有VAO的OpenGL ES 2.0中呢?

回答

2

它影響頂點數組對象狀態。

如果是這樣,那麼在沒有VAO的OpenGL ES 2.0中呢?

然後它影響全局上下文狀態。成爲VAO狀態的這一組狀態最初只是全球狀態。這就是OpenGL綁定修改對象模型存在的原因;所以當你添加新的對象時,你不必改變舊的代碼。

+1

太好了。謝謝!爲了澄清,這意味着(在沒有VAO的OpenGL ES 2.0中),每次需要使用一組新的頂點屬性進行繪製時,我需要爲每個屬性調用glVertexAttribPointer()和glEnableVertexAttribArray(),對吧? – user2771609

+0

你有沒有想過? – nmr

+0

我想不是。我結束了使用ES 2.0,所以我使用了VAO。 – user2771609