渲染到 OpenGL 中纹理数组的一层

问题描述

我使用 OpenGL 3.2 来渲染 shadow maps。为此,我构建了一个渲染到深度纹理的帧缓冲区。

要将纹理附加到帧缓冲区,我使用:

glFramebufferTexture2D( GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_TEXTURE_2D,shdw_texture,0 );

这很好用。渲染光视图后,我的 GLSL 着色器可以对深度纹理进行采样以解决光的可见性问题。

我现在试图解决的问题是有更多的阴影贴图,比如 50 个。在我的主要渲染通道中,我不想从 50 个不同的纹理中进行采样。我可以使用图集,但我想知道:我可以将所有这些阴影贴图作为来自 2D 纹理数组的切片传递吗?

那么,以某种方式创建一个具有 DEPTH 格式的 GL_TEXTURE_2D_ARRAY,并将数组的一层绑定到帧缓冲区?

帧缓冲区是否可以通过纹理阵列层支持 DEPTH,而不仅仅是深度纹理?

解决方法

通常,您需要区分是要创建分层帧缓冲区(请参阅Layered Images)还是要将多层纹理的单层附加到帧缓冲区。

使用 glFramebufferTexture3D 将一层 3D 纹理 (TEXTURE_3D) 或阵列纹理附加到帧缓冲区或使用 glFramebufferTextureLayer 将一层 3D 或阵列纹理附加到帧缓冲区。无论哪种情况,最后一个参数都指定了纹理的 layer

分层附件可以用 glFramebufferTexture 附加。见Layered rendering