写入纹理数组的一层并从另一层读取

Writing to one layer of a texture array and reading from another

本文关键字:一层 读取 数组 纹理      更新时间:2023-10-16

我目前正在OpenGL 3D引擎中实现深度剥离。我想将值存储在深度 2D 纹理数组中。该算法在第 n 次执行时需要读取 n-1 层,如果当前值更大(物体远),则将当前值插入第 n 层。但是,我们不应该能够以相同的纹理进行读写。

例如,是否可以从中读取(仅第 n 层第 1 层)并将第 n 层附加为当前 FBO 的深度附件?

但是,我们不应该能够以相同的纹理进行读写。

谁说的?

纹理存储图像请注意复数形式。没有禁止读取和写入相同的纹理。禁止读取和写入同一图像

数组纹理包含多个图像。每个阵列层都是其自己的 2D 图像(或一组 2D mipmap 图像)。因此,从一个数组层读取并写入另一个数组层是完全合法的。从数组层中的一个 mipmap 读取并写入同一数组层中的另一个 mipmap 是完全合法的。

不合法的是在同一阵列层的同一 mipmap 上读取/写入。

这就是为什么如果相同的纹理附加到 FBO 同时绑定到渲染上下文以供读取,OpenGL 不会给出错误。只要您确保不读取/写入同一图像,这是合法的。