DirectX 11技术问询:顶点缓冲区顶点是否全进管线还是仅索引顶点?
DirectX 11 顶点缓冲区与索引缓冲区的管线流转疑问解答
嘿,我来帮你理清这两个DirectX 11里的常见疑问——其实这也是很多刚接触索引绘制的开发者容易搞混的点,当年我入门的时候也纠结过好一阵:
疑问一:顶点缓冲区中的所有顶点都会进入图形管线,还是仅索引缓冲区所索引的顶点会进入?
- 答案很明确:只有索引缓冲区中指定的顶点才会进入图形管线。
- 当你用
IASetIndexBuffer设置好索引缓冲区后,后续的绘制调用(比如DrawIndexed、DrawIndexedInstanced这类函数)会完全按照索引缓冲区里的索引值,去顶点缓冲区中拉取对应的顶点数据。那些没被任何索引指向的顶点,根本不会被输入装配阶段(IA阶段)选中,自然也不会进入后续的管线流程(比如顶点着色器、光栅化这些阶段)。
疑问二:顶点缓冲区中的所有顶点都会被传入顶点着色器,还是仅索引对应的顶点会被传入?
- 和上面的逻辑完全一致:只有索引对应的顶点才会被传入顶点着色器。
- 顶点着色器是逐顶点处理的,而它接收的顶点数据完全来自输入装配阶段——IA阶段只会把索引指向的顶点数据打包传递给VS。没被索引到的顶点,连IA这一关都过不了,更别说被VS处理了。
- 补充个实用小细节:如果同一个索引被多次引用(比如绘制共享顶点的网格模型),默认情况下对应的顶点会被多次传入VS。不过部分驱动会开启顶点缓存优化,避免重复处理完全相同的顶点,但这是驱动层面的自动优化,从DirectX API的逻辑上来说,每一次索引引用都会触发一次VS调用。
内容的提问来源于stack exchange,提问作者Liam Donnelly
相关产品推荐
相关产品推荐

