3
在Android設備上獲取驗證我着色器的奇怪錯誤。 (這是一個運行Android 3.1的華碩eee Pad)Android:紋理的gl狀態與着色器不匹配
Texture's gl states do not match with shader's
任何人都知道如何解決這個錯誤?
這裏是代碼生成錯誤:
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;
}
我也得到了這個與Android演示代碼,所以我認爲這是我可以忽略的東西。果然,在註釋掉代碼(以及其他一些強烈的調試)之後,它很有效。 – leech
這是什麼紋理格式? Tegra可能需要着色器中的#pragma來通知編譯器該紋理不是標準的8位格式。混合也是一樣。 NVIDIA在那裏的標準並不嚴格。 –
我把大部分內容留給圖書館,所以我希望這個答案是你要找的:RGBA,我認爲每個頻道都是8bit。我會檢查一下,看看我的假設是否正確。 – leech