У меня нет возможности установить DirectX SDK atm для проверки этого, но, в целом, когда дело доходит до COM, вы должны следовать правилам COM и полагать, что другие объекты также следуют правилам.
т.е. вы не должны знать о реализации Texture2D, но вы должны верить, что, если ему понадобится добавить ссылки на устройство, он также удалит их, когда это будет сделано.Вы не должны пытаться делать дополнительные вызовы Release ().
Ваш код должен выглядеть следующим образом:
ID3D10Texture2D *depthStencilBuffer = NULL;
if(FAILED(hr = m_device->CreateTexture2D( &descDepth, NULL, &depthStencilBuffer ))) {
DXGI_D3D10_ErrorExit(hr, L"CreateTexture2D");
return hr;
}
depthStencilBuffer->Release();
depthStencilBuffer = NULL;
, то есть вы должны ожидать, что вызов вернет texture2d со счетчиком ссылок1, это все, что вам нужно знать.Когда вы закончите, вы должны вызывать release только для deepStencilBuffer и ожидать, что он полностью очистится.Если во время реализации буфера трафарета нужны ссылки на устройство, вы должны верить, что он также правильно вызовет release для этих ссылок.