我目前正在OpenGL 3D引擎中实现深度剥离。我想将值存储在深度2D纹理数组中。该算法在其第n次执行时需要读取n-1层,如果当前值较大(物体很远),则在第n层插入当前值。但是,我们不应该能够以相同的纹理进行读写。
例如,是否可以从中读取(仅第n-1层)并将第n层作为当前FBO的深度附件附加?
答案 0 :(得分:4)
但是,我们不应该能够以相同的纹理进行读写。
说谁?
Textures存储图片 s 。注意复数。没有禁止读取和写入相同纹理的禁令。该禁令反对reading from and writing to the same image.
数组纹理包含多个图像。每个阵列层都是其自己的2D图像(或一组2D mipmap图像)。因此,从一个数组层读取并写入另一个数组层是完全合法的。从数组层中的一个mipmap读取并写入同一数组层中的另一个mipmap是完全合法的。
在相同数组层的相同 mipmap上读/写是不合法的。
这就是为什么如果将相同的纹理附加到FBO,同时将其绑定到渲染上下文以进行读取,OpenGL不会给出错误。只要您确保不会读取/写入同一图像,这是合法的。