2013-03-14 9 views
0

Я пытаюсь сделать текстуру, а затем использовать текстуру, но по какой-то причине она не работает.Render to texture: всегда черная текстура

Как описано в компании Apple documentation,

Я сначала выделить FBO для рендеринга в текстуру ..

glGenFramebuffers(1, &read_framebuffer); 
glBindFramebuffer(GL_FRAMEBUFFER, read_framebuffer); 

затем создать текстуру и прикрепить его к этому FBO ..

glActiveTexture(GL_TEXTURE0); 
glGenTextures(1, &texture); 
glBindTexture(GL_TEXTURE_2D, texture); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8_OES, 64, 64, 0, GL_RGBA, 
      GL_UNSIGNED_BYTE, NULL); 
glBindRenderbuffer(GL_RENDERBUFFER, 0); 
glBindTexture(GL_TEXTURE_2D, 0); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 
         texture, 0); 

затем создайте fbo для рисования ..

glGenFramebuffers(1, &draw_framebuffer); 
glBindFramebuffer(GL_FRAMEBUFFER, draw_framebuffer); 
glGenRenderbuffers(1, &_colorRenderBuffer); 
glBindRenderbuffer(GL_RENDERBUFFER, _colorRenderBuffer); 
[_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:_eaglLayer]; 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, _colorRenderBuffer); 

Позже в части петли рендеринга ..

glBindFramebuffer(GL_FRAMEBUFFER, read_framebuffer); 

(...off-screen drawing the scene here...) 

glBindFramebuffer(GL_FRAMEBUFFER, draw_framebuffer); 

Bind текстура, которая должна содержать мое закадровый рендеринг изображение ..

glBindTexture(GL_TEXTURE_2D, texture); 

(..draw the scene with texture applied here...) 

Однако, по какой-то причине текстура всегда черная. Здесь что-то не хватает?

+0

Сразу после вызова 'glFramebufferTexture2D', какое значение возвращает' glCheckFramebufferStatus (GL_FRAMEBUFFER) '? – prideout

+0

Он возвращает 36054 – Random

ответ

2

glTexImage2D своп GL_RGBA8_OES для GL_RGBA. Я вижу, что вы взяли эти параметры из документации Apple. (Без комментариев ..) В любом случае, о комментариях к вашему вопросу, как указывал @prideout, вы всегда должны проверять статус буфера кадров. В вашем случае он вернулся GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT.

+0

Ну, я играл с параметрами позже, так как он не работал. – Random

+0

Это действительно работало, спасибо: / – Random

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