【发布时间】:2014-06-23 17:36:28
【问题描述】:
我正在尝试绘制 opengl 3d 地形,但是我开始怀疑如果我有很多顶点而没有用它们绘制任何三角形,是否会给 CPU 带来巨大的头痛。
【问题讨论】:
我正在尝试绘制 opengl 3d 地形,但是我开始怀疑如果我有很多顶点而没有用它们绘制任何三角形,是否会给 CPU 带来巨大的头痛。
【问题讨论】:
可能会有一些开销,但不应很大。其中很多都高度依赖于平台。
GPU 主要使用与 CPU 不同的地址空间。为了使 GPU 可以访问内存页面,这些页面必须映射到 GPU 地址空间。创建这些映射需要一些每页开销。 GPU 访问的内存页面可能还必须固定/连接,以防止它们在 GPU 访问它们时被分页。同样,连接页面可能会产生一些每页开销。
只要缓冲区保持映射状态,您只需为这些操作付出一次代价,而不是为每一帧付出代价。但是,如果您的应用程序或与其他也在使用 GPU 的应用程序一起达到资源限制,则您的缓冲区可能未映射,并且开销可能会重复。
如果您有大量缓冲区,并且通常只使用其中的一小部分,则将几何体拆分为多个较小的缓冲区可能会有所帮助。当然,只有当您可以对顶点进行分组时,这才是实用的,这样您将主要使用来自任何给定帧的少量缓冲区的顶点。绑定每个缓冲区也有开销,所以缓冲区太多也是不可取的。
如果您用于绘图调用的顶点在有限的索引范围内,您还可以考虑使用glDrawRangeElements() 进行绘图。通过此调用,您提供了一个可供绘制调用使用的索引范围,这使驱动程序有机会仅映射部分缓冲区而不是整个缓冲区。
【讨论】:
驻留在内存中但未被主动访问的数据仅占用内存,对处理器时钟周期消耗没有影响。这适用于任何类型的内存中的任何类型的数据。
【讨论】: