相关疑难解决方法(0)

写入gl_FragColor会导致Android上出现INVALID_OPERATION

我正在尝试为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)

我在着色器编译和链接期间检查每个可能的错误(glGetErrorglGetShaderInfoLog),一切都很清楚.

当我将OGL实现切换到JOGL实现时,应用程序在Windows上正常工作(所有引导和呈现代码保持不变).我甚至可以使用包含颜色的顶点属性,完全没有问题.

有没有办法解决这个问题?我不相信Android OGLES实现那么恶心,可能我只是错过了它的一些功能 ......

opengl-es glsl android-ndk opengl-es-2.0 glsles

2
推荐指数
1
解决办法
4247
查看次数

标签 统计

android-ndk ×1

glsl ×1

glsles ×1

opengl-es ×1

opengl-es-2.0 ×1