* BaseVertex和gl_VertexID

时间:2011-09-17 07:30:45

标签: opengl glsl

我已经浏览了规范和OpenGL论坛但却无法理解这一点:

绘图命令的*BaseVertex版本是否应该添加到GLSL变量gl_VertexID?在其有效的情况下,gl_VertexID包含在添加ELEMENT_ARRAY_BUFFER之前从绑定basevertex获取的索引。

所以,我的问题是:这是正确的行为吗?我认为gl_VertexID应该包含用于获取顶点的索引。

2 个答案:

答案 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偏移后的索引,而不是从缓冲区中获取的索引。

不幸的是,一些旧的驱动程序没有正确实现它。