29

我有一个简短的问题。为什么 OpenGL 为标准类型(如 int、unsigned int、char 等)提供自己的数据类型?我是否必须使用它们而不是在 C++ 数据类型中构建?

例如 OpenGL 等价于unsigned intisGLuint和对于 ac 字符串有GLchar*而不是char*.

4

2 回答 2

34

例如 OpenGL 等价unsigned intGLuint

不,它不是,这正是你应该在与 OpenGL 交互时使用 OpenGL 的数据类型的原因。

GLuint不“等同于” unsigned int要求GLuint大小为32 位。它的大小始终为32 位。大小可能是 32 位。它可能是 64 位的。你不知道,C 不会告诉你(在 之外)。unsigned int sizeof

这些数据类型将针对每个平台定义,并且它们可能针对不同平台进行不同的定义。您使用它们是因为,即使它们的定义不同,它们的尺寸也总是相同的。OpenGL API 期望和要求的大小。

于 2012-09-05T16:09:34.577 回答
10

我不是 的专家OpenGL,但通常框架/平台(如OpenGLQt等)会定义自己的数据类型,以便底层数据类型的含义和容量在不同的操作系统中保持相同。通常这种行为是使用 C/C++ 预处理器宏获得的,但对于什么GLuint,它似乎只是一个typedefin gl.h

typedef unsigned int GLuint;

所以答案是肯定的。您应该使用框架的数据类型来确保您的代码在该框架内跨操作系统具有良好的可移植性。

于 2012-09-05T16:14:59.893 回答