0
我尝试将基本着色器程序与顶点和片段着色器链接。 两个着色器都可以成功编译,但如果我尝试链接程序,则链接始终会失败。 什么是错的,为什么链接失败? 信息日志为空,但链接时出现GL_INVALID_OPERATION错误。 我从GLSurfaceView.Renderer接口的“onSurfaceCreated”方法中运行MAIN代码。Java Android OpenGL ES 2.0无法链接程序
MAIN:
String vertexShaderSource = "attribute vec4 a_Position; " +
"void main() " +
"{ " +
" gl_Position = a_Position; " +
"} ";
String fragmentShaderSource = "precision mediump float; " +
"void main() " +
"{ " +
" gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);" +
"} ";
int vertexShaderHandle = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
GLES20.glShaderSource(vertexShaderHandle, vertexShaderSource);
ShaderHelper.compileShader(vertexShaderHandle);
int fragmentShaderHandle = GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
GLES20.glShaderSource(fragmentShaderHandle, fragmentShaderSource);
ShaderHelper.compileShader(fragmentShaderHandle);
programHandle = GLES20.glCreateProgram();
GLES20.glAttachShader(programHandle, vertexShaderHandle);
GLES20.glAttachShader(programHandle, fragmentShaderHandle);
ProgramHelper.linkProgram(fragmentShaderHandle);
HELPER:
public static void compileShader(int shaderHandle)
{
GLES20.glCompileShader(shaderHandle);
int[] results = new int[1];
GLES20.glGetShaderiv(shaderHandle, GLES20.GL_COMPILE_STATUS, results, 0);
if(results[0] != GLES20.GL_TRUE)
{
String infoLog = GLES20.glGetShaderInfoLog(shaderHandle);
throw new RuntimeException("Failed to compile shader!" + '\n' + infoLog);
}
}
public static void linkProgram(int programHandle)
{
GLES20.glLinkProgram(programHandle);
int[] results = new int[1];
GLES20.glGetProgramiv(programHandle, GLES20.GL_LINK_STATUS, results, 0);
if(results[0] != GLES20.GL_TRUE)
{
String infoLog = GLES20.glGetProgramInfoLog(programHandle);
throw new RuntimeException("Failed to link program!" + '\n' + infoLog);
}
}
编辑:
WTF,链接程序很好,如果我不使用辅助方法联系起来。 为什么?
所有编写的代码看起来不错,但你可以发布确切的错误(你从信息日志得到什么(我假设你的程序崩溃的帮手?函数抛出你的runtimeException) – ThMBc 2014-09-27 12:27:32
信息记录是空的,但我得到GL_INVALID_OPERATION错误 – user3325226 2014-09-27 13:27:16
你正确设置了opengl的版本吗?要使用openGL ES 2.0,你必须在GLSurfaceView上调用'setEGLContextClientVersion(2);'。 – ThMBc 2014-09-27 13:35:47