DirectX:如果绑定索引缓冲区但不绑定顶点缓冲区会发生什么?

时间:2017-06-10 17:40:36

标签: c++ directx hlsl

假设您有一个非空索引缓冲区,但没有顶点缓冲区。

当您绑定包含不存在的索引的索引缓冲区时(因为没有顶点缓冲区),它会为您创建这些顶点还是忽略所有无效索引?

在您的顶点着色器中,您可以计算索引顶点的所有位置,以便您实际在屏幕上看到某些内容。

这可能吗?

1 个答案:

答案 0 :(得分:3)

允许使用不带任何顶点缓冲区边界的索引缓冲区执行绘制,但是只允许两个语义作为顶点着色器的输入:

SV_VertexID和SV_InstanceID(参见SV语义here

任何其他输入都将其值设置为0

我经常使用的一个用例是使用StructuredBuffers作为顶点缓冲区(在Compute Shader中处理顶点),并根据(迷你)示例手动完成提取:

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着色器后,索引缓冲区将使用顶点索引来形成拓扑设置的基元。