我希望尽可能地让我的代码更加标准化,那么为什么我要将我的类成员定义为OpenGL类型而不是使用基本类型呢?这样做有何优势吗?
“unsigned int”类型的大小取决于您正在构建的平台。我预计这通常是32位,但它可能是16或64(或其他某些值 - 取决于平台)。
库特定的类型通常根据平台特定规则创建为typedef。这使得通用应用程序可以使用正确的类型,而无需了解将要构建的平台。相反,平台特定的知识被限制在单个公共头文件中。
在这种情况下,我认为这并不重要,因为规范指定它们是最小尺寸,而不是严格尺寸。请查看gl.h ~第149行,它们只是基本C类型的typedefs。它们只是一种方便 - 例如有一个布尔类型,因此如果您使用C89并且不使用任何布尔值,则有一个设置供您在GL中使用。GLuint只是输入unsigned int的更短方式:
typedef unsigned int GLenum;
typedef unsigned char GLboolean;
typedef unsigned int GLbitfield;
typedef void GLvoid;
typedef signed char GLbyte; /* 1-byte signed */
typedef short GLshort; /* 2-byte signed */
typedef int GLint; /* 4-byte signed */
typedef unsigned char GLubyte; /* 1-byte unsigned */
typedef unsigned short GLushort; /* 2-byte unsigned */
typedef unsigned int GLuint; /* 4-byte unsigned */
typedef int GLsizei; /* 4-byte signed */
typedef float GLfloat; /* single precision float */
typedef float GLclampf; /* single precision float in [0,1] */
typedef double GLdouble; /* double precision float */
typedef double GLclampd; /* double precision float in [0,1] */
unsigned int
不是4个字节的平台,你的代码可能会停止工作。 - ComicSansMSgl.h
。OpenGL 实现在平台之间不可移植。例如,您不能使用 Windows SDK 中的gl.h
在 Linux 上进行编译。 - ComicSansMS