我一直在使用GL_R16格式的16位单色纹理。这很好用。我现在需要一个3通道的16位纹理。
不过,当检查手册页glTexStorage2D时,我发现功能上似乎存在差距。
一个通道可用:GL_R16
有两个通道可用:GL_RG16
有四个通道可用:GL_RGBA16
但有三个通道,仅具有SNORM(签名归一化(风格:GL_RGB16_NORM。
GL_RGB16发生了什么?增加第四频道似乎很浪费,所以我想避免这种情况。我还想避免处理-1.1个样本,因为我的数据是无符号的。
GL_RGB16
发生了什么?
很好。根据OpenGL 4.6核心配置文件规范中的表8.12,它是一种允许的格式,对于纹理也是一种需要支持的格式(与使用这种纹理作为渲染到纹理的帧缓冲区附件时形成对比(。
那些OpenGL";参考页";不幸的是,它们是出了名的不完整、过时、经常误导,有时甚至完全错误。唯一可靠的文档来源是OpenGL规范。
添加第四个通道似乎很浪费,所以我想避免
硬件如何处理这种格式完全是另一回事。例如,任何真实世界的GPU都会在内部将GL_RGB8
填充到RGBA,因为它们不喜欢3字节对齐的纹素。如果他们也不喜欢GL_RGB16
的6字节数组,我也不会感到惊讶。