编辑:
似乎错误是,我不允许在单独的线程中编译着色器?由于我刚才一直将对象加载推送到线程环境中,因此出现了错误消息。只是没想到这可能是它的原因。
我当前的顶点着色器由于某种原因无法编译。我收到的错误消息不存在,我找不到错误。
uniform mat4 u_MVPMatrix;
uniform mat4 u_MVMatrix;
uniform vec3 u_CameraPos;
attribute vec4 a_Position;
attribute vec4 a_Color;
attribute vec3 a_Normal;
varying vec3 v_Position;
varying vec4 v_Color;
varying vec3 v_Normal;
varying vec3 v_CameraPosition;
varying vec4 v_Ambient;
void main()
{
v_Position = vec3(u_MVMatrix * a_Position);
v_Color = a_Color;
v_Normal = vec3(u_MVMatrix * vec4(a_Normal, 0.0));
//v_CameraPosition = vec3(u_MVMatrix * vec4(u_CameraPos, 0.0)); // taken out to debug
v_CameraPosition = u_CameraPos;
gl_Position = u_MVPMatrix * a_Position;
}
这个的片段着色器是:
precision mediump float;
uniform vec3 u_LightPos;
uniform vec4 u_Light;
uniform vec4 u_Ambient;
uniform vec3 u_LightDirection;
uniform vec3 u_CameraPos;
varying vec4 v_Ambient;
varying vec3 v_Position;
varying vec4 v_Color;
varying vec3 v_Normal;
varying vec3 v_CameraPosition;
// The entry point for our fragment shader.
void main()
{
float distance = length(u_LightPos - v_Position);
vec3 lightVector = normalize(u_LightPos - v_Position);
float diffuse = max(dot(v_Normal, lightVector), 0.1);
diffuse = diffuse * (1.0 / (1.0 + (0.25 * distance * distance)));
// specular lighting removed due to debugging
gl_FragColor = v_Color * (u_Ambient + (diffuse * u_Light));
}
“尝试”获取错误消息:
Log.d(TAG, "Compilation -> " + GLES20.glGetShaderInfoLog(iShader));
从方法返回一个空字符串,以及
Log.e(TAG, "Vertex Shader Failed -> " + GLES20.glGetError());
只是返回 0。
我正在为 Android 的 OpenGL ES 2.0 开发,如果有任何我不知道的 Android 限制?
感谢您的任何帮助!