Direct3D 11 - HLSL - 获取顶点索引ID

3
在Direct3D 11中,我有一个为多个三角形使用的顶点。换句话说,同一顶点被多个索引引用。 在我的HLSL顶点着色器中,我想知道正在处理哪个INDEX。是否有一种方法可以做到这一点? 类似于HLSL语义“SV_VertexID”或“SV_PrimitiveID”,但针对当前索引? 要明确,假设索引缓冲区为: Index[3]={10,11,12}; 使用ID3D11DeviceContext::DrawIndexed()函数的SV_VertexID将返回10、11和12。 但我需要0、1、2。 顶点着色器中的计数器从0开始,并在每次调用顶点着色器时递增,这也是有帮助的。每帧,该计数器应该重置为0。这可能吗? 谢谢。
1个回答

1
我认为这是不可能的。按定义,顶点着色器是针对每个顶点而非每个索引运行的。因此,如果两个三角形共享一个顶点,则该顶点着色器仅有很小的机会运行两次。当索引第二次提取此顶点时,顶点着色器的结果将从缓存(“后变换缓存”)中提取而非重新运行着色器。
但您可以将所有顶点都设置为唯一。然后您就不需要索引缓冲区,而SV_VertexID基本上就是索引ID(尽管这需要更多内存)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接