无法找到GL_MAX_UNIFORM_BUFFERS等宏定义,是否为书籍编辑错误?
关于OpenGL Uniform Buffer查询宏定义的问题解答
- 你提到的
GL_MAX_UNIFORM_BUFFERS、GL_MAX_VERTEX_UNIFORM_BUFFERS确实是《OpenGL超级宝典》多版本遗留的笔误,并非标准OpenGL定义的宏。 - 标准OpenGL中,对应的正确宏名称需要加上
_BINDINGS后缀:- 查询单个程序可使用的uniform块总绑定点上限:
GL_MAX_UNIFORM_BUFFER_BINDINGS - 查询顶点着色器阶段的uniform块绑定点上限:
GL_MAX_VERTEX_UNIFORM_BUFFER_BINDINGS - 同理,片元、几何、细分等其他着色器阶段的宏,均为
GL_MAX_<阶段>_UNIFORM_BUFFER_BINDINGS格式(例如GL_MAX_FRAGMENT_UNIFORM_BUFFER_BINDINGS)
- 查询单个程序可使用的uniform块总绑定点上限:
- 这类笔误大概率源于书籍早期版本的编辑疏漏,后续版本未修正便沿用至今。你可以通过Khronos官方OpenGL规范(所有支持UBO的核心版本,如4.6)验证,带
_BINDINGS的宏才是标准定义的合法查询参数。 - 额外提示:若要查询单个uniform块的最大字节容量,对应的宏
GL_MAX_UNIFORM_BLOCK_SIZE是正确的,不存在笔误。
内容的提问来源于stack exchange,提问作者Tapir
相关产品推荐
相关产品推荐

