Возможны ли вершинные буферы длины Dynami c с атрибутами вершин Dynami c в металле? - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь создать и передать динамический c буфер вершин в мой вершинный шейдер в металле.

Согласно документам:

https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/MTLBestPracticesGuide/BufferBindings.html

Это возможно, однако, при считывании данных в шейдер с использованием любого из этих трех методов:

{ ссылка }

It кажется, что металл может принимать только атрибуты вершин фиксированной длины.

Я знаю, что если бы можно было передавать данные вершин динамических c, данные должны были бы быть разбиты на числа с плавающей точкой или числа с плавающей точкой4, так как это самый большой доступный тип (см. https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf#page = 18 ), и язык затенения не поддерживает динамические c векторы, но есть ли способ динамически изменить количество этих float4, содержащихся в буфере?

В конечном итоге я пытаюсь поддерживать следующий формат вершин:

struct Vertex {
    var x,y,z: f1        //position
    var s,t: f1          //texture mapping
    var nX,nY,nZ: f1     //normal

    var boneWeight: [f1] = []

    func floatBuffer() -> [f1] { return [x,y,z,nX,nY,nZ,s,t] + boneWeight }
}

, в котором boneWeight является массивом типа Float, размер которого зависит от количества костей в арматуре объектов.

...