编辑:
似乎错误是,不允许我在单独的线程中编译着色器?由于我刚才一直在将对象加载推入线程环境中,因此出现了错误消息。只是不认为这可能是它的原因。
我当前的顶点着色器由于某种原因无法编译。我收到的错误消息不存在,并且找不到错误。
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的任何限制?
感谢您的任何帮助!
OpenGL上下文仅按线程运行,因此您是正确的。如果要创建后台加载线程,则不仅需要在该线程中创建一个新的上下文,还需要确保它正在共享资源(eglCreateContext中的第三个参数)。请注意,共享上下文资源可能在某些(旧)设备上不起作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句