Directx 11 - 是来自顶点缓冲区的所有顶点都推送到顶点着色器还是只是索引的顶点?

Posted

技术标签:

【中文标题】Directx 11 - 是来自顶点缓冲区的所有顶点都推送到顶点着色器还是只是索引的顶点?【英文标题】:Directx 11 - Are all Vertices from a vertex buffer pushed through to the vertex shader or just indexed ones? 【发布时间】:2018-03-17 14:06:07 【问题描述】:

在 Directx 11 中设置顶点和索引缓冲区时

_pImmediateContext->IASetVertexBuffers(0, 1, &_pVertexBuffer, &stride, &offset);
_pImmediateContext->IASetIndexBuffer(_pIndexBuffer, DXGI_FORMAT_R32_UINT, 0);

是顶点缓冲区中的所有顶点都通过图形管道还是只通过索引缓冲区索引的顶点?

【问题讨论】:

【参考方案1】:

简而言之,只有索引引用的顶点被推送通过管道。由于管道顶点上下文是在顶点着色器中生成的(顶点由索引标识并读入)。此外,因为您使用的是索引,所以缓存效率更高,因为管道使用索引作为缓存的引用,因此它不必处理相同的顶点两次(除非发生缓存未命中)。

因此,索引网格在性能上优于非索引(如果索引不是 1 对 1 映射)。

【讨论】:

以上是关于Directx 11 - 是来自顶点缓冲区的所有顶点都推送到顶点着色器还是只是索引的顶点?的主要内容,如果未能解决你的问题,请参考以下文章

C++ DirectX 11 从第二个顶点缓冲区渲染问题

使用 DirectX11 更新非 UI 线程中的顶点缓冲区

将 FBX 顶点和索引缓冲区导入 DirectX 11

DirectX 11 中是不是可以有 SoA 顶点缓冲区?

DirectX 大型模型 > 64k C++

在 DirectX 11 中使用索引缓冲区;它是怎么知道的?