OpenGL ES 2.0: attributo non rilegato sul vertex shader
-
29-09-2019 - |
Domanda
Sto sviluppando un'applicazione Android.
Ho il seguente vertex shader.
"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;
}
";
E questo è lo shader frammento:
precision mediump float;
varying vec2 texCoord;
varying vec4 normal;
uniform sampler2D texSampler2D;
void main()
{
gl_FragColor = texture2D(texSampler2D, texCoord);
}
";
C'è qualche problema se ho lasciato vertexTexCoord non legato? Penso che devo usare un vertice diverso e shader frammento se il mio modello non ha una consistenza, non lo è?
Grazie.
Soluzione
Sì, si dovrebbe avere un altro dello shader per i modelli senza consistenza. In caso contrario, penso che si verificherà l'attuazione comportamento dipendente.
In relazione al che, la documentazione OpenGL dice:
attributi di Active che non sono esplicitamente legato sarà vincolato dal linker quando glLinkProgram viene chiamato. Le posizioni assegnate possono essere interrogati chiamando glGetAttribLocation.
Quindi, se gli attributi di vertice sono abilitati si cercherà di ottenere vertexTexCoord da uno degli attributi. Non sono sicuro di cosa accadrà se non più di numero di attributi necessari per il modello untextured sono abilitati e non si dovrebbe fare affidamento su cosa del genere. Utilizzare un altro shader.