我正在尝试实现一些程序并使用这个经典代码:
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
绑定深度缓冲区。
glGenRenderbuffers(1, &depthbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, depthbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width,
height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthbuffer);
绑定几个 3D 纹理:
glGenTextures(targets.size(), textures);
for (auto &target : targets) {
glBindTexture(GL_TEXTURE_3D, textures[ix]);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA32F, width, height, depth, 0, GL_RGBA, GL_FLOAT, NULL);
}
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + ix, textures[ix], 0);
buffers[ix] = GL_COLOR_ATTACHMENT0 + ix;
++ix;
}
glDrawBuffers(targets.size(), buffers);
它不起作用,表示GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
错误。我认为,因为我的纹理是分层的,所以可能存在没有分层深度缓冲区的问题。我用与3D纹理相同的方式创建它,所以我删除了深度缓冲区。这个解决了任务,现在我的帧缓冲区正在工作,渲染完成等等。
但是,如果我需要渲染每个图层,附加深度缓冲区怎么办?是否支持此功能,是否有一些很少的api调用来实现这一目标?
答案 0 :(得分:1)
如果一个附加图像是分层的,则所有附加图像必须分层。因此,如果您想使用深度缓冲区进行分层渲染,则深度图像必须也进行分层。
因此,不应使用渲染缓冲区,而应使用深度格式的2D数组纹理。