【问题标题】:Why is OPENGL missing 16-bit RGB format that is unsigned?为什么 OPENGL 缺少无符号的 16 位 RGB 格式?
【发布时间】:2021-04-04 06:58:01
【问题描述】:

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

但在查看手册页 glTexStorage2D 时,我发现功能上似乎存在差距。

一个频道可用:GL_R16

两个通道可用:GL_RG16

四个通道可用:GL_RGBA16

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

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

【问题讨论】:

  • GL_RGB16 是 48 位格式,对吗?这不是大多数硬件支持的东西。奇怪的是,您的部分支持GL_RGB16_SNORM,但 OpenGL 驱动程序不需要全部支持...
  • @ChuckWalbourn:GL 规范不同意

标签: opengl textures glteximage2d


【解决方案1】:

GL_RGB16怎么了?

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2018-07-29
    相关资源
    最近更新 更多