1

我一直在使用GL_R16格式的 16 位单色纹理。这工作得很好。我现在需要一个 3 通道 16 位纹理。

但是,在检查联机帮助页glTexStorage2D时,我发现功能上似乎存在差距。

一个通道可用:GL_R16

两个通道可用:GL_RG16

四通道可用:GL_RGBA16

但是三个通道,只有 SNORM(有符号归一化)风格:GL_RGB16_SNORM

GL_RGB16发生了什么?添加第四个频道似乎很浪费,所以我想避免这种情况。我也想避免处理 -1..1 样本,因为我的数据是无符号的。

4

1 回答 1

4

怎么了GL_RGB16

没关系。根据OpenGL 4.6 核心配置文件规范中的表 8.12,它是一种允许的并且对于纹理来说也是需要支持的格式(与使用这种纹理作为渲染到纹理的帧缓冲区附件时相反)。

不幸的是,那些 OpenGL“参考页面”是出了名的不完整、过时、经常误导,有时甚至是完全错误的。唯一可靠的文档来源是 OpenGL 规范。

添加第四个频道似乎很浪费,所以我想避免这种情况

硬件对这种格式的作用完全是另一回事。例如,任何真实世界的 GPU 都会在内部填充GL_RGB8到 RGBA,因为它们不喜欢 3 字节对齐的纹素。如果他们都不喜欢 6 字节的 alingments,我不会感到惊讶GL_RGB16

于 2020-12-27T00:05:24.117 回答