Я в настоящее время программирую приложение для Android.Устранение «Программный объект является неполным». opengl error
Вот мой код:
program = GLES20.glCreateProgram();
System.out.println("Program: " + program);
GLES20.glAttachShader(program, vertexShader);
CustomRenderer.checkGlError("AttachingVertex");
GLES20.glAttachShader(program, fragmentShader);
CustomRenderer.checkGlError("AttachingFragment");
GLES20.glLinkProgram(program);
CustomRenderer.checkGlError("LinkProgram");
System.out.println("Is Program: " + GLES20.glIsProgram(program));
GLES20.glValidateProgram(program);
System.out.println("Error log: " + GLES20.glGetProgramInfoLog(program));
GLES20.glUseProgram(program);
CustomRenderer.checkGlError("UseProgram");
И это выход:
11-20 14:02:01.442: I/System.out(6370): Vertex: 1
11-20 14:02:01.442: I/System.out(6370): Is Shader: true
11-20 14:02:01.447: I/System.out(6370): Fragment: 2
11-20 14:02:01.447: I/System.out(6370): Is Shader: true
11-20 14:02:01.447: I/System.out(6370): Program: 3
11-20 14:02:01.447: I/System.out(6370): Is Program: true
11-20 14:02:01.447: I/System.out(6370): Error log: The program object is incomplete.
11-20 14:02:01.447: I/System.out(6370): UseProgram: glError 1282
Вы также можете увидеть дополнительные проверки, которые я сделал для шейдеров, и все они, кажется, компилировать.
Часть проблемы в том, что вы думаете, что функции 'glIs ___ (...)' ничего не говорят о действительности объекта OpenGL. Это не так, это просто говорит вам, связано ли имя ('GLuint' handle) с этим типом объекта. Эта ассоциация возникает при первом связывании имени с чем-то (например, 'glGenTextures (...)' будет возвращать имя, но это имя на самом деле не является текстурой, пока вы не сделаете вызов типа 'glBindTexture (GL_TEXTURE_2D, name)') , Тем не менее, 'glIsTexture (...)' будет возвращать 'GL_TRUE', даже если вы никогда ничего не делали с этой текстурой, а не просто привязывали ее один раз. –