Должен ли я использовать типы данных OpenGL (GLint, CLchar, …) для кроссплатформенной игры?

У меня короткий вопрос. Почему OpenGL поставляется со своими собственными типами данных для стандартных типов, таких как int, unsigned int, char и так далее? И нужно ли мне их использовать вместо типов данных C ++?

Например, OpenGL эквивалентно unsigned int является GLuint и для строки с есть GLchar* вместо char*,

26

Решение

Например, OpenGL эквивалентно unsigned int является GLuint

Нет, это не так, и это точно Зачем вы должны использовать типы данных OpenGL при взаимодействии с OpenGL.

GLuint не «эквивалентен» unsigned int, GLuint является требуется быть размером 32 бита. это всегда 32-битный размер. unsigned int может быть быть 32-битным размером. Это может быть 64-битным. Вы не знаете, и С не собирается говорить вам (за пределами sizeof).

Эти типы данных будут определены для каждой платформы, и они могут быть определены по-другому для разных платформ. Вы используете их, потому что, даже если они определены по-разному, они всегда будут иметь одинаковые размеры. Размеры, которые ожидают и требуют API OpenGL.

33

Другие решения

Я не эксперт OpenGL, но обычно фреймворки / платформы, такие как OpenGL, Qtи т. д. определяют свои собственные типы данных, чтобы значение и емкость базового типа данных оставались одинаковыми в разных ОС. Обычно такое поведение получается с помощью макросов препроцессора C / C ++, но что касается GLuintВроде бы просто typedef в gl.h:

typedef unsigned int GLuint;

Так что ответ — да. Вы должны использовать типы данных платформы для обеспечения хорошей переносимости вашего кода в этой среде между операционными системами.

10