代码之家  ›  专栏  ›  技术社区  ›  Ruban4Axis

有没有办法要求金属给我们每个实例顶点?

  •  1
  • Ruban4Axis  · 技术社区  · 6 年前

    有没有什么方法可以让metal给出每个实例的顶点?

    我在画贝塞尔线。为此,我想改变每个贝塞尔线的顶点数

    有办法吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   endomachi    6 年前

    无法更改metal(或任何其他api afaik)中每个实例的顶点数。

    实例化的主要好处是允许您用一个绘图调用绘制同一网格的许多实例。这降低了cpu开销和命令缓冲区的大小。但是,它不适用于用一个draw调用绘制许多不同的网格。

    相反,您可以使用metal中的一个新功能,该功能将在ios 12和macos 10.14中提供,以向 indirect command buffer . 执行此缓冲器只需要单个调用,因此它具有与实例化相同的性能优点,但更灵活。

    如果你的目标是早期的操作系统,你可以建立一个系列 直接引文 进入金属缓冲区并呼叫 -[MTLRenderCommandEncoder drawPrimitives:indirectBuffer:indirectBufferOffset:] 为每一个。这将为每个对象添加一个draw调用,因此它不像实例化或间接命令缓冲区那样快,但它允许您做一些有趣的事情(例如在带有计算内核的gpu上构建一个draw调用列表)