DX11 常量缓冲区持久性

DX11 Constant buffer persistence

使用 DirectX 11 和 Effect 11,我试图了解如何使用不同的着色器有效地绘制两个对象。所以首先我设置所有状态并一次性设置常量缓冲区。在遍历第一个对象的所有网格时,所有先前设置的常量缓冲区都保持可用,如您所见,这很好 here.

然后我应用另一个通道(来自效果 11 的 Pass.Apply())来绘制第二个对象。在这一点上,我所有的常量缓冲区都是 destroyed as shown there.

所以现在我开始怀疑常量缓冲区是否不能在应用程序启动时一劳永逸地设置一次,然后在任何着色器中随时 used/shared。还是只属于活动着色器?

谢谢!

如果我记得,如果你执行不同的效果,那么你将不得不将常量缓冲区重新关联到舞台(这也可能取决于驱动程序)。只有在不更改着色器状态的情况下,才应该重用相同的常量缓冲区。

为了安全起见,不同的通道基本上绑定了一组新的着色器(如果它们不同的话)。最佳做法是绑定资源(缓冲区),每次执行不同的效果传递。

我个人已经远离 Effects,因为它已被弃用,我还发现明确理解我绑定到管道的内容有助于我理解常量缓冲区的使用。

缓冲区不应该被销毁,它应该在第二次调用时解除绑定 - 否则你会发生更邪恶的事情。