我正在使用 OpenGL 4.0,以前使用的是 3.3 我有一个带有 3 个输出的片段着色器 - 每个都是 vec3。我正在将这些输出写入一些 FBO,然后尝试使用 glBlitFramebuffer() 方法测试内容。我得到的是空的屏幕。现在,我发现将输出设置为 vec4 类型可以正常工作。我不明白为什么!我的 FBO 纹理设置为 RGB32F,因此它们应该能够接受来自片段的 vec3。这是我的 FBO 设置(这是 Java LWJGL 包装器,但在这里没关系):
_fbo = glGenFramebuffers();
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, _fbo);
glGenTextures(m_textures);
_depthTexture = glGenTextures();
for (int i = 0; i < GBUFFER_NUM_TEXTURES; i++) {
glBindTexture(GL_TEXTURE_2D, m_textures.get(i));//
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, width, height, 0, GL_RGB, GL_FLOAT, (ByteBuffer) null);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0+i , GL_TEXTURE_2D,m_textures.get(i), 0);//
}
// depth
glBindTexture(GL_TEXTURE_2D, _depthTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32F, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, (ByteBuffer) null);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, _depthTexture, 0);
DrawBuffers = BufferUtils.createIntBuffer(GBUFFER_NUM_TEXTURES);
DrawBuffers.put(0, GL_COLOR_ATTACHMENT0);
DrawBuffers.put(1, GL_COLOR_ATTACHMENT1);
DrawBuffers.put(2, GL_COLOR_ATTACHMENT2);
glDrawBuffers(DrawBuffers);