每个实例具有不同索引计数的 DrawIndexedInstanced (Directx11)
DrawIndexedInstanced with a different Index Count per Instance (Directx11)
我的应用程序中有很多情况,我使用具有不同统一值的相同着色器进行绘制调用,并考虑实例化绘制调用。然而,在我的例子中,绘制调用有不同数量的三角形。
据我了解DrawIndexedInstanced
,它只允许绘制具有相同数量triangles/indices的多个实例,所以我想我不能使用这个。
我认为 DrawIndexedInstancedIndirect
可能会有所帮助,但这似乎基本上只是对 DrawIndexedIstanced
执行多次调用。
在 Directx11 中有没有一种方法可以为每个实例绘制不同数量的三角形实例,或者我必须继续使用普通的绘制调用?
如documentation所述,实例图为
[...] reusing the same geometry to draw multiple objects in a scene.
它通过不交换顶点数据而是重用它来提高性能,这似乎不是您的数据的情况,其中每个绘制调用的顶点源都不同。
因此您必须坚持使用单个绘制调用,但要提高性能,您可以依次进行绘制调用。每个状态变化都有一定的成本被提交给 gpu,如果你保持你的着色器设置,因为它用于所有绘制调用,你可以通过使用相同的着色器和统一值在彼此之后并且只执行所有绘制调用来节省一些性能需要时切换。
我的应用程序中有很多情况,我使用具有不同统一值的相同着色器进行绘制调用,并考虑实例化绘制调用。然而,在我的例子中,绘制调用有不同数量的三角形。
据我了解DrawIndexedInstanced
,它只允许绘制具有相同数量triangles/indices的多个实例,所以我想我不能使用这个。
我认为 DrawIndexedInstancedIndirect
可能会有所帮助,但这似乎基本上只是对 DrawIndexedIstanced
执行多次调用。
在 Directx11 中有没有一种方法可以为每个实例绘制不同数量的三角形实例,或者我必须继续使用普通的绘制调用?
如documentation所述,实例图为
[...] reusing the same geometry to draw multiple objects in a scene.
它通过不交换顶点数据而是重用它来提高性能,这似乎不是您的数据的情况,其中每个绘制调用的顶点源都不同。
因此您必须坚持使用单个绘制调用,但要提高性能,您可以依次进行绘制调用。每个状态变化都有一定的成本被提交给 gpu,如果你保持你的着色器设置,因为它用于所有绘制调用,你可以通过使用相同的着色器和统一值在彼此之后并且只执行所有绘制调用来节省一些性能需要时切换。