Android:纹理的gl状态与着色器不匹配

时间:2011-07-23 16:45:36

标签: android opengl-es-2.0

在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;
}

1 个答案:

答案 0 :(得分:0)

我的Tegra3设备会使glValidateProgram()失败。 就像上面评论中提到的“猪”一样,没有绑定的纹理会导致这种情况。

所以我通过在使用 glActiveTexture ()和 glBindTexture ()设置纹理后仅调用glValidateProgram()来修复我的验证错误。

我使用Mali GPU的设备从来没有遇到过这方面的问题,所以它可能只是Tegra的东西。