android:android 2.2上opengl es2.0的着色语言出错
我的申请有问题。是一个简单的atm应用程序,使用opengl es2.0,运行在安卓2.2设备HTC sense上。我可以在我的4.0.3模拟器上运行应用程序,也可以在运行安卓4.0的设备上运行应用程序 在android 2.2上运行时,我出现以下错误:android:android 2.2上opengl es2.0的着色语言出错,android,opengl-es,shader,Android,Opengl Es,Shader,我的申请有问题。是一个简单的atm应用程序,使用opengl es2.0,运行在安卓2.2设备HTC sense上。我可以在我的4.0.3模拟器上运行应用程序,也可以在运行安卓4.0的设备上运行应用程序 在android 2.2上运行时,我出现以下错误: > FATAL EXCEPTION: GLThread 9 java.lang.RuntimeException: Error compiling shader: SimpleShader.loadShader(SimpleShader
> FATAL EXCEPTION: GLThread 9
java.lang.RuntimeException: Error compiling shader:
SimpleShader.loadShader(SimpleShader.java:87)
SimpleShader.<init>(SimpleShader.java:54)
etc
该应用程序在我最新的安卓4.0+设备上运行良好您是否考虑在安卓2.2设备和安卓4.0+设备上检查OpenGL ES GLSL版本?
您可以使用
GLES20.glGetString(GLES20.GL\u SHADING\u LANGUAGE\u版本)
很抱歉,我在eclipse上使用了这个,但无法识别GL\u SHADING\u LANGUAGE\u版本枚举类型很抱歉我找到了它。。。我需要调用GLES20.GL_SHADING_LANGUAGE_version我不确定这是否会有多大帮助,但我只是想看看你可能正在android 2.3设备上的旧GLSL版本上编译着色器。你能指出你在顶点/片段着色器的哪一行出现错误吗?那一行:抛出新的RuntimeException(编译着色器时出错:“+Error”)。在上面的代码中。如何将上面的着色器语言转换为以前的版本?我是新手。
String verticesShader =
"uniform mat4 uScreen;\n" +
"attribute vec2 aPosition;\n" +
"attribute vec3 aColor;\n" +
"attribute vec2 aTexPos; \n" +
"varying vec2 vTexPos; \n" +
"varying vec3 vColor;\n" +
"void main() {\n" +
" vTexPos = aTexPos; \n" +
" gl_Position = uScreen * vec4(aPosition.xy, 0.0, 1.0);\n" +
" vColor = aColor;\n" +
"}";
// Our fragment shader. Just return vColor.
// If you look at this source and just said 'WTF?', remember
// that all the attributes are defined in the VERTEX shader and
// all the 'varying' vars are considered OUTPUT of vertex shader
// and INPUT of the fragment shader. Here we just use the color
// we received and add a alpha value of 1.
String fragmentShader =
"uniform float uUseTexture; \n" +
"uniform float uAlpha; \n" +
"uniform sampler2D uTexture;\n" +
"precision mediump float;\n"+
"varying vec2 vTexPos; \n" +
"varying vec3 vColor;\n" +
"void main(void)\n" +
"{\n" +
" if ( uUseTexture != 1.0 ) \n" +
" gl_FragColor = vec4(vColor.xyz, 1); \n" +
" else \n" +
" gl_FragColor = texture2D(uTexture, vTexPos); \n" +
" gl_FragColor.a *= uAlpha;" +
//" gl_FragColor = vec4(vColor.xyz, 1);\n" +
"}";
private int loadShader(int shader, String shaderSrc) {
// TODO Auto-generated method stub
int handle = GLES20.glCreateShader(shader);
if (handle == GLES20.GL_FALSE)
throw new RuntimeException("Error creating shader!");
GLES20.glShaderSource(handle, shaderSrc);
GLES20.glCompileShader(handle);
int[] compileStatus = new int[1];
GLES20.glGetShaderiv(handle, GLES20.GL_COMPILE_STATUS, compileStatus, 0);
if (compileStatus[0] ==0)
{
String error = GLES20.glGetShaderInfoLog(handle);
GLES20.glDeleteShader(handle);
throw new RuntimeException("Error compiling shader: " + error);
}
else
return handle;
}