2017-02-14 39 views
0

我可以將opengl緩衝區對象綁定到多個目標。例如,我將緩衝區綁定到目標數組緩衝區,然後將同一個緩衝區綁定到SHADER_STORAGE_BUFFER或某個otger目標,是綁定到第一個或第二個目標的緩衝區?將緩衝區綁定到多個目標

回答

1

的OpenGL規範:

void [gl]BindBuffer(enum target, uint buffer);如果命名緩衝器緩衝對象 先前沒有被約束,GL創建一個新的狀態 向量,具有零大小的存儲器緩衝器初始化和包含所有 國家和在表中列出的相同的初始值...

而且

BindBuffer也可用於綁定現有的緩衝區對象。如果綁定成功,則不更改新綁定的 緩衝區對象的狀態,並且任何先前綁定到目標的任何綁定都會中斷

所以,是的:你可以使用相同的名稱(如glGenBuffers創建),這束縛現有的緩衝帶不同的用途(目標在OpenGL中的說法)綁定。但我想不出有這個理由。

+0

感謝您的幫助。我想這樣做的原因是,在我的程序中,我希望能夠使用ARRAY ELEMENT BUFFER將緩衝區附加到VAO。這實際上會創建一個附屬於VBO的IBO。那麼如果我後來想編輯國際文憑組織,我可以將它綁定到ARRAY BUFFER,而不必擔心從VAO中取消它。問題是,是否將緩衝區綁定到ARRAY BUFFER將從其所綁定的VAO中取消緩衝區。 – pdid

+0

當它是ARRAY ELEMENT BUFFER之前綁定到ARRAY BUFFER將打破以前的綁定。如果你的理由正在改變數據,爲什麼不使用'glBufferSubData'而沒有任何未連接? – Ripi2

+0

@ Ripi2:「*將打破以前的綁定*」它將打破以前的'GL_ARRAY_BUFFER'目標綁定,就像你引用規範一樣。但它不會更改該緩衝區的任何其他綁定位置。 –

相關問題