DirectX 11:调用RSSetViewports传入多视口数组仅绘制单个视口的问题
D3D11多视口一次Draw仅渲染一个的原因
这是对D3D11视口机制的典型误解——RSSetViewports加载多个视口,并不等于一次Draw会自动在所有视口重复渲染,核心逻辑是这样的:
当你调用
RSSetViewports传入多个视口时,只是把这些视口数据存入渲染管线的视口数组中,管线不会主动遍历数组里的每个视口去执行绘制。默认情况下,一次Draw调用只会使用数组索引为0的视口,除非你在着色器里明确指定要输出到哪个视口索引。你之前每次设置单个视口再Draw的方式,本质是每次把目标视口设为数组的第0位,四次Draw对应四个不同的视口配置,所以能正常渲染四个位置。而一次设置四个视口后Draw,因为着色器没有指定
SV_ViewportArrayIndex语义,只会用索引0的视口,自然只出一个画面。
要让一次Draw输出到多个视口的解决办法
- 修改像素着色器,添加
SV_ViewportArrayIndex的输出语义,在着色器里为不同的像素(或图元)指定对应的视口索引;或者在几何着色器中生成多组图元,每组绑定不同的视口索引。 - 如果场景不复杂,继续用四次Draw的方式反而更简单,性能上的差异可以忽略不计。
内容的提问来源于stack exchange,提问作者IRP_HANDLER
相关产品推荐
相关产品推荐

