2017-03-01 1 views
0

Ich verwende ‚attribute‘ in einem Vertex-Shader ein paar Variablen wie so zu definieren:OpenGL ES 2.0: Attribut vs Layout?

attribute mediump vec4 Position; 
attribute lowp vec4 SourceColor; 

Ich dachte, das ist der richtige Weg war, es zu tun, basierend auf ein paar Tutorials. Allerdings sah sich um, bemerkte ich etwas namens ‚Layout‘, die Menschen in einer ähnlich aussehenden Art und Weise zu nutzen scheinen, zum Beispiel denke ich, die oben umgeschrieben werden könnte, wie:

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

Ich habe noch nie verwendet, das Layout vor, damit ich Ich bin mir nicht sicher, ob es genauso funktioniert, aber es sieht mir ziemlich ähnlich, und die Wiki-Seiten helfen mir nicht, sie auseinander zu halten. Könnte mir jemand bitte den Unterschied erklären? Sorry für solch eine blöde Frage, aber ich kann ehrlich gesagt den Unterschied nicht feststellen.

Antwort

2

Was Sie sehen, ist verschiedene Versionen von GLSL.

In OpenGLES2 ist die einzige verfügbare Version von GLSL, die Ihnen zur Verfügung steht, GLSL ES 100. Dies sieht aus wie der erste von Ihnen gepostete Codeblock.

In OpenGLES3 können Sie immer noch GLSLES 100 verwenden, aber Sie können auch GLSL ES 300 verwenden, das wie der letzte Beitrag aussieht.

Neben den GLSL ES-Versionen gibt es viele Desktop-GLSL-Versionen. Diese doc könnte Ihnen helfen, sich ein wenig zu orientieren.

TLDR - Ihr erstes Code-Snippet ist die alte Art, das zweite Code-Snippet ist der neue Weg. Mit OpenGLES 2 haben Sie nur die alte Wahl.