opengles 2.0没有编译片段着色器代码

时间:2016-09-02 14:02:31

标签: android opengl-es compilation shader opengl-es-2.0

我一直在开发应用程序,但我遇到了一些我无法解释的错误。 这些错误只出现在我的oneplus 3上,但没有使用google nexus 6p genymotion模拟器。

我已经搜索了几个小时但我找不到一个太棒了。

这是我的编译代码:

public static int loadShader(int shaderType, String source){
    int shader = GLES20.glCreateShader(shaderType);
    if (shader != 0) {
        GLES20.glShaderSource(shader, source);
        GLES20.glCompileShader(shader);
        int[] compiled = new int[1];
        GLES20.glGetShaderiv(shader,GLES20.GL_COMPILE_STATUS, compiled,0);   
        if (compiled[0] == 0) {
            Log.e(TAG, "Could not compile shader " + shaderType + ":");
            Log.e(TAG, GLES20.glGetShaderInfoLog(shader));
            GLES20.glDeleteShader(shader);
            shader = 0;
        }
    }
    return shader;
}

我的片段着色器:

precision mediump float;
uniform vec4 vColor;
void main() {
    gl_FragColor = vColor;
}

这是错误:

E/MyGLRenderer: Could not compile shader 35632:
E/MyGLRenderer: ERROR: 0:1: 'in' : Syntax error:  syntax error
                INTERNAL ERROR: no main() function!
                ERROR: 1 compilation errors.  No code generated.

1 个答案:

答案 0 :(得分:1)

我通过先在我的旧星系ace 2上尝试修复它,修复了该设备上的所有错误,这一切都再次起作用。 我改变的事情:

  • 添加#verion 100%n
  • 读取着色器文件后,我将1行字符串放入String.Format(字符串)中,因此%n将转换为换行符(编译器会抱怨版本号背后的未知字符)