Я понимаю, что Open GL должен использовать числа, но почему бы просто не использовать обычные целые числа и числа с плавающей запятой или уже существующие классы-оболочки (в зависимости от того, что необходимо для того, чтобы весь мир Open GL хорошо сочетался)? Есть ли разница, помимо имени и того, что используется исключительно в Open GL, или это почти одно и то же с другим именем?
Зачем существуют GLint и GLfloat?
Ответы (1)
Потому что int (упрощение здесь) 32 бита в 32-битной системе и 64 бита в 64-битной системе, поэтому даже просто «int» не является универсальной концепцией. Имейте в виду, что аппаратное обеспечение, на котором работает графический код, отличается от вашего процессора, и возникает потребность в новых типах. Используя собственный typedef, OpenGL может гарантировать, что правильное количество битов будет правильно упаковано при отправке данных на вашу видеокарту.
Это можно было бы сделать с помощью функций преобразования, которые абстрагируются от беспорядка «разных целых чисел», но это повлекло бы за собой снижение производительности, что обычно неприемлемо, когда вы говорите о каждом отдельном числе, поступающем на видеокарту и от нее.
tl; dr при использовании «int» вы пишете с учетом аппаратного обеспечения вашего процессора. При использовании «GLInt» вы пишете с учетом аппаратного обеспечения вашей видеокарты.
РЕДАКТИРОВАТЬ: как указано в комментариях, на 64-битном процессоре int
может (и, вероятно, будет) 32-битным по соображениям совместимости. Исторически сложилось так, что для 8-, 16- и 32-битного оборудования это был собственный размер процессора, но технически это то, что компилятор хочет использовать при создании машинного кода. Реквизит @Nicol Bolas и @Mark Dickinson
int
. Он может быть 32-битным в 64-битной системе. Это может быть не так.
- person Nicol Bolas; 08.09.2012
GLfloat
.
- person Beyondo; 14.03.2018