在OpenGL Superbible第5版中,在统一缓冲区对象部分,它这样说:
单个程序可以使用的统一块的最大数量是固定的,并且在任何给定着色器阶段可以使用的最大数量也是固定的。您可以通过使用 GL_MAX_UNIFORM_BUFFERS 参数(针对每个程序的总数)以及分别针对顶点、几何和片段着色器限制的 GL_MAX_VERTEX_UNIFORM_BUFFERS、GL_MAX_GEOMETRY_UNIFORM_BUFFERS 或 GL_MAX_FRAGMENT_UNIFORM_BUFFERS 调用 glGetIntegerv 来找到这些限制。
我还在第六版和第七版中找到了对这些内容的参考。
我似乎无法在“GL/”标头、Khronos 文档或任何搜索引擎中的任何位置找到这些宏定义。
这是本书多个版本中都存在的编辑错误,还是我在尝试查找时遗漏了一些(不太明显?)明显的细节?
我认为这些只是《超级圣经》系列中的错误,这似乎是提到这些常数的唯一来源。 OpenGL 4.5 Core 规范 本身在第 7.6.2 节中进行了说明:
每个着色器阶段使用的活动统一块的数量有一组与实现相关的最大值。如果程序中任何着色器阶段使用的uniform块数量超过其相应的限制,程序将无法链接。顶点、曲面细分控制、曲面细分评估、几何、片段和计算着色器的限制可以通过调用
来获取,其中 pname 值为GetIntegerv
、MAX_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_
为前缀。