没有一种推荐方式.当你在Metal这么低的水平上工作时,有很多种可能性,你选择的那种很大程度上取决于你想要/需要优化的情况和性能特征.如果您只是在玩介绍项目,那么大多数决策都是无关紧要的,因为在您扩展到"真正的"项目之前,性能问题不会受到影响.
通常,游戏引擎每个模型使用一个缓冲区(或一组顶点/索引缓冲区),特别是如果每个模型需要不同的渲染状态(例如着色器,绑定纹理).这意味着当将新模型引入场景或不再需要旧模型时,可以将必需的资源加载到GPU存储器中/从GPU存储器移除(通过创建/销毁MTL对象).
当你改变缓冲区时,用于从同一缓冲区的(不同部分)进行多次绘制的主要用例.例如,在第n帧上,您使用缓冲区的第一个1KB进行绘制,同时您在新顶点数据中计算/流式传输并将其写入缓冲区的第二个1KB ...然后第n + 1帧,你切换缓冲区的哪些部分用于什么.
没有一种推荐方式.当你在Metal这么低的水平上工作时,有很多种可能性,你选择的那种很大程度上取决于你想要/需要优化的情况和性能特征.如果您只是在玩介绍项目,那么大多数决策都是无关紧要的,因为在您扩展到"真正的"项目之前,性能问题不会受到影响.
通常,游戏引擎每个模型使用一个缓冲区(或一组顶点/索引缓冲区),特别是如果每个模型需要不同的渲染状态(例如着色器,绑定纹理).这意味着当将新模型引入场景或不再需要旧模型时,可以将必需的资源加载到GPU存储器中/从GPU存储器移除(通过创建/销毁MTL对象).
当你改变缓冲区时,用于从同一缓冲区的(不同部分)进行多次绘制的主要用例.例如,在第n帧上,您使用缓冲区的第一个1KB进行绘制,同时您在新顶点数据中计算/流式传输并将其写入缓冲区的第二个1KB ...然后第n + 1帧,你切换缓冲区的哪些部分用于什么.