【问题标题】:OpenGL Image Load/Store 24-bit RGB imagesOpenGL 图像加载/存储 24 位 RGB 图像
【发布时间】:2016-06-24 18:47:20
【问题描述】:

看起来 glBindImageTexture 没有用于 24 位 RGB(3 个 8 位通道)图像的 image format。我的纹理具有 GL_RGB8 类型的内部格式(24 位 RGB 图像)。不幸的是,我无法轻易更改我在运行时绑定到图像单元的纹理类型——是否可以通过 imageLoad 使用不同的图像格式并仍然访问 24 位 RGB 数据?

【问题讨论】:

  • "不幸的是,我无法轻易更改我在运行时绑定到图像单元的纹理类型" ...怎么办?这是你的纹理;你创造了它。你怎么能不控制它的格式?
  • 虽然我可以更改纹理的格式,但实际上无法在运行时更改像素数据。换句话说,我得到了一个特定大小的字节数组,它在内部构造了 3 个连续的 8 位字段——我无法创建一个具有 4 个连续 8 位字段的新数组,因此我可以使用 GL_RGBA8UI
  • ... 所以呢? OpenGL 可以将 RGB 数据上传到 RGBA8 纹理。如果您认为这会更慢,请考虑 OpenGL 可能已经在使用您当前的 3 通道纹理

标签: opengl textures rgb opengl-4 image-unit


【解决方案1】:

不,您不能将 GL_RGB8 与图像加载/存储一起使用。这样做是因为允许实现支持GL_RGB8,方法是用GL_RGBA8 替换它。但是,如果他们可以直接支持 3-component 格式,他们也可以不这样做。因此,作为规范的 OpenGL 不知道实现是否真的可以处理每像素 24 位,或者它是否假装使用 32 位纹理来处理。

所以 OpenGL 只是强制明确地进行替换。

【讨论】:

    猜你喜欢
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    相关资源
    最近更新 更多