在我的iOS应用程序中,使用Swift编写,我使用以下代码生成Metal缓冲区:
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;
// ...
}
我的唯一选择是将顶点数量作为一个uniform传递吗?