Вот некоторые особенности:
- Автоматически созданные IDirect3DDevice9 ресурсы (BackBuffer, автоматически созданный depth-stencil surface, основной SwapChain) нельзя удалить, т.е. Release() можно вызывать хоть до бесконечности он будет возвращать кол-во ссылок 0 и не удалит ресурс.
- Само устройство не увеличивает кол-во ссылок на автоматически созданные ресурсы.
- Пока ресурс забинджен в устройство (с помощью SetTexture, SetRenderTarget или SetDepthStencilSurface) его нельзя удалить, при попытке удалить его счетчик ссылок не будет опускать ниже 0. После того устройство освободит ресурс если кол-во ссылок ресурса равно нулю он будет удален.
- У текстуры и её поверхностей общий счетчик ссылок.
2 комментария:
А зачем создавать враппер тем более на Direct3D8? В качестве враппера можно использовать Direct3D11 и feature levels :)
Полный враппер обычно нужен для других целей, при создание различных утилит наподобие Microsoft PIX, NVidia PerfHUD или наш iZ3D стереодрайвер. Чтобы перехватив вызов создания D3D устройства, вернуть игре вместо оригинального устройства наш враппер.
Отправить комментарий