В моем приложении IOS, написанной в Swift, я генерировать металлический буфер:Могу ли я получить размер буфера из моего металлического шейдера?
vertexBuffer = device.newBufferWithBytes(vertices, length: vertices.count * sizeofValue(vertices[0]), options: nil)
и привязать его к моей шейдерной программе с:
renderCommandEncoder.setVertexBuffer(vertexBuffer, offset: 0, atIndex: 1)
В моей шейдерной программе, написанной в Metal затенения язык, могу ли я получить доступ к размеру буфера? Я хотел бы получить доступ к следующей вершине в моем буфере, чтобы выполнить дифференциальный расчет. Что-то вроде:
vertex float4 my_vertex(const device packed_float3* vertices [[buffer(1)]],
unsigned int vid[[vertex_id]]) {
float4 vertex = vertices[vid];
// Need to clamp this to not go beyond buffer,
// but how do I know the max value of vid?
float4 nextVertex = vertices[vid + 1];
float4 tangent = nextVertex - vertex;
// ...
}
Является ли мой единственный способ передать количество вершин в форме?
Это 'swift'? – Droppy
App в Swift. Shader in Metal shading language, который является подмножеством C++. – Hallgrim
Вам нужно отметить вопрос лучше. – Droppy