在gldrawelements中,索引参数的含义是什么



有两个OpenGL文档页面,它们对Gldrawelements函数的"索引"参数的描述略有不同。在www.opengl.org/sdk/docs/man4/上说:

indices
    Specifies a pointer to the location where the indices are stored. 

和www.khronos.org/opengles/sdk/docs/man3说:

indices
    Specifies a byte offset (cast to a pointer type) into the buffer bound 
    to GL_ELEMENT_ARRAY_BUFFER to start reading indices from. If no buffer
    is bound, specifies a pointer to the location where the indices are stored. 

我使用OpenGL 4 。

在Windows上

因此,我将索引数组复制到我创建的元素缓冲对象中,我需要提供的索引指针参数是第一个索引字节中的偏移吗?因此,如果我想在索引3上开始绘画,则参数将是2 * sizeof(gluint),以指针为指针?

我实际上是为此而努力为此创建一个EBO,但是从外观上看,如果没有EBO绑定,则指针指向指向指标的位置,而不是EBO。我是对的,这意味着它将指向您在系统RAM上的数组?(编辑:我只是意识到这是没有意义的,如果指针在0x00000008,则不能在系统内存中转到该地址。)为了能够使用它?谢谢。

根据OpenGL 4.5,核心配置文件,从客户端内存中读取(§10.3.10OpenGL 4.5核心规格):

drawlements drawRangeElements drawlelementsinstanced source source source sours unt to buffer对象的索引 ELEMENT_ARRAY_BUFFER,使用其 indices 参数作为偏移,以与第10.3.9节相同的方式进入缓冲对象。[...]如果零与ELEMENT_ARRAY_BUFFER绑定,则这些绘图命令的结果未定义。

因此,您创建EBO的方法是正确的。除非您的0索引位于偏移零,则第三索引位于偏移3*sizeof(type)

至于您的第二个引号:在较旧的OpenGL版本中,您可以将指针传递给客户端内存(在您的过程虚拟地址空间,而不是物理地址)中,然后将ELEMENT_ARRAY_BUFFER Unbound保留。

相关内容

  • 没有找到相关文章

最新更新