Это определение glColorPointer от opengl.org:
void glColorPointer (размер GLint, тип GLenum, шаг GLsizei, указатель const GLvoid *); параметры
размер Указывает количество компонентов на цвет.Должно быть 3 или 4. Начальное значение 4.
type Указывает тип данных каждого цветового компонента в массиве.Символьные константы GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT, GL_FLOAT и GL_DOUBLE принимаются.Начальное значение: GL_FLOAT.
stepde Указывает смещение в байтах между последовательными цветами.Если шаг равен 0, считается, что цвета плотно упакованы в массиве.Начальное значение - 0.
указатель Указывает указатель на первый компонент первого цветового элемента в массиве.Начальное значение равно 0.
Проще говоря, мы можем сказать, что параметры size и type определяют количество байтов одной цветовой единицы, а stride определяет смещение в байтах между последовательными единицами цвета.
Но как эта функция знает общее количество единиц ?Как мы все знаем, если массив передается как указатель на функцию, невозможно получить размер массива, используя sizeof () внутри функции.Так как же glColorPointer узнает размер массива, когда параметр указателя является только указателем GLvoid *?