【发布时间】:2020-02-02 23:00:11
【问题描述】:
我正在学习 Metal,我试图解决一个概念性问题:我的代码究竟应该在什么级别处理需要不同管道状态的连续绘图操作?据我了解(来自这样的答案:https://stackoverflow.com/a/43827775/2752221),我可以使用单个MTLRenderCommandEncoder 并在调用drawPrimitives: 和编码器状态之间更改其管道状态、它正在使用的顶点缓冲区等每次调用 drawPrimitives: 时的当前状态将被保留。那太好了。但似乎 Metal 的设计是这样的:可以创建多个 MTLRenderCommandEncoder 实例,并使用它们将一批命令顺序地扔到 MTLCommandBuffer 中。鉴于前者有效——使用MTLRenderCommandEncoder 并改变其状态——为什么要使用后者呢?什么情况下做前者是正确的,什么情况下需要做后者?后者是必要/适当的情况的示例是什么?
如果重要的话,我正在使用 Objective-C 开发 macOS 应用程序。谢谢。
【问题讨论】:
标签: objective-c metal