我必须使用OpenGL数据类型(GLint,CLchar,..)进行跨平台游戏吗

Do I have to use the OpenGL data types (GLint, CLchar, ...) for a cross platform game?

本文关键字:CLchar 跨平台 游戏 GLint OpenGL 数据类型      更新时间:2023-10-16

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

例如,等价于unsigned int的OpenGL是GLuint,并且对于c字符串,存在GLchar*而不是char*

例如,等效于unsigned int的OpenGL是GLuint

不,它不是,这正是为什么在与OpenGL接口时应该使用OpenGL的数据类型。

GLuint并不"等同"于unsigned intGLuint的大小要求为32位。它的大小总是32位。CCD_ 10的大小可能为32位。它可能是64位。你不知道,C不会告诉你(在sizeof之外)。

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

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

typedef unsigned int GLuint;

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