在 Metal Best Practices Guide 它指出,为了获得最佳性能,应该“实现三重缓冲模型来更新动态缓冲区数据”,并且“动态缓冲区数据是指存储在缓冲区中的频繁更新的数据”
是否执行 MTLTexture 如果需要每一帧更新一次,是否符合“存储在缓冲区中的频繁更新数据”的条件?上述指南中的所有示例都侧重于 MTLBuffer s
MTLTexture
MTLBuffer
我注意到苹果在MetalKit中的实现有一个 nextDrawable ,所以也许这就是这里发生的事情?
nextDrawable
-replaceRegion:... 方法或通过写入支持IOSurface),那么您将需要一种多缓冲技术,是的。
-replaceRegion:...
-textureBarrier 在绘制调用之间的渲染命令编码器上,具体取决于您正在执行的操作。
-textureBarrier
nextDrawable 提供了一种多缓冲的形式。在这种情况下,这不是由于CPU访问。您将渲染到一个纹理,而之前渲染的纹理可能仍在其到达屏幕的过程中。您不希望对两者使用相同的纹理,因为新的渲染可能会在将纹理放到屏幕上之前过度绘制纹理,从而显示损坏的结果。