2013-11-20 4 views
0

Я в настоящее время программирую приложение для 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 

Вы также можете увидеть дополнительные проверки, которые я сделал для шейдеров, и все они, кажется, компилировать.

ответ

0

Ответ на это сообщение об ошибке заключается в том, что шейдеры сделали не скомпилируйте! Несмотря на «быть» шейдерами и иметь идентификатор, они не компилировались.

Проверьте, скомпилированы ли шейдеры с помощью метода GLES20.glGetShaderInfoLog. Это скажет вам, что не так, и вам придется это исправить.

+1

Часть проблемы в том, что вы думаете, что функции 'glIs ___ (...)' ничего не говорят о действительности объекта OpenGL. Это не так, это просто говорит вам, связано ли имя ('GLuint' handle) с этим типом объекта. Эта ассоциация возникает при первом связывании имени с чем-то (например, 'glGenTextures (...)' будет возвращать имя, но это имя на самом деле не является текстурой, пока вы не сделаете вызов типа 'glBindTexture (GL_TEXTURE_2D, name)') , Тем не менее, 'glIsTexture (...)' будет возвращать 'GL_TRUE', даже если вы никогда ничего не делали с этой текстурой, а не просто привязывали ее один раз. –

Смежные вопросы