В OpenGL Superbible 5-го издания, в разделе «Объекты унифицированного буфера», говорится следующее:
Существует фиксированное максимальное количество унифицированных блоков, которые может использовать одна программа, и максимальное количество, которое может использоваться на любом этапе шейдера. Вы можете найти эти ограничения, вызвав glGetIntegerv с параметром GL_MAX_UNIFORM_BUFFERS (для общей суммы по программе) и либо GL_MAX_VERTEX_UNIFORM_BUFFERS, GL_MAX_GEOMETRY_UNIFORM_BUFFERS, либо GL_MAX_FRAGMENT_UNIFORM_BUFFERS для ограничений вершинного, геометрического и фрагментного шейдеров соответственно.
Я также нашел ссылки на них в 6-м и 7-м изданиях.
Кажется, я не могу найти эти определения макросов ни в заголовках «GL/», ни в документации Khronos, ни в каких-либо поисковых системах.
Является ли это редакционной ошибкой, которая пережила несколько изданий книги, или я упускаю какую-то (менее?) очевидную деталь, пытаясь ее найти?





Я думаю, что это просто ошибки в серии Superbible, которая, похоже, является единственным источником, в котором упоминаются эти константы. Сама спецификация OpenGL 4.5 Core в разделе 7.6.2 гласит:
Существует набор зависящих от реализации максимальных значений количества активных однородных блоков, используемых на каждом этапе шейдера. [...] Ограничения для вершин, управления тесселяцией, оценки тесселяции, геометрии, фрагментов и вычислительных шейдеров можно получить, вызвав
GetIntegervсо значениями pnameMAX_VERTEX_UNIFORM_BLOCKS,MAX_TESS_CONTROL_UNIFORM_BLOCKS,MAX_TESS_EVALUATION_UNIFORM_BLOCKS,MAX_GEOMETRY_UNIFORM_BLOCKS,MAX_FRAGMENT_UNIFORM_BLOCKSиMAX_COMPUTE_UNIFORM_BLOCKSсоответственно.
Естественно, в коде эти константы должны иметь префикс GL_.