我读到压缩纹理是不可读的,也不是颜色渲染。虽然我知道为什么不允许,但谁能详细解释一下吗?
不可读到底是什么意思?我不能在shader中读取它们使用图像加载等?或者我甚至不能从他们身上取样?
它不能渲染是什么意思?是否因为用户无论如何都会看到所有的垃圾,所以它是不允许的?
我没有尝试使用压缩纹理
压缩纹理是"可读的",根据该术语的大多数有用定义。你可以通过样本来阅读。然而,你不能对它们使用imageLoad
操作。为什么?因为读取这样的内存不是简单的内存获取。它涉及到获取大量内存并进行解压缩操作。
压缩图像是不可颜色渲染的,这意味着它们不能附加到FBO并用作渲染目标。有人可能认为这是显而易见的原因,但如果你需要解释清楚。写入压缩图像需要动态地进行图像压缩。大多数纹理压缩格式(或任何类型的压缩格式)都不能轻松处理更改几个值。更不用说,大多数压缩的纹理格式都是有损的,所以每次你做解压缩/写入/重新压缩操作时,你都会失去图像的保真度。
来自OpenGL Wiki:
尽管是彩色格式,但由于显而易见的原因,压缩图像是不可彩色渲染的。因此,将压缩图像附加到framebuffer对象将导致该FBO不完整,从而无法使用。由于类似的原因,没有压缩格式可以用作renderbuffers的内部格式。
所以"不可显色"意味着它们不能在fbo中使用。
我不确定"不可读"是什么意思;这可能意味着您不能将它们绑定到FBO并从FBO中读取(因为您一开始就不能将它们绑定到FBO)。