2011-09-26 18 views
1

SlimDX Direct3d9デバイスに状態を設定したい。SlimDX - 状態ブロックを設定する

私はframeRender関数のビギニングでそのコードを持っています。私はそれらの何百万行を取得してい

Object of type SlimDX.Direct3D9.StateBlock was not disposed. Stack trace of object creation: 

 device.BeginStateBlock(); 
     device.SetRenderState(RenderState.ZEnable, false); 
     device.SetRenderState(RenderState.Lighting, false); 
     device.SetRenderState(RenderState.CullMode, Cull.None);    
     device.EndStateBlock(); 

しかし、私は、デバッグウィンドウで、このエラーを取得しています。彼らのすべては同じことを言う。 これらの州をどのように処分すればよいですか?どのように適切な方法でそれを作る?

答えて

1

あなたの情報があれば、EndStackBlockは使い捨てのStateBlockオブジェクトを返さなければならないという唯一のヒントはあります。私の推測では、あなたはLostDeviceイベントの後にこれらを手に入れますか?デバイスをリセットする前に、すべてのリソースを解放する必要があります。 もちろん、StateBlocksを作る理由は、それらを一度作成して再利用するということですが、毎回それらを再作成し、それらを適用しないようです。だからしばらくして、あなたはそれらのどれを使っても処分しなくても、たくさんの州のブロックを作りました。 しかし、もっとコードを投稿したり、より多くの情報を提供することができます。

+0

どうすれば使用できますか?どこにcreatethemとそれらを適用する方法?私はそれらをフレームごとに適用しますか?私はそれらをフレームごとに処分すべきですか? – Hooch

+1

私はその地域の専門家ではないと言わなければならないので、私は多かれ少なかれ推測することができます。あなたが必要とするユニークな状態ブロックごとに1つずつ、あなたのアプリケーションの始めに状態ブロックを作成します。次に、Applyメソッドを使用してブロックを使用し、そのブロックで描画する必要があるすべてを描画します。 DirectXは、設定されていないか、または何か他のものが設定されていない限り、設定された状態のマスキンであることに注意してください。それ以外の処理は、デバイスを紛失したときにリセットするか、アプリケーションをシャットダウンするときに実行してください。残念ながら、これは私が言うことができるすべてであり、私はそれをそのように試みるでしょう。 – dowhilefor

関連する問題