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