Escrever para gl_FragColor faz com que INVALID_OPERATION no Android
Eu estou tentando dominar OGLES2 para NDK e preso com shaders GLSL. A situação é semelhante aaquele já destacado aqui, mas parece que a razão por trás disso é um pouco diferente.
Eu tenho os shaders mais simples possíveis.
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 e direto. Eu até defino meus triângulos diretamente no espaço do clipe. O estrelado (***
) linha na fonte VS faz com que oglUseProgram
ligue para jogar oGL_INVALID_OPERATION
erro (e todos os subsequentesglGetAttribLocation
chamadas fazem o mesmo) quando eu corro o aplicativo no meu dispositivo Android 403. Eu posso escrever paragl_FragColor
em FS (alguns codificadosvec4
valor), mas não pode nem tocargl_FrontColor
/gl_BackColor
valores em VS.
E/Adreno200-ES20(16211): <qgl2DrvAPI_glUseProgram:1344>: GL_INVALID_OPERATION
E/Adreno200-ES20(16211): <qgl2DrvAPI_glGetAttribLocation:531>: GL_INVALID_OPERATION
Eu checo todos os erros possíveis (glGetError
eglGetShaderInfoLog
) durante a compilação e ligação do shader, tudo está claro lá.
O aplicativo funciona bem no Windows quando eu alterno minha implementação de OGL para uma de JOGL (todo o código de bootstrapping e renderização permanece o mesmo). Eu posso usar até mesmo um vertex atributos contendo uma cor, sem problemas em tudo.
Existe uma maneira de corrigir esse comportamento? Eu não acredito que a implementação do Android OGLES sejanaquela doente, provavelmente eu só estou perdendo alguns dos seuscaracterísticas...