在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处理器默认?
答案 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())