【ゲーム制作】No.5: OMSetRenderTargets()のワーニング

一応環境マッピングの作成はちゃんと進んでいるのですが

以下のワーニングが出て作業が止まっている状態です。

 

D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets: Resource being set to OM DepthStencil is still bound on input! [ STATE_SETTING WARNING #9: DEVICE_OMSETRENDERTARGETS_HAZARD]

D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets[AndUnorderedAccessViews]: Forcing PS shader resource slot 0 to NULL. [ STATE_SETTING WARNING #7: DEVICE_PSSETSHADERRESOURCES_HAZARD]

 

レンダーターゲットやデブスステンシルに設定したリソースが

シェーダーリソースとして使われてもいて衝突してるよ!ってことなんでしょうが

リソースは使い終わったらちゃんとリリースしているんですよね・・

わからない・・もうDirect3D嫌いです・・

 

その後調査を続けた結果、原因がわかったっぽいです。

私はEffect11をDirect3D11の管理に使用しているのですが、リソースの解放手続きに

不足がありちゃんと解放されていませんでした。

テクスチャを例にとると、

 

    ID3DX11EffectShaderResourceVariable*        m_h_texture;

    ....

    // Effect11オブジェクトにテクスチャを登録する

    //(この時点ではdirect3Dオブジェクトには登録されていない)

    m_h_texture->SetResource(m_p_srv_diffuse_map);

 

    ID3DX11EffectTechnique* h_tech = m_h_technique;
    D3DX11_TECHNIQUE_DESC    tech_desc;
    h_tech->GetDesc(&tech_desc);
     for (uint_t p = 0; p < tech_desc.Passes; ++p)
     {
            // このApply()によってテクスチャがdirect3Dオブジェクトに登録される                            h_tech->GetPassByIndex(p)->Apply(0, device_context);

            ~メッシュを描画する~
     }

     // Effect11オブジェクトからテクスチャを解放する

    //(この時点ではテクスチャはdirect3Dオブジェクトに登録されたまま

    // 今まではここまでしかやっていなかった

     m_h_texture->SetResource(NULL); 

                                                               

    // direct3Dオブジェクトから解放する為にはこのコードが必要だった

    h_tech->GetPassByIndex(0)->Apply(0, device_context); 

 

最後のApply()は空打ちのようでかっこ悪いのですが、代替え案もないので

修正はこれで行こうと思います。