2010-12-31 3 views
0

Я пытаюсь нарисовать текстуру в заставку из фреймбуфера, и ее рендерингбуфер всегда заканчивается полностью пустым (черным). Странно, я знаю, что контекст настроен, и я проверяю ошибки с помощью glCheckFramebufferStatusOES (GL_FRAMEBUFFER_OES) и glGetError(), но ни одна из функций говорит, что что-то не так. Есть ли другие функции проверки ошибок, которые я могу назвать, которые могут пролить свет на то, что происходит?Устранение неполадок текстур OpenGL ES 1.1 на iPhone

ответ

1

Трудно дать вам точный ответ без дополнительной информации. Возможно, вы могли бы опубликовать некоторый код о вашей настройке и использовании буфера визуализации?

В то же время, здесь есть некоторая информация о том, как правильно настроить закадрового видеобуфер:

// Remember the FBO being used for the display framebuffer 
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, (GLint *)&SystemFBO); 

// Create the texture and the FBO for offscreen frame buffer 
glGenTextures(1, &ResultTexture); 
glBindTexture(GL_TEXTURE_2D, ResultTexture); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 
glGenFramebuffersOES(1, &ResultFBO); 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, ResultFBO); 
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, ResultTexture, 0); 

glBindFramebufferOES(GL_FRAMEBUFFER_OES, ResultFBO); 

// do your rendering to offscreen framebuffer 
... 

// restore original frame buffer object 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, SystemFBO); 

// use ResultTexture as usual 
glBindTexture(GL_TEXTURE_2D, ResultTexture); 

Надежда это помогает ...

+0

Спасибо. В то время я думал, что проблема заключается в некоторой внутренней ошибке OpenGL, о которой не сообщалось ни glGetError(), ни glCheckFramebufferStatusOES (GL_FRAMEBUFFER_OES), но это было просто неправильное использование OpenGL. Я назвал glColor4f (0, 0, 0, 0) в предыдущей точке программы, поэтому, когда я рисовал текстуры, он рисовал с альфа = 0. Я думаю, это пример того, где чтение руководства сначала сэкономило бы время ... – emchristiansen

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