在Android设备上验证我的着色器时出现奇怪的错误。 (这是运行Android 3.1的华硕eee Pad)
纹理的gl状态与着色器的
不匹配
有人知道如何修复此错误吗?
以下是生成错误的代码:
GLES20.glValidateProgram(id);
GLES20.glGetProgramiv(id, GLES20.GL_VALIDATE_STATUS, ShaderStatus, 0);
if (ShaderStatus[0] != GLES20.GL_TRUE) {
String glerror = GLES20.glGetProgramInfoLog(id);
throw new Error("ERROR TIME! failed to validate GLSL program");
}
这是顶点着色器:
#ifdef GL_ES
precision highp float;
#endif
attribute vec3 Position;
attribute vec2 TexCoord;
uniform mat4 Projection;
uniform vec3 Location;
uniform float Angle;
uniform vec3 Scale;
uniform sampler2D Texture;
varying vec2 vTexCoord;
void main(void) {
mat3 RotationMatrix = mat3( cos( -Angle ), -sin( -Angle ), 0.0,
sin( -Angle ), cos( -Angle ), 0.0,
0.0, 0.0, 1.0);
gl_Position = Projection * vec4(RotationMatrix * (Position*Scale) + Location, 1.0);
//vColor = vec4(1.0, 1.0, 1.0, 1.0);
vTexCoord = TexCoord;
}
这是片段着色器:
#ifdef GL_ES
precision highp float;
#endif
uniform sampler2D Texture;
varying vec2 vTexCoord;
uniform vec4 Color;
void main(void) {
vec4 color = texture2D(Texture, vTexCoord) * Color;
gl_FragColor = color;
}
答案 0 :(得分:0)
我的Tegra3设备会使glValidateProgram()失败。 就像上面评论中提到的“猪”一样,没有绑定的纹理会导致这种情况。
所以我通过在使用 glActiveTexture ()和 glBindTexture ()设置纹理后仅调用glValidateProgram()来修复我的验证错误。
我使用Mali GPU的设备从来没有遇到过这方面的问题,所以它可能只是Tegra的东西。