我正在使用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);
答案 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;
}