Проблема возникла, когда я попытался выполнить упражнение 4 в главе 12 «Введение в программирование трехмерных игр с помощью DirectX 11.» В своем коде я попытался привязать SRV текстуры к Texture2D
в .fx * 1003.* кодПосле этого я использовал:
Effects::BasicFX->SetDiffuseMap(NULL);
, чтобы развязать ресурс, но, похоже, он не справился с работой.Я должен был добавить:
ID3D11ShaderResourceView* srvs[] = { NULL };
dc->PSSetShaderResources(0, 1, srvs);
или вывод отладки продолжал предупреждать меня следующим образом:
D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets: Resource being set to OM RenderTarget slot 0 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]
Эта ситуация также произошла, когда я работал с Compute Shader.Мне пришлось использовать:
ID3D11UnorderedAccessView* uavs[] = { NULL };
UINT initCounts[] = { -1 };
dc->CSSetUnorderedAccessViews(0, 1, uavs, initCounts);
ID3D11ShaderResourceView* srvs[] = { NULL };
dc->CSSetShaderResources(0, 1, srvs);
, чтобы отменить привязку Texture2D
и RWTexture2D
в моем коде шейдера вместо того, чтобы просто использовать ID3DX11EffectShaderResourceVariable::SetResource(NULL)
и ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessView(NULL)
.
Может кто-нибудь сказать, чтоможет быть не так с моим кодом или подтвердить эту проблему?