2011-09-17 68 views
6

我已經通過了規範和OpenGL論壇脫脂但不能真正理解這一點:* BaseVertex和gl_VertexID

*BaseVertex版本應該添加到GLSL變量gl_VertexID繪圖命令的?因爲它的工作原理,gl_VertexID包含在basevertex被添加到ELEMENT_ARRAY_BUFFER之前從綁定中獲取的索引。

所以,我的問題是:這是正確的行爲?我會假設gl_VertexID應該包含用於獲取頂點的索引。

回答

4

是的,這是正確的bahviour。 BaseVertex的使用場景是,您只需切換此一個值,而不必使用gl*Pointer函數將緩衝區偏移調整爲頂點數組。

想法是,您可以將多個網格(模型文件)中的數據加載到一個VBO中,而無需調整索引。

+0

是的,是有道理的。我猜想類似於「'gl_Element'」 - 包含最終的計算索引 - 對於未來版本的OpenGL/GLSL中的'gl_VertexID'是一個很好的補充。謝謝。 – palle8x

+0

@ palle8x我不這麼認爲,因爲元素數組中的索引在概念上更重要。如果你真的需要的話,你可以爲baseVertex添加一個統一數字,並將其添加到'gl_VertexID'中。 –

+0

我同意,並且您描述的是我目前在我的代碼中執行的操作。但我仍然認爲有一個像「'gl_Element」這樣的有效用例,並且(我相信)在驅動程序中實現並不難。 – palle8x

0

你的假設是對的。 gl_VertexID應該包含BaseVertex偏移量。

opengl wiki about GLSL built-in vars:

注:gl_VertexID將有基地頂點適用於它。

about glDrawElementsBaseVertex:

的gl_VertexID傳遞到頂點着色器將是由basevertex偏移,而不是從緩衝器中取出索引之後的索引。

不幸的是,一些舊的驅動程序沒有正確實施它。