Every mesh is associated with a device. The device must live for at least as long as the Mesh.
When you release the mesh with pMesh->Release()
, on the final release, the mesh will be destroyed. When that happens, the Mesh will in turn call Release()
on the device. This ensures that as long as there is a Mesh, the device will still exist.
That is how it is supposed to work, regardless of whether system or device memory is used.
A mesh is not just a bunch of triangles - it is a bunch of triangles which are pre-calculated, tweaked, cached, and optimised for display on a particular device. That's why they have a reference to the device - it's the device they are optimised for. You can't just move them to another device.
Bottom Line: The reference count must be the correct reference count - it should be the count of references to the object. Since each Mesh has a reference to the object, it is correct that the reference count should increase when you create a mesh, and reduce when you destroy one.
If you "Control" the reference count, the result will be that it will be incorrect, and Bad Things will happen.