我们是否需要为每次绘制创建一个新的 RenderPassDescriptor,或者我们可以缓存它并重用它?
Do we need to create a new RenderPassDescriptor for each draw, or we can cache it and reuse it?
我们是否需要为每次绘制创建一个新的 RenderPassDescriptor
,或者我们可以缓存它并重新使用它?
如果不是,那么多采样纹理和深度模板纹理呢?我还需要在每次通过时重新创建它们吗?
Metal 中的一些对象被设计为短暂且极其轻量级,而其他对象则更昂贵并且可以持续很长时间,也许在应用程序的整个生命周期内。 MTLRenderPassDescriptor
是临时对象。通常,您创建一个 MTLRenderPassDescriptor
对象一次,并在您的应用程序每次呈现帧时重复使用它。
what about the multisample texture and the depth stencil texture? Do I
also need to recreate them on each pass?
MTLTexture
类型对象不是瞬态的,在性能敏感代码中重用这些对象,避免重复创建它们。
MTLRenderPassDescriptor 通常是轻量级的,因此创建它们对性能影响不大。
但是 Metal 中的 MTLRenderEncoders 是最昂贵的操作。但根据我的经验,我注意到如果您使用一些默认属性缓存 MTLRenderPassDescriptor 并且只更新您需要修改的属性,那么我们可以在创建编码器时节省很多性能。
我们是否需要为每次绘制创建一个新的 RenderPassDescriptor
,或者我们可以缓存它并重新使用它?
如果不是,那么多采样纹理和深度模板纹理呢?我还需要在每次通过时重新创建它们吗?
Metal 中的一些对象被设计为短暂且极其轻量级,而其他对象则更昂贵并且可以持续很长时间,也许在应用程序的整个生命周期内。 MTLRenderPassDescriptor
是临时对象。通常,您创建一个 MTLRenderPassDescriptor
对象一次,并在您的应用程序每次呈现帧时重复使用它。
what about the multisample texture and the depth stencil texture? Do I also need to recreate them on each pass?
MTLTexture
类型对象不是瞬态的,在性能敏感代码中重用这些对象,避免重复创建它们。
MTLRenderPassDescriptor 通常是轻量级的,因此创建它们对性能影响不大。 但是 Metal 中的 MTLRenderEncoders 是最昂贵的操作。但根据我的经验,我注意到如果您使用一些默认属性缓存 MTLRenderPassDescriptor 并且只更新您需要修改的属性,那么我们可以在创建编码器时节省很多性能。