我已經通過了規範和OpenGL論壇脫脂但不能真正理解這一點:* BaseVertex和gl_VertexID
是*BaseVertex
版本應該添加到GLSL變量gl_VertexID
繪圖命令的?因爲它的工作原理,gl_VertexID
包含在basevertex
被添加到ELEMENT_ARRAY_BUFFER
之前從綁定中獲取的索引。
所以,我的問題是:這是正確的行爲?我會假設gl_VertexID
應該包含用於獲取頂點的索引。
我已經通過了規範和OpenGL論壇脫脂但不能真正理解這一點:* BaseVertex和gl_VertexID
是*BaseVertex
版本應該添加到GLSL變量gl_VertexID
繪圖命令的?因爲它的工作原理,gl_VertexID
包含在basevertex
被添加到ELEMENT_ARRAY_BUFFER
之前從綁定中獲取的索引。
所以,我的問題是:這是正確的行爲?我會假設gl_VertexID
應該包含用於獲取頂點的索引。
是的,這是正確的bahviour。 BaseVertex的使用場景是,您只需切換此一個值,而不必使用gl*Pointer
函數將緩衝區偏移調整爲頂點數組。
想法是,您可以將多個網格(模型文件)中的數據加載到一個VBO中,而無需調整索引。
你的假設是對的。 gl_VertexID應該包含BaseVertex偏移量。
opengl wiki about GLSL built-in vars:
注:gl_VertexID將有基地頂點適用於它。
about glDrawElementsBaseVertex:
的gl_VertexID傳遞到頂點着色器將是由basevertex偏移,而不是從緩衝器中取出索引之後的索引。
不幸的是,一些舊的驅動程序沒有正確實施它。
是的,是有道理的。我猜想類似於「'gl_Element'」 - 包含最終的計算索引 - 對於未來版本的OpenGL/GLSL中的'gl_VertexID'是一個很好的補充。謝謝。 – palle8x
@ palle8x我不這麼認爲,因爲元素數組中的索引在概念上更重要。如果你真的需要的話,你可以爲baseVertex添加一個統一數字,並將其添加到'gl_VertexID'中。 –
我同意,並且您描述的是我目前在我的代碼中執行的操作。但我仍然認爲有一個像「'gl_Element」這樣的有效用例,並且(我相信)在驅動程序中實現並不難。 – palle8x