我正在尝试为NDK掌握OGLES2并坚持使用GLSL着色器.情况类似于此处已经强调的情况,但似乎背后的原因有些不同.
我有最简单的着色器.
#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); // ***
}
Run Code Online (Sandbox Code Playgroud)
#version 110
void main(void)
{
gl_FragColor = gl_Color;
}
Run Code Online (Sandbox Code Playgroud)
简单直接.我甚至在剪辑空间中直接定义了三角形.当我在Android 403设备上运行应用程序时***,VS源中的starred ()行会glUseProgram调用以抛出GL_INVALID_OPERATION错误(以及所有后续glGetAttribLocation调用都会执行相同操作).我可以写入gl_FragColorFS(一些硬编码vec4值),但甚至无法触及VS中的gl_FrontColor/ gl_BackColor值.
E/Adreno200-ES20(16211): <qgl2DrvAPI_glUseProgram:1344>: GL_INVALID_OPERATION
E/Adreno200-ES20(16211): <qgl2DrvAPI_glGetAttribLocation:531>: GL_INVALID_OPERATION
Run Code Online (Sandbox Code Playgroud)
我在着色器编译和链接期间检查每个可能的错误(glGetError和glGetShaderInfoLog),一切都很清楚.
当我将OGL实现切换到JOGL实现时,应用程序在Windows上正常工作(所有引导和呈现代码保持不变).我甚至可以使用包含颜色的顶点属性,完全没有问题.
有没有办法解决这个问题?我不相信Android OGLES实现那么恶心,可能我只是错过了它的一些功能 ......