Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android:android 2.2上opengl es2.0的着色语言出错_Android_Opengl Es_Shader - Fatal编程技术网

android:android 2.2上opengl es2.0的着色语言出错

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

我的申请有问题。是一个简单的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.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;

}