2017-03-01 52 views
0

我使用「屬性」在頂點着色器來定義幾個變量,像這樣:OpenGL ES 2.0:屬性與佈局?

attribute mediump vec4 Position; 
attribute lowp vec4 SourceColor; 

我認爲這是基於幾個教程做的正確方法。然而,環顧四周我發現了一些所謂的「佈局」,這人似乎在尋找類似的方式來使用,比如我覺得上面可以改寫爲:

layout(location = 0) in vec4 Position; 
layout(location = 1) in vec4 SourceColor; 

我從來沒有用過的佈局之前,所以我我不確定它是否以同樣的方式運作,但它看起來與我很相似,維基頁面並沒有特別幫助我將它們分開。有人可以向我解釋這些差異嗎?對不起,這樣一個愚蠢的問題,但我真的無法區分。

回答

2

你看到的是不同版本的GLSL。

在OpenGLES2中,您可以使用的GLSL的唯一可用版本是GLSL ES 100.這看起來像您發佈的第一個代碼塊。

在OpenGLES3中,您仍然可以使用GLSLES 100,但也可以使用GLSL ES 300,它看起來像後一篇文章。

除了GLSL ES版本,還有許多桌面GLSL版本。這doc可能會幫助你讓你的方位有點。

TLDR - 您的第一個代碼片段是舊的方式,第二個代碼片段是新的方式。在OpenGLES 2中,您唯一的選擇就是舊的方式。