Запись в gl_FragColor вызывает INVALID_OPERATION на Android
Я пытаюсь освоить OGLES2 для NDK и застрял с шейдерами GLSL. Ситуация похожа натот, который уже выделен здесьНо, похоже, причина этого несколько иная.
У меня есть самые простые из возможных шейдеров.
Vertex:#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); // ***
}
Фрагмент:#version 110
void main(void)
{
gl_FragColor = gl_Color;
}
Легко и просто. Я даже определяю свои треугольники прямо в пространстве клипа. Помеченный***
) строка в источнике VS делаетglUseProgram
призыв броситьGL_INVALID_OPERATION
ошибка (и все последующиеglGetAttribLocation
звонки делают то же самое), когда я запускаю приложение на моем устройстве Android 403. Я могу написатьgl_FragColor
в ПС (некоторые жестко закодированыvec4
значение), но не могу даже коснутьсяgl_FrontColor
/gl_BackColor
значения в VS.
E/Adreno200-ES20(16211): <qgl2DrvAPI_glUseProgram:1344>: GL_INVALID_OPERATION
E/Adreno200-ES20(16211): <qgl2DrvAPI_glGetAttribLocation:531>: GL_INVALID_OPERATION
Я проверяю каждую возможную ошибку (glGetError
а такжеglGetShaderInfoLog
) во время компиляции и компоновки шейдеров там все ясно.
Приложение отлично работает на Windows, когда я переключаю свою реализацию OGL на JOGL (весь код начальной загрузки и рендеринга остается прежним). Я могу использовать даже атрибуты вершин, содержащие цвет, никаких проблем.
Есть ли способ исправить это поведение? Я не верю, что реализация Android OGLESэто больной, наверное, я просто скучаю по некоторым своимфункции...