指定为GL_RGBA的内部格式的数据类型是什么?

时间:2014-11-07 21:37:54

标签: opengl

在OpenGL wiki glTexImage2D中,它写道:

  

internalFormat指定中的颜色分量数   质地。必须是表1中给出的基本内部格式之一   表2中给出的大小的内部格式,或其中一个压缩格式   内部格式见下表3。

OpenGL Programming Guide, Chapter 9, Texture Mapping

  

根据定义,GL_LUMINANCE,GL_LUMINANCE_ALPHA,GL_RGB和GL_RGBA   是宽容的,因为他们不要求特定的解决方案。

因此,如果我们将GL_RGBA分配给internalformat,那么使用什么数据类型? GPU处理器默认?

2 个答案:

答案 0 :(得分:4)

用于GL_RGBA的大小具体未定义。

OpenGL 4.5 spec,“8.5纹理图像规范”一节,第153页(强调添加):

  

内部组件分辨率是分配给纹理图像中每个值的位数。如果将internalformat指定为基本内部格式,则GL将生成的纹理存储为内部组件分辨率自己选择

其中“基本内部格式”是指表8.11中列出的格式,其中包括GL_RGBA

我希望所选格式通常为GL_RGBA8,但实际上并不能保证。如果您关心尺寸,则应使用尺寸格式。事实上,我认为你应该永远。未实现的格式似乎仍然存在向后兼容性。我总是感到惊讶的是他们没有在Core Profile中删除。例如,较新的glTexStorage*()入口点在许多用例中作为glTexImage*()的更好替代品,只接受大小的内部格式。

答案 1 :(得分:0)

我不确定你的问题是什么,但GL_RGBA通常分别是R,G,B,A顺序的4x8bit(4字节/ GL_BYTE类型)格式,但常量只是说缓冲区是由组成的这个顺序,而不是每个通道宽度有多大。

更多信息here

编辑:对于某些方法,您还需要指定此通道宽度(例如glReadPixels()或glDrawPixels())