【发布时间】:2011-10-17 03:54:50
【问题描述】:
是否可以将一组顶点放入 VBO,但采用索引和纹理坐标。来自常规内存的数组?如果是,使用哪种语法?
【问题讨论】:
是否可以将一组顶点放入 VBO,但采用索引和纹理坐标。来自常规内存的数组?如果是,使用哪种语法?
【问题讨论】:
是的,可以这样做。但你不应该。
使用缓冲区对象的原因是为了提高性能。执行您的建议只会降低您通过正确使用缓冲区对象获得的性能。
此外,这是大多数司机不经常看到的驱动程序路径。人们要么将缓冲区对象用于顶点数据,要么使用客户端内存数组。由于这条路人迹罕至,因此您更有可能遇到驱动程序错误。
语法只是常规语法。 gl*Pointer 调用是否使用缓冲区对象取决于缓冲区对象是否绑定到 GL_ARRAY_BUFFER在进行 gl*Pointer 调用时。因此,您可以将缓冲区绑定到GL_ARRAY_BUFFER,使用偏移量进行gl*Pointer 调用,然后将0 绑定到GL_ARRAY_BUFFER 并使用实际指针进行gl*Pointer 调用。
同样,如果缓冲区绑定到 GL_ELEMENT_ARRAY_BUFFER,则 glDraw*Elements* 调用使用缓冲区对象。因此,如果您想将客户端内存用于这些功能,请将 0 绑定到它。
【讨论】:
GL_DYNAMIC_DRAW 或 GL_STREAM_DRAW 的用法。如果这是您希望它们从 CPU 内存中获取的原因。