假设您有一个非空的索引缓冲区,但没有顶点缓冲区。
当您绑定此包含不存在的索引的索引缓冲区时(因为没有顶点缓冲区(,它会为您创建这些顶点还是会忽略所有无效索引?
在顶点着色器中,您可以计算索引顶点的所有位置,以便您实际在屏幕上看到某些内容。
这可能吗?
允许使用没有任何顶点缓冲区边界的索引缓冲区执行绘制,但只允许将两种语义作为顶点着色器的输入:
SV_VertexID和SV_InstanceID(在此处查看 SV 语义(
任何其他输入的值都将设置为 0
我经常遇到的一个用例是使用 StructuredBuffers 作为顶点缓冲区(在计算着色器中处理顶点(,并根据此处的(迷你(示例手动完成获取:
StructuredBuffer<float3> sbPosition : register(t0);
void VS(uint iv : SV_VertexID, out float4 posScreen : SV_Position)
{
//Fetch vertex
float3 p = sbPosition[iv];
posScreen = // mul p by world view projection
}
在另一种情况下,您还可以根据顶点 ID 程序化地生成仓位。
vetex 着色器完成后,索引缓冲区将使用顶点索引以形成拓扑设置的基元(。