Escribir en gl_FragColor causa INVALID_OPERATION en Android
Estoy tratando de dominar OGLES2 para NDK y pegado con sombreadores GLSL. La situación es similar ael ya resaltado aquí, pero parece que la razón detrás de esto es algo diferente.
Tengo los shaders más simples posibles.
Vértice:#version 110
attribute vec3 vPosition;
void main(void)
{
gl_Position = vec4(vPosition, 1.0);
gl_FrontColor = gl_BackColor = vec4(0.3, 0.3, 0.3, 1); // ***
}
Fragmento:#version 110
void main(void)
{
gl_FragColor = gl_Color;
}
Fácil y directo. Incluso defino mis triángulos rectos en el espacio del clip. La estrella (***
) la línea en la fuente VS hace queglUseProgram
llama a tirar elGL_INVALID_OPERATION
error (y todos los posterioresglGetAttribLocation
las llamadas hacen lo mismo) cuando ejecuto la aplicación en mi dispositivo Android 403. Puedo escribir agl_FragColor
en FS (algunos codificadosvec4
valor), pero ni siquiera puede tocar elgl_FrontColor
/gl_BackColor
valores en VS.
E/Adreno200-ES20(16211): <qgl2DrvAPI_glUseProgram:1344>: GL_INVALID_OPERATION
E/Adreno200-ES20(16211): <qgl2DrvAPI_glGetAttribLocation:531>: GL_INVALID_OPERATION
Verifico todos los errores posibles (glGetError
yglGetShaderInfoLog
) Durante la compilación y vinculación del sombreado, todo está claro allí.
La aplicación funciona bien en Windows cuando cambio mi implementación OGL a una JOGL (todo el código de arranque y representación sigue siendo el mismo). Puedo usar incluso los atributos de un vértice que contienen un color, sin ningún problema.
¿Hay alguna manera de arreglar este comportamiento? No creo que la implementación de Android OGLES seaese enfermo, probablemente me estoy perdiendo algo de sucaracteristicas...