Tengo tres atributos GLSL en mi sombreado de vérticesOpenGL atributo de sombreado no puede obligar
attribute highp vec4 Position;
attribute mediump vec4 UV;
attribute mediump vec3 Normal;
que im unión usando
glBindAttribLocation(program, 0, "Position");
glBindAttribLocation(program, 1, "Normal");
glBindAttribLocation(program, 2, "UV");
Sin embargo, estoy recibiendo un error
No se pudo encontrar el atributo del sombreador de vértices 'Normal' para que coincida con la solicitud BindAttributeLocation.
¿Por qué no puede encontrar los atributos Posición y UV pero no el atributo Normal?
Cualquier ayuda sería muy apreciada ya que estoy bastante confundido.
Saludos
Editar: que tienen el mismo problema en Android OpenGLES20. Voy a añadir código de ejemplo: el resto de la clase es el tutorial oficial GLSurfaceView
public void onSurfaceCreated(GL10 glUnused, EGLConfig config) {
String mVertexShader = "uniform mat4 uMVPMatrix;\n " +
"attribute vec4 aPosition;\n " +
"attribute vec4 aNormal; \n " + //this is the line I added
"attribute vec2 aTextureCoord;\n " +
"varying vec2 vTextureCoord;\n " +
"void main() {\n " +
"gl_Position = uMVPMatrix * aPosition;\n" +
" vTextureCoord = aTextureCoord;\n" +
"}\n";
mProgram = createProgram(mVertexShader, mFragmentShader); // cf tutorial
if (mProgram == 0) {
return;
}
initShaderHandles(); //initializes the rest of the handles (cf tutorial)
// my little additional code
int maNormalHandle = GLES20.glGetAttribLocation(mProgram, "aNormal");
Log.d("ATTRIB LOCATION Normal: ", maNormalHandle + "");
checkGlError("glGetAttribLocation normal");
if (maNormalHandle == -1) {
throw new RuntimeException(
"Could not get attrib location for normal");
}
// ...and we crash.
}
Debo añadir que he probado el sombreador para asegurarme de que las modificaciones funcionen correctamente, pero todavía no puedo enlazar el atributo Normal – user346443
¿De dónde obtienes este error? – kvark
Debo señalar que tengo exactamente el mismo problema "a veces" en Android OpenGLES20. Tome el tutorial, agregue un "normal", "aNormal", "norma", "lo que sea" al código de sombreador de muestra, intente enlazarlo justo después y se bloquea. –