我目前正在 OpenGL 3D 引擎中实现深度剥离。我想将值存储在深度 2D 纹理数组中。该算法在第 n 次执行时,需要读取 n-1 层,如果当前值更大(对象较远),则将当前值插入第 n 层。但是,我们不应该能够在同一纹理中读取和写入。
是否可以从中读取(仅第 n-1 层)并将第 n 层附加为当前 FBO 的深度附件?
最佳答案
However, we are not supposed to be able to read and write in the same texture.
谁说的?
Textures存储图像s。注意复数。不禁止读取和写入相同的纹理。禁令反对reading from and writing to the same image.
阵列纹理包含多个图像。每个数组层都是它自己的二维图像(或一组二维贴图图像)。因此,从一个阵列层读取并写入另一阵列层是完全合法的。从数组层中的一个 mipmap 读取并写入同一数组层中的另一个 mipmap 是完全合法的。
在相同数组层的相同 mipmap 上读/写是不合法的。
这就是为什么如果同一纹理附加到 FBO 同时绑定(bind)到渲染上下文以供读取,OpenGL 不会报错的原因。只要您确保您不是在读取/写入同一图像,这是合法的。
关于c++ - 写入纹理数组的一层并从另一层读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11294358/