【ゲーム制作】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()は空打ちのようでかっこ悪いのですが、代替え案もないので
修正はこれで行こうと思います。