2017-09-05 119 views
1

我剛剛嘗試更新一個頂點緩衝區對象(vbo),它具有靜態繪製數據。爲什麼我可以用glBufferSubData進行更新?我一直認爲靜態vbo不能改變。OpenGL更新靜態VBO

回答

5

GL_STATIC_DRAW並不意味着數據無法更改。 glBufferDatausage參數是底層實現的提示,可能會提高性能,但不會限制實際使用情況。 documentation指出:

用法是GL實現如何訪問緩衝區對象的數據存儲的暗示。這使得GL實現可以做出更明智的決定,這可能會顯着影響緩衝區對象的性能。但是,它並不限制數據存儲的實際使用。

4

這些只是用法提示。該規範明確指出:

usage被指定爲九個枚舉值之一。 [這9個枚舉值的描述​​如下]

usage 僅作爲性能暗示提供。指定的使用情況值不會限制數據存儲的實際使用模式。

OpenGL 4.6 core profile specification,第6.2節 「創建和修改緩衝區對象數據存儲」,68-69頁)