Использование шага по металлу аналогично openGL - PullRequest
0 голосов
/ 11 октября 2018

У меня есть буфер и вершины имеют шаг.Как мне указать это в металле?Я не могу найти ни одного примера.Спасибо!

1 Ответ

0 голосов
/ 11 октября 2018

Извлечение MTLVertexBufferLayoutDescriptor , который является частью MTLRenderPipelineDescriptor.Он имеет элемент stride.

Ниже приведен пример настройки трех атрибутов вершины, хранящихся в одном буфере вершин с чередованием.stride устанавливается рядом с окончанием: vertexDescriptor.layouts[0].stride = 32;

MTLRenderPipelineDescriptor *pipelineDescriptor = [[MTLRenderPipelineDescriptor alloc] init];

MTLVertexDescriptor *vertexDescriptor = [MTLVertexDescriptor vertexDescriptor];
vertexDescriptor.attributes[0].offset = 0;
vertexDescriptor.attributes[0].format = MTLVertexFormatFloat3; // position
vertexDescriptor.attributes[0].bufferIndex = 0;
vertexDescriptor.attributes[1].offset = 12;
vertexDescriptor.attributes[1].format = MTLVertexFormatFloat3; // normal
vertexDescriptor.attributes[1].bufferIndex = 0;
vertexDescriptor.attributes[2].offset = 24;
vertexDescriptor.attributes[2].format = MTLVertexFormatFloat2; // texCoords
vertexDescriptor.attributes[2].bufferIndex = 0;

vertexDescriptor.layouts[0].stepRate = 1;
vertexDescriptor.layouts[0].stepFunction = MTLVertexStepFunctionPerVertex;
vertexDescriptor.layouts[0].stride = 32;

pipelineDescriptor.vertexDescriptor = vertexDescriptor;
...