Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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;

Итак, да. Вы должны использовать типы данных фреймворка, чтобы обеспечить хорошую переносимость вашего кода внутри этой структуры в разных ОС.