1
votes

I use OpenGL 3.2 to render shadow maps. For this, I construct a framebuffer that renders to a depth texture.

To attach the texture to the framebuffer, I use:

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

This works great. After rendering the light view, my GLSL shader can sample the depth texture to solve visibility of light.

The problem I am trying to solve now, is to have many more shadow maps, let's say 50 of them. In my main render pass I don't want to be sampling from 50 different textures. I could use an atlas, but I wondered: could I pass all these shadow maps as slices from a 2D texture array?

So, somehow create a GL_TEXTURE_2D_ARRAY with a DEPTH format, and bind one layer of the array to the framebuffer?

Can framebuffers be backed for DEPTH by a texture array layer, instead of just a depth texture?

1

1 Answers

1
votes

In general, you need to distinguish whether you want to create a layered framebuffer (see Layered Images) or whether you want to attach a single layer of a multilayered texture to a framebuffer.

Use glFramebufferTexture3D to attach a layer of a 3D texture (TEXTURE_3D) or array texture to a framebuffer or use glFramebufferTextureLayer to attach a layer of a three-dimensional or array texture to the framebuffer. In either case the last argument specifies the layer of the texture.

Layered attachments can be attached with glFramebufferTexture. See Layered rendering.