Direct3D использует методы подсчета ссылок (с помощью AddRef
и Release
) для управления временем жизни объекта, с некоторыми специфическими особенностями, поскольку он не соответствует всем правилам общей модели объектных компонентов ( COM * 1004).*).
В частности, если ссылка only на объект есть, если вы используете установить его в контексте устройства (он же привязывает его к конвейеру рендеринга), этого недостаточно, чтобы сохранить егоживой, потому что эти методы не увеличивают / уменьшают счетчик ссылок.См. Документы Microsoft .Поэтому вашей программе необходимо сохранять некоторые другие ссылки на объекты Direct3D, которые она использует в данный момент.
Другое отличие состоит в том, что если ID3D11Device
уничтожен, поскольку его счетчик ссылок достигает нуля, то не имеет значения, чтоподсчет ссылок для всех его объектов ID3D11DeviceChild
, и все они недопустимы в этой точке.
Вы также должны помнить, что объекты Direct3D фактически не уничтожаются до некоторой будущей точки (иначе говоря, она использует lazy-destroying)так что даже если счетчик ссылок равен нулю, может потребоваться несколько кадров, прежде чем он будет полностью очищен.Это в основном имеет значение, если вы имеете дело с большим количеством активных ресурсов и вам нужно беспокоиться о чрезмерной фиксации - кроме того, вы можете принудительно завершить ожидающие разрушения, используя ID3D11DeviceContext::Flush
, но это не очень хорошая практика для повышения производительности.это часто.
TL; DR: Объект ID3D11ShaderResourceView
добавил счетчик ссылок к объекту ID3D11Resource
, на который есть ссылка, поэтому, пока SRV активен, ресурс сохраняется какЧто ж.Вам нужно только взять один из возвращаемых объектов CreateWICTextureFromFile
, но вы можете взять оба, если хотите.См. Страницу wiki для модуля WICTextureLoader для получения дополнительной информации.
Это хороший повод научиться использовать умный указатель ComPtr .Он учитывает количество ссылок, если вы используете его правильно, поэтому в большинстве случаев вы можете не беспокоиться об этом.