#ios #metal
#iOS #Металлические
Вопрос:
В чем разница между MDLVertexDescriptor и MTLVertexDescriptor для Metal? Интересно, почему существуют 2 разные структуры данных для определения дескриптора вершины?
Комментарии:
1. Они оба представляют дескрипторы вершин, но делают это для разных фреймворков. Вы можете использовать друг друга взаимозаменяемо, поскольку, если вы используете Model I / O, вы не обязательно используете Metal и наоборот. Итак, их два, так что фреймворки Apple не связаны тесно ни по какой причине, кроме сходства некоторых классов.
Ответ №1:
MDLVertexDescriptor
это интерфейс, который расположен в Model I / O framework.
MTLVertexDescriptor
это интерфейс, который расположен в Metal framework.
Несмотря на то, что оба они представляют собой схожую концепцию (описание того, как размещаются данные вершин), они должны быть разделены по следующим причинам.
Прежде всего, вы можете ссылаться на оба вышеупомянутых фреймворка, но от вас не требуется использовать ни один из них.
Допустим, мне нужно написать приложение, которое загружает модель и рисует ее, но я не хочу изучать Metal, поэтому я просто придерживаюсь OpenGL. И модель I / O framework соответствует моим потребностям. В этом случае я бы ссылался на Model I / O и OpenGL, но не на Metal, поэтому у меня не будет MTLVertexDescriptor
.
С другой стороны, допустим, мне нужно написать приложение, которое загружает, скажем, glTF 2.0 (https://www.khronos.org/gltf /) модель и поскольку я знаю, что OpenGL устарел от Apple, я хочу использовать Metal Framework. В этом случае я свяжусь с Metal framework и какой-нибудь другой библиотекой, которая может загружать файлы glTF, но мне не нужен модельный ввод-вывод, поскольку я использую glTF. Итак, в этом случае у меня не будет MDLVertexDescriptor
.
Оба интерфейса довольно похожи, поскольку они оба представляют одно и то же, но различия в некоторой степени зависят от домена.
Но, я думаю, основная причина, по которой это разные классы, заключается в том, что Apple решила, что внедрение схожих концепций в обе платформы лучше, чем просто разделение всех «похожих» концепций в одной платформе, потому что это было бы сложнее поддерживать, документировать и просто обходить.