|
|
我将load .x文件作为一个类,定义如下:
class CLoadData
{
public:
CLoadData();
virtual ~CLoadData();
HRESULT InitDeviceObjects(LPDIRECT3DDEVICE9 m_pd3dDevice,LPSTR pFilename);
void Render(LPDIRECT3DDEVICE9 m_pd3dDevice);
void DeleteDeviceObjects();//释放资源
private:
LPD3DXPMESH m_pPMeshFull;
D3DMATERIAL9* m_mtrlMeshMaterials;
LPDIRECT3DTEXTURE9* m_pMeshTextures;
DWORD m_dwNumMaterials;
};
然后每当用户选中了x文件(在一个列表中列出了很多的x文件)后我就定义 CLoadData m_pExternMesh;再调用m_pExternMesh.InitDeviceObjects(m_pExternDevice,“tiger.x”)
然后将该内容保存在数组list后再render,之后当用户选中了其他x文件后又用m_pExternMesh重新初始化,m_pExternMesh.InitDeviceObjects(m_pExternDevice,“arraw.x”)
这样就出一个很矛盾的问题了,因为原先tiger的资源(texture)没有释放掉,所以程序退出后就会弹出D3D接口没有释放的错误
但如果我先调用DeleteDeviceObjects()删除掉tiger创建的资源再初始化,则render tiger时就出错了(出错的原因是因为那些资源是指针,保存在list数组中的指针所指向的内容没有了,所以出错)
头疼啊,有什么好的办法解决这个问题吗? |
|