Это Defination из glColorPointer от OpenGL.org:Как API OpenGL, такой как glColorPointer, знает размер массива, который передавался как указатель?
аннулируются glColorPointer (размер GLint, тип GLenum, GLsizei шаг, Const GLvoid * указатель); Параметры
Размер Указывает количество компонентов на цвет. Должно быть 3 или 4. Начальное значение равно 4.
тип Задает тип данных каждого цветового компонента в массиве. Символьные константы GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT, GL_FLOAT и GL_DOUBLE принимаются. Начальным значением является GL_FLOAT.
шаг Задает смещение байта между последовательными цветами. Если stride равен 0, цвета, как понимается, плотно упакованы в массив. начальное значение равно 0.
указатель Определяет указатель на первый компонент первого цвета элемента в массиве. Начальное значение 0.
Говоря простыми словами, мы можем сказать, что размер и типа параметры определяют количество байтов одного цветового блока и походкой указывает байтовое смещение между последовательными цветовых единиц.
Но как эта функция знает Общее количество единиц измерения? Как мы все знаем, если массив передан как указатель на функцию, невозможно получить размер массива с помощью функции sizeof() внутри функции. Так как glColorPointer знает размер массива, когда указательный параметр является только указателем GLvoid *?
Короче говоря, он не знает ... вполне возможно свернуть приложение, вычеркнув ненужные индексы (или нет, если вам не повезло). Тем не менее, он знает, если объект буфера связан. В этом случае размер элемента буфера, зарезервированного 'glBufferData', является максимально допустимым размером (опять же, вполне возможно рисовать индексы вне этого диапазона, что может привести к сбою вашего приложения). – Damon
@BrendanLong: Почему вы спекулируете? OpenGL хорошо указан, а функции gl * Pointer не разыгрывают указатель. – datenwolf