Должен ли я использовать типы данных OpenGL (GLint, CLchar,...) для кросс-платформенной игры?
У меня есть короткий вопрос. Почему OpenGL поставляется со своими собственными типами данных для стандартных типов, таких как int, unsigned int, char и т.д.? И я должен использовать их вместо сборки в С++ datatypes?
Например, эквивалент OpenGL для unsigned int
равен GLuint
, а для строки c есть GLchar*
вместо char*
.
Ответы
Ответ 1
Например, эквивалент OpenGL для unsigned int
равен GLuint
Нет, это не так, и именно поэтому вы должны использовать типы данных OpenGL при взаимодействии с OpenGL.
GLuint
не эквивалентен unsigned int
. GLuint
должен иметь размер 32 бит. Он всегда 32-битный. unsigned int
может иметь размер 32 бит. Это может быть 64-бит. Вы не знаете, и C не собирается вам говорить (вне sizeof
).
Эти типы данных будут определены для каждой платформы, и они могут быть определены по-разному для разных платформ. Вы используете их, потому что, даже если они определены по-разному, они всегда будут иметь одинаковые размеры. Размеры, ожидаемые и требуемые API OpenGL.
Ответ 2
Я не эксперт OpenGL
, но обычно фреймворки/платформы, такие как OpenGL
, Qt
и т.д., определяют свои собственные типы данных, так что значение и емкость базового типа данных остаются неизменными различных ОС. Обычно это поведение получается с использованием макросов препроцессора C/С++, но для чего относится к GLuint
, кажется, что это просто typedef
в gl.h
:
typedef unsigned int GLuint;
Итак, да. Вы должны использовать типы данных фреймворка, чтобы обеспечить хорошую переносимость вашего кода внутри этой структуры в разных ОС.