我正在使用gtk-3中的GTK_GL_AREA小部件用OpenGL编写我的应用程序。 一切都运作良好,直到我需要使用帧缓冲。首先 使用
绑定默认帧缓冲区glBindFramebuffer(GL_FRAMEBUFFER, 0);
不会导致任何渲染。所以我测试了默认的帧缓冲区id,而没有生成任何其他帧缓冲区。
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &fob);
结果id为1.并且绑定到1导致成功渲染到屏幕上。非常有趣的是,在生成帧缓冲后,默认的帧缓冲区ID变为2,生成另一个帧缓冲区3等。而生成的帧缓冲区的ID,其中1,2,...等我用于生成帧缓冲区的代码是
glGenFramebuffers(1, &buffer);
glBindFramebuffer(GL_FRAMEBUFFER, buffer);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(texture, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
渲染到任何生成的帧缓冲区似乎都不会产生任何结果。 即使glClearColor也会使附着的纹理变黑。
答案 0 :(得分:0)
我在代码中很容易看到我犯的错误。第一个参数glTexImage2D 应该是GL_TEXTURE_2D而不是纹理的id。不应该关注帧缓冲区的gl区域使用。