我正在学习一些基础的金属渲染,但是我卡在了一些基本概念上:
我知道我们可以使用以下方式将顶点数据发送到着色器:
renderEncoder.setVertexBuffer(vertexBuffer, offset: 0, index: 0)
然后我们可以在着色器中使用以下代码检索它:
vertex float4 basic_vertex(const device VertexIn* vertexIn [[ buffer(0) ]], unsigned int vid [[ vertex_id ]])
据我所知,顶点函数将每个顶点调用一次,并且vertex_id将在每次调用时更新以包含顶点索引。
问题是,vertex_id从哪里来?
我可以发送更多不同大小的数据到着色器:
renderEncoder.setVertexBuffer(vertexBuffer, offset: 0, index: 0)
renderEncoder.setVertexBuffer(vertexBuffer2, offset: 0, index: 1)
如果vertexBuffer有3个元素,而vertexBuffer2有10个元素...那么vertex函数会被调用多少次?是10次吗?
谢谢!