2012-06-01 3 views
2

Я пытаюсь закадровый рендеринга с помощью этого поста http://www.idevgames.com/forums/thread-1785-post-54500.html#pid54500IOS отдавайте Текстура: Почему Ясно

Сначала я INIT FBO.

glGenTextures(1, &tex); 
glBindTexture(GL_TEXTURE_2D, tex); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 
glBindTexture(GL_TEXTURE_2D, 0); 
glGenFramebuffersOES(1, &fbo); 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, fbo); 
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, tex, 0); 

GLenum status = glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES); 
if (status != GL_FRAMEBUFFER_COMPLETE_OES) { 
    NSLog(@"failed to make complete framebuffer object %x", status); 
    exit(-1); 
} 

Затем я рисую на мою текстуру

GLint oldFBO, oldViewPort[4]; 
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &oldFBO); 
glGetIntegerv(GL_VIEWPORT, oldViewPort); 
glBindTexture(GL_TEXTURE_2D, 0); 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, listFrameBuffers[i]); 
glViewport(0, 0, 512, 512); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

// draw code here 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, oldFBO); 
glViewport(oldViewPort[0], oldViewPort[1], oldViewPort[2], oldViewPort[3]); 

А потом каждый кадр рисую его.

Когда я закончу мой кадр вызова glSwapBuffers текстура прилагается к фреймбуферу становится ясно (но когда я рисую в буфере кадра каждый раз после того, как glSwapBuffers все в порядке).

+0

Где glSwapBuffers входят в это? Это не в приведенном выше коде. –

+0

Извините, я имею в виду промывку рамки на экране – JINGE

ответ

0

Итак, квест завершен. я просто изменил рисовать код этого

GLint oldFBO, oldViewPort[4]; 
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &oldFBO); 
glGetIntegerv(GL_VIEWPORT, oldViewPort); 
glBindTexture(GL_TEXTURE_2D, 0); 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, listFrameBuffers[i]); 
glViewport(0, 0, 512, 512); 
//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // HERE 
glDisable(GL_DEPTH_TEST); // AND HERE 

// draw code here 

glBindFramebufferOES(GL_FRAMEBUFFER_OES, oldFBO); 
glViewport(oldViewPort[0], oldViewPort[1], oldViewPort[2], oldViewPort[3]); 

и это работает! :)