针对金属的MDLVertexDescriptor和MTLVertexDescriptor有什么区别?我想知道为什么有2种不同的数据结构来定义顶点描述符?
答案 0 :(得分:1)
MDLVertexDescriptor
是位于模型I / O框架中的接口。
MTLVertexDescriptor
是位于Metal框架中的接口。
尽管它们都是相似的概念(有关顶点数据布局的描述),但出于以下原因,它们仍需分开。
首先,您可以链接到上述两个框架,但不需要使用其中任何一个。
例如,假设我需要编写一个加载模型并绘制模型的应用程序,但是我不想学习Metal,因此我只坚持使用OpenGL。模型I / O框架适合我的需求。在这种情况下,我将链接到Model I / O和OpenGL,但不会链接到Metal,因此我将没有MTLVertexDescriptor
。
另一方面,假设我需要编写一个加载glTF 2.0(https://www.khronos.org/gltf/)模型的应用程序,并且由于我知道OpenGL已被Apple弃用,因此我想使用Metal Framework 。在这种情况下,我将链接到Metal框架和其他一些可以加载glTF文件的库,但是由于我使用glTF,因此不需要Model I / O。因此,在这种情况下,我将没有MDLVertexDescriptor
。
这两个接口都非常相似,因为它们都表示相同的事物,但是差异在某些方面是特定于域的。
但是,我认为,为什么这些类是不同的,主要原因是苹果公司决定将相似的概念引入两个框架比将所有“相似”的概念分为一个框架要好,因为那样很难维护,文档并解决。