2014-11-05 4 views
5

В принципе, именно так, почему glBufferData берет указатель вместо int? Предполагается, что этот аргумент должен быть размером буферного объекта, так почему бы не GLsizei? была предоставлена ​​glBufferData второй arg - GLsizeiptr не GLsizei, почему?

OpenGL док на glBufferData https://www.opengl.org/sdk/docs/man/html/glBufferData.xhtml

+3

Это не указатель. Это интегральный тип того же размера, что и указатель. –

+0

@BenVoigt: Это ответ, а не комментарий :) – datenwolf

+0

@ datenwolf: Нет, у меня не было объяснения, почему этот размер целого числа предпочтительнее этого. –

ответ

10

Когда объекты вершинного буфера были introduced via the OpenGL extension mechanism, новый тип GLsizeiptrARB был создан и следующее обоснование:

Какой должна < смещение> и < размер> аргументы используют?

RESOLVED: Мы определяем новые типы, которые будут хорошо работать на 64-разрядных системах , аналогичных C-int «intptr_t». Новый тип «GLintptrARB» следует использовать вместо GLint, когда ожидается, что значения могут превышать 2 миллиарда. Новый тип «GLsizeiptrARB» следует использовать вместо GLsizei всякий раз, когда ожидается , который может превышать 2 миллиарда. Оба типа определены как целые числа, достаточно большие, чтобы содержать любое значение указателя. Как результат , они, естественно, масштабируются до большего числа бит в системах с 64-разрядными или даже более крупными указателями.

Смещения введенного в этом расширении набирается GLintptrARB, в соответствии с другими параметрами GL, который должен быть неотрицательным, но является арифметиком в природе (не UINT), и не являются размерами; для примера аргумент xoffset для TexSubImage * D имеет тип GLint. Буферные размеры печатаются GLsizeiptrARB.

Идея сделать эти типы неподписанными считалась, но была в конечном счете отклонена на том основании, что поддерживающие буферы большего размера , чем 2 ГБ, не считались важными для 32-разрядных систем.

Когда это расширение было принято в ядре OpenGL, расширение-совместимый тип GLsizeiptrARB для данного типа получил название стандартизированного GLsizeiptr который вы видите в функции подписи сегодня.