OpenGL ES 2.0渲染纹理

我试图渲染到使用OpenGL ES 2.0纹理,但我似乎无法使其工作。

这是我如何进行:

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); } }; 

但是,当我尝试绘制并使用生成的纹理时,纹理被绘制为完全黑色。

如果我只是不把绘图代码包装在render_tex->begin();render_tex->end(); ,一切都正确绘制,导致我相信这个问题是孤立的上面的代码。

确保在尝试渲染之前纹理没有被绑定。 即使根本不使用纹理,试图渲染成当前绑定的纹理可能会调用未定义的行为,只是不起作用。

您应该在RenderTexture构造函数中的glTexImage2D之后实际调用glBindTexture(GL_TEXTURE_2D, 0) ,或者像恢复FBO一样,恢复先前绑定的纹理。 只要确保tex在渲染到FBO时没有被绑定。

这已经有一段时间了,但正如我在评论中写的,确保你正在初始化2纹理的力量。

我有和你一样的问题。 尝试添加

 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 

glBindTexture(GL_TEXTURE_2D, tex); 和黑方不得不消失。

你似乎没有使用glActiveTexture 。 我build议你调用glActiveTexture(GL_TEXTURE0+tex); 每个glBindTexture(tex); ,当您使用多个纹理时,这将为您节省很多头痛。 我猜这个错误是在你用来在屏幕上绘制纹理的代码中。