c++ - DirectX:如果绑定(bind)索引缓冲区而不绑定(bind)顶点缓冲区会发生什么?

标签 c++ directx hlsl

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

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

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

这可能吗?

最佳答案

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

SV_VertexID 和 SV_InstanceID(请参阅 SV 语义 here)

任何其他输入都会将其值设置为 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 按程序生成位置。

一旦顶点着色器完成,顶点索引将被索引缓冲区消耗以形成由拓扑设置的图元。

关于c++ - DirectX:如果绑定(bind)索引缓冲区而不绑定(bind)顶点缓冲区会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44476248/

相关文章:

c++ - 以编程方式创建和签署公钥/私钥对

c++ - 如何根据变量值惯用地调用 C++ 函数?

c++ - 无法编译简单的 Bullet Physics 应用程序

windows - ID2D1Bitmap 和 IWicBitmap 之间的区别

directx - 常量缓冲区和只读结构化缓冲区有什么区别?

c++ - 无法编译 HLSL Hull 着色器代码

c++ - Haar级联opencv后跟踪对象

c++ - DirectX 11 文件无法打开源文件

C++ - LNK2019 未解析的外部符号 - 似乎找不到我缺少的东西

optimization - HLSL 分支规避