在Android Studio中编译OpenGL着色器的错误消息在哪里?

时间:2015-08-01 13:59:39

标签: android android-studio opengl-es glsl

我正在使用GLSL使用Android Studio在我的着色器和Android应用程序中编写。

现在着色器包含错误。但是我在哪里可以找到Android studio中的错误消息?

我正在使用Android开发者指南中的示例:

    // create empty OpenGL ES Program
    mProgram = GLES20.glCreateProgram();

    // add the vertex shader to program
    GLES20.glAttachShader(mProgram, vertexShader);

    // add the fragment shader to program
    GLES20.glAttachShader(mProgram, fragmentShader);

    // creates OpenGL ES program executables
    GLES20.glLinkProgram(mProgram);

1 个答案:

答案 0 :(得分:3)

使用GLES20.getShaderInfoLog。示例代码(下面有错误处理。)编译错误消息将吐出到DDMS日志。

根据我的经验,您可能无法获得非常有用的错误,因为编译错误消息取决于驱动程序的实现。

/* Compiles and links the given shader source code */
public static int createProgram(String vertexSource, String fragmentSource) {
    int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexSource);
    int pixelShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentSource);

    int program = GLES20.glCreateProgram();
    if (program != 0) {
        GLES20.glAttachShader(program, vertexShader);
        GLES20.glAttachShader(program, pixelShader);
        GLES20.glLinkProgram(program);
        int[] linkStatus = new int[1];
        GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, linkStatus, 0);
        if (linkStatus[0] != GLES20.GL_TRUE) {
            GLES20.glDeleteProgram(program);
            throw new RuntimeException("Could not link program: "
                    + GLES20.glGetProgramInfoLog(program));
        }
    }
    return program;
}

/* Handles compilation of shader source code */
private 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) {
            GLES20.glDeleteShader(shader);
            throw new RuntimeException("Could not compile program: "
                    + GLES20.glGetShaderInfoLog(shader) + " | " + source);
        }
    }
    return shader;
}