在新版本的OpenGL(3.0和4.0)中,內置頂點屬性(如gl_Vertex)將被棄用。實際渲染任何東西的「新方法」是爲位置,顏色等指定自己的頂點屬性,然後將這些自定義屬性綁定到緩衝區。應該如何編寫現代OpenGL着色器以便相互兼容?
我的問題是:如何在不緊密耦合渲染代碼和着色器的情況下做到這一點?如果我編寫一個使用「位置」作爲頂點位置的着色器,則使用着色器的主機代碼必須知道並將頂點數據作爲「位置」傳遞。如果我想使用不同的着色器來寫入「vertex_pos」中的頂點數據,我必須首先重寫該着色器,或者修改我的主機代碼來將頂點數據發送爲「vertex_pos」。
是否有一套適用於所有着色器應該使用的標準頂點和片段屬性的最佳實踐名稱?或者是否存在Balkanized特定於引擎的標準,例如爲一個引擎編寫的着色器無法修改而無法在另一個引擎上工作?或者根本沒有標準,因此,一般來說,每個對象都需要自己的自定義渲染代碼來匹配自定義着色器。
其實並非如此。 GLSL保留**以「gl_」開頭的任何**名稱。如果核心編譯器允許使用「gl_Vertex」,那麼它不符合規範。 1.50規範將重新聲明語法闡明爲僅對聲明類型的屬性進行更改有效。所以它不應該讓你重新聲明它們。 – 2011-06-11 21:54:16
@Nicol:現在這裏開始語言lawery:有些人可能會看到不贊成的變量名稱作爲預定義的標識符從兼容性配置文件,並在1.50 GLSL程序中使用它們是一個屬性更改重新聲明;恕我直言規範不清楚這一點,雖然§#版本#3.3似乎表明核心的意思是「沒有兼容性名稱可用」。如果想要安全,他可以使用預處理程序`#define gl_Vertex glVertex`並在核心配置文件中使用該名稱。 – datenwolf 2011-06-11 22:18:08