我已经浏览了规范和OpenGL论坛但却无法理解这一点:
绘图命令的*BaseVertex
版本是否应该添加到GLSL变量gl_VertexID
?在其有效的情况下,gl_VertexID
包含在添加ELEMENT_ARRAY_BUFFER
之前从绑定basevertex
获取的索引。
所以,我的问题是:这是正确的行为吗?我认为gl_VertexID
应该包含用于获取顶点的索引。
答案 0 :(得分:5)
是的,这是正确的行为。 BaseVertex的使用场景是,您只需要切换这一个值,而不是使用gl*Pointer
函数将缓冲区偏移调整到顶点数组中。
我们的想法是,您可以将多个网格(模型文件)中的数据加载到单个VBO中,而无需调整索引。
答案 1 :(得分:0)
你的假设是对的。 gl_VertexID应包含BaseVertex offset。
opengl wiki about GLSL built-in vars:
注意:gl_VertexID将应用基础顶点。
about glDrawElementsBaseVertex:
传递给顶点着色器的gl_VertexID将是被basevertex偏移后的索引,而不是从缓冲区中获取的索引。
不幸的是,一些旧的驱动程序没有正确实现它。