有两个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保留。