
似乎错误是,我不允许在一个单独的线程中编译着色器?由于我刚刚将对象加载推送到线程环境,因此出现了错误消息.只是没想到它可能是它的原因.
由于某种原因,我当前的顶点着色器无法编译.我得到的错误信息不存在,我找不到错误.
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中的第三个参数).请注意,共享上下文资源可能无法在某些(较旧的)设备上运行. @H_419_50@ 总结以上是内存溢出为你收集整理的android – Vertex Shader无法编译.找不到错误全部内容,希望文章能够帮你解决android – Vertex Shader无法编译.找不到错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)