OpenGL ES 2.0: attribut non lié au vertex shader
-
29-09-2019 - |
Question
Je développe une application Android.
Je le vertex shader suivant.
"attribute vec4 vertexPosition;
attribute vec4 vertexNormal;
attribute vec2 vertexTexCoord;
varying vec2 texCoord;
varying vec4 normal;
uniform mat4 modelViewProjectionMatrix;
void main()
{
gl_Position = modelViewProjectionMatrix * vertexPosition;
normal = vertexNormal;
texCoord = vertexTexCoord;
}
";
Et voici le shader fragment:
precision mediump float;
varying vec2 texCoord;
varying vec4 normal;
uniform sampler2D texSampler2D;
void main()
{
gl_FragColor = texture2D(texSampler2D, texCoord);
}
";
Y at-il problème si je suis parti vertexTexCoord non liée? Je pense que je dois utiliser un sommet différent et shaders fragment si mon modèle ne possède pas de texture, est pas?
Merci.
La solution
Oui, vous devriez avoir un autre shaders pour les modèles sans texture. Sinon, je pense que vous éprouverez le comportement dépend de la mise en œuvre.
liée à celle, la documentation OpenGL dit:
attributs actifs qui ne sont pas explicitement lié sera lié par la éditeur de liens lorsque glLinkProgram est appelé. Les emplacements attribués peuvent être interrogés en appelant glGetAttribLocation.
Donc, si les attributs de vertex sont activés, il va essayer d'obtenir vertexTexCoord d'un des attributs. Je ne sais pas ce qui se passera si pas plus que le nombre d'attributs nécessaires pour le modèle untextured sont activés et vous ne devriez pas compter sur chose comme ça. Utilisez un autre shader.