SlimDX - 设置状态块
问题描述:
我想在SlimDX Direct3d9设备中设置状态。SlimDX - 设置状态块
我有在frameRender函数beging的代码。
device.BeginStateBlock();
device.SetRenderState(RenderState.ZEnable, false);
device.SetRenderState(RenderState.Lighting, false);
device.SetRenderState(RenderState.CullMode, Cull.None);
device.EndStateBlock();
但我发现了这个错误在调试窗口:
Object of type SlimDX.Direct3D9.StateBlock was not disposed. Stack trace of object creation:
我得到数以百万计的线。他们都说同样的事情。 我应该如何处理这些状态?如何正确使用它?
答
根据你的信息,我可以给你的唯一提示就是EndStackeBlock应该返回一个StateBlock对象,它是一次性的。我的猜测是,你在LostDevice事件后得到这些信息?在重置设备之前,您需要释放所有这些资源。 当然,制作StateBlocks的全部原因是让你创建一次并重用它们,但似乎你每次都在重新创建它们,并且从不应用它们。因此,过了一段时间,您创建了很多状态块,而不使用或丢弃它们中的任何一个。 但也许你可以发布更多的代码或提供更多信息。
那么我应该如何使用它们?在哪里创建它们以及如何应用它们?我应该把它们应用到每一帧?我应该每帧处理它们吗? – Hooch
我不得不说,我不是那方面的专家,所以我可以或多或少地猜测。我会在应用程序的开始部分创建一个状态块,一个用于您需要的每个独特的状态块。然后,您可以使用Apply方法来使用该块,绘制该块需要绘制的所有内容。请记住,directx是一种状态机,一旦设置它保持设置,除非未设置或其他设置。在丢失设备并且您想要重置或关闭应用程序时,应该在另一方面进行处置。不幸的是,这就是我所能说的,我会试试这种方式。 – dowhilefor