一些OpenGL纹理函数接受GLint
s,我期望GLenum
。例如,glTexImage2D
具有以下参数:
GLint internalformat
文档描述该参数如下:
internalformat
指定纹理的内部格式。必须是以下符号常量之一:GL_ALPHA,GL_LUMINANCE,GL_LUMINANCE_ALPHA,GL_RGB,GL_RGBA。
大多数情况下,当值必须是几个符号常量之一时,API将使用GLenum
。这是有道理的。但是这个(和其他一些纹理相关的参数)是GLint
s。为什么呢?
当然,他们都是内心的整体,而在C中,区别并不重要。但这不是一个纯粹的学术问题。在其他更强类型语言的OpenGL绑定中,GLint
和GLenum
之间的区别很重要,因为一个是签名而另一个不签名。例如。在Haskell OpenGLRaw
包中,所有符号常量都是GLenums
,这意味着每次调用fromIntegral
和类似函数时,必须使用glTexImage2D
显式转换。
答案 0 :(得分:8)
曾几何时......如果你回到旧的OpenGL版本的文档,其中仍然记录了Core Profile中现已弃用的功能,这将是有意义的。以前为internalFormat
传递值1,2,3,4是合法的,表示纹理中颜色分量的数量。
例如,这是OpenGL 2.1中glTexImage2D
的手册页:http://www.opengl.org/sdk/docs/man2/xhtml/glTexImage2D.xml。在internalFormat
下,它说:
指定纹理中的颜色分量数。必须是1,2,3或4,或以下符号常量之一:...