我在分层渲染中读到,我们创建了一个2D纹理数组(GL_TEXTURE_2D_ARRAY):
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D_ARRAY, TextureColorbufferName);
glTexParameteri(....
glTexImage3D(...
并可以将其附加到FBO:
glGenFramebuffers(1, &FramebufferName);
glBindFramebuffer(GL_FRAMEBUFFER, FramebufferName);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, TextureColorbufferName, 0);
我觉得难以理解的是,如何将一层纹理绑定到FBO中的单个颜色附着点?非颜色附件0(或任何GL_COLOR_ATTACHMENTi)本身就是一个“图像”吗?
更详细:
在阅读纹理数组之前,这是我对FBOS的理解
+--------------+
+-----------+| FBO object ++--------------------------------------------+
| | +---------------------+ |
| +--------------+ | |
| + | |
| | | |
| | | |
v v v v
+-----------------+ +-----------------+ +-----------------+ +------------------+
|color attachment | |color attachment | |depth attachment | |stencil attachment|
| 0 | | 1 | | | | |
+-----------------+ +-----------------+ +-----------------+ +------------------+
(this too)
(this is actually (this is also a (this too)
one texture or texture of renderbuffer)
one renderbuffer)
但是在阅读了纹理数组后,这是真的吗?
+--------------+
+-----------+| FBO object ++--------------------------------------------+
| | +---------------------+ |
| +--------------+ | |
| + | |
| | | |
| | | |
v v v v
+-----------------+ +-----------------+ +-----------------+ +------------------+
|color attachment | |color attachment | |depth attachment | |stencil attachment|
| 0 | | 1 | | | | |
+-----+--+------+-+ +-----------------+ +-----------------+ +------------------+
| | |
| | v+
| v+ +----------------------------------+
| +--------->+ v
v | +
+----------------+ +---v-------------+ |
| | | | +---v------------+
|texture array[0]| |texture array[1] | |texture array[n]|
| | | | | |
| | | | | |
| | | | | |
+----------------+ +-----------------+ +----------------+
即每个附件本身是各种纹理的集合?
我很难想象出1个颜色附着点如何映射到多个纹理。
如果我从1个FBO(一个绑定到texture_2d_array)到另一个(一个绑定到texture_2d)的blit会发生什么?
答案 0 :(得分:3)
纹理是图像的集合。您没有将纹理附加到FBO附加点;您将 纹理中的图像附加到FBO附加点。
因此,您不会将多个纹理附加到单个附着点。
Array textures只是在mipmap级别存储图像数组的纹理。非数组2D纹理仅在每个mipmap级别存储一个图像。立方体贴图每个mipmap存储6个图像。数组纹理存储每个mipmap的用户提供的图像数量。
但是,您可以将layered image附加到附件点。 array texture的mipmap级别是分层图像,还有其他一些内容。
通过分层图像构建的FBO可以通过几何着色器用于layered rendering。这允许GS将特定的基元输出传递给分层FBO中的特定层索引。
您如何想象这取决于您。