Zapis do gl_FragColor powoduje INVALID_OPERATION na Androidzie
Próbuję opanować OGLES2 dla NDK i utknąć z shaderami GLSL. Sytuacja jest podobna doten już zaznaczony tutaj, ale wydaje się, że powód tego jest nieco inny.
Mam najprostsze shadery możliwe.
Wierzchołek:#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); // ***
}
Fragment:#version 110
void main(void)
{
gl_FragColor = gl_Color;
}
Łatwy i prosty. Definiuję nawet moje trójkąty prosto w przestrzeni klipu. Gwiazdka (***
) linia w źródle VS sprawia, żeglUseProgram
zadzwoń, aby rzucićGL_INVALID_OPERATION
błąd (i wszystkie kolejneglGetAttribLocation
połączenia robią to samo) po uruchomieniu aplikacji na moim urządzeniu z Androidem 403. Mogę napisać dogl_FragColor
w FS (niektóre na stałevec4
wartość), ale nie może nawet dotknąćgl_FrontColor
/gl_BackColor
wartości w VS.
E/Adreno200-ES20(16211): <qgl2DrvAPI_glUseProgram:1344>: GL_INVALID_OPERATION
E/Adreno200-ES20(16211): <qgl2DrvAPI_glGetAttribLocation:531>: GL_INVALID_OPERATION
Sprawdzam każdy możliwy błąd (glGetError
iglGetShaderInfoLog
) podczas kompilacji i łączenia shadera wszystko jest jasne.
Aplikacja działa poprawnie w systemie Windows, gdy przełączam implementację OGL na JOGL (wszystkie kody ładowania początkowego i renderowania pozostają takie same). Mogę używać nawet atrybutów wierzchołków zawierających kolor, żadnych problemów.
Czy istnieje sposób na naprawienie tego zachowania? Nie wierzę, że implementacja Android OGLES jestże chory, prawdopodobnie po prostu brakuje mi jego częścifunkcje...