1

我想在 SlimDX Direct3d9 设备中设置状态。

我在 frameRender 函数开始时就有那个代码。

        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:

我得到了数百万行。他们都说同样的话。我应该如何处理这些状态?如何以正确的方式制作它?

4

1 回答 1

1

根据您的信息,我能给您的唯一提示是 EndStackeBlock 应该返回一个 StateBlock 对象,该对象是一次性的。我的猜测是,你在 LostDevice 事件之后得到这些?在重置设备之前,您需要释放所有这些资源。当然,制作 StateBlocks 的全部原因是您创建一次并重复使用它们,但似乎您每次都在重新创建它们而从不应用它们。因此,一段时间后,您创建了许多状态块,而没有使用或处置其中任何一个。但也许您可以发布更多代码或提供更多信息。

于 2011-09-26T23:45:22.990 回答