В общем, смотрите приведенные выше ответы К-Балла и Чеда Ла Гуардиа, именно в этом и заключаются подобные определения типов. Это и, в некоторых случаях, чтобы скрыть фактический тип данных в случае, если API изменится в будущей ревизии (вряд ли произойдет с OpenGL, но я видел, как это произошло). В случае изменения типа данных для этого требуется перекомпиляция, но без изменения кода.
Тем не менее, нужно сказать, что разработчики библиотек часто переусердствовали в этом конкретном аспекте переносимости до глупости.
В этом конкретном случае спецификация OpenGL очень четко показывает, что такое GLuint
(глава 2.4). Это целое число без знака длиной не менее 32 бит. Они не оставляют много места для интерпретации или изменения.
Поскольку нет никаких шансов, что когда-либо может быть чем-то иным, чем uint32_t
(поскольку это само определение uint32_t
), и нет веской причины, по которой вы не могли используйте вместо него uint32_t
, если вы предпочитаете это делать (кроме использования GLuint прямо указывает, что переменная предназначена для использования с OpenGL, но не в коем случае).
В принципе, все же может быть чем-то иным, чем unsigned int
, конечно, поскольку о точном размере int
(кроме sizeof(long) >= sizeof(int) >= sizeof(short)
) почти ничего не сказано.