游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1434|回复: 3

大家来看看这个load .x 文件的问题,郁闷啊

[复制链接]

20

主题

70

帖子

78

积分

注册会员

Rank: 2

积分
78
发表于 2004-10-11 18:24:00 | 显示全部楼层 |阅读模式
我将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数组中的指针所指向的内容没有了,所以出错)

头疼啊,有什么好的办法解决这个问题吗?

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2004-10-11 22:58:00 | 显示全部楼层

Re:大家来看看这个load .x 文件的问题,郁闷啊

你是将每个m_pExternMesh作为一个指针存在list中吗?另外,private中的贴图没有必要作为指向指针的指针呀!(LPDIRECT3DTEXTURE9本身就是一个指针呀!)

20

主题

70

帖子

78

积分

注册会员

Rank: 2

积分
78
 楼主| 发表于 2004-10-12 10:39:00 | 显示全部楼层

Re:大家来看看这个load .x 文件的问题,郁闷啊

不,m_pExternMesh不是指针,是这样定义的 CLoadData  m_pExternMesh
然后list中存放的是m_pExternMesh的内容不是地址

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2004-10-12 20:30:00 | 显示全部楼层

Re:大家来看看这个load .x 文件的问题,郁闷啊

我想可以将m_pExternMesh定义成CLoadData *m_pExternMesh;每次用m_pExternMesh = new CLoadData();然后m_pExternMesh->InitDeviceObjects(m_pExternDevice,“tiger.x”);将m_pExternMesh装进list中,然后下次有新文件了,就m_pExternMesh = new CLoadData(),再m_pExternMesh->InitDeviceObjects(m_pExternDevice,“arraw.x”);直到你不需要list是,遍历list,调用每个元素的DeleteDeviceObjects(),再将这个节点删除。
另外:我不明白你为什么m_pMeshTextures用指向指针的指针?
如果有时间,今晚我将自己的做法试验一下!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-22 17:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表