OpenGL ES 2.0 renderizar a la textura

Estoy intentando renderizar a una textura usando OpenGL ES 2.0, pero parece que no puedo hacer que funcione.

Así es como procedo:

struct RenderTexture { GLuint framebuffer; GLuint tex; GLint old_fbo; RenderTexture(GLuint width, GLuint height) { glGetIntegerv(GL_FRAMEBUFFER_BINDING, &old_fbo); glGenFramebuffers(1, &framebuffer); glGenTextures(1, &tex); glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); glBindTexture(GL_TEXTURE_2D, tex); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0); glClearColor(1, 0, 0, 1); glClear(GL_COLOR_BUFFER_BIT); GLuint status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if (status != GL_FRAMEBUFFER_COMPLETE) { cout << status << endl; // this is not called } glBindFramebuffer(GL_FRAMEBUFFER, old_fbo); } void begin() { glGetIntegerv(GL_FRAMEBUFFER_BINDING, &old_fbo); glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); } void end() { glBindFramebuffer(GL_FRAMEBUFFER, old_fbo); } }; 

Pero cuando trato de dibujar y usar la textura resultante, la textura se dibuja como totalmente negra.

Si simplemente no render_tex->begin(); código de dibujo en render_tex->begin(); y render_tex->end(); , todo se dibuja correctamente, lo que me lleva a creer que el problema está aislado al código anterior.

Asegúrate de que la textura no esté unida antes de intentar reproducirla. Incluso si no se usa el texturizado en absoluto, intentar convertirlo en una textura actualmente vinculada puede invocar un comportamiento indefinido y simplemente no funcionar.

En realidad debería llamar a glBindTexture(GL_TEXTURE_2D, 0) después del glTexImage2D en su constructor RenderTexture , o tal vez restaurar la textura previamente vinculada, como lo hace con el FBO. Solo asegúrate de que el text no esté vinculado cuando proceses en el FBO.

Esto ha pasado un time, pero como escribí en los comentarios, asegúrese de inicializar un poder de 2 texturas.

Yo había tenido exactamente el mismo problema que tú. Intente agregar

 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 

justo después de glBindTexture(GL_TEXTURE_2D, tex); y el cuadrado negro tiene que desaparecer.

No parece hacer uso de glActiveTexture . Le recomiendo que llame a glActiveTexture(GL_TEXTURE0+tex); antes de cada glBindTexture(tex); , que te ahorrará muchos dolores de cabeza cuando uses más de una textura. Creo que el error está en el código que usas para dibujar la textura en la pantalla.