为什么出现错误"The D3D device has a non-zero reference count"?

CSharp_XinBing1 2009-10-29 08:44:19
我使用DX9, DXUT框架。
我定义一个简单的类,
.h文件:
=================================================================

class CMyMesh01_One
{
public:
CMyMesh01_One(void);
~CMyMesh01_One(void);
public:
bool LoadMeshFromFile(char filename[], LPDIRECT3DDEVICE9 & pD3DDevice);
public:
LPDIRECT3DVERTEXDECLARATION9 m_pVD;
struct stctVertex
{
float x, y, z;
DWORD color;
};
};

=================================================================
.cpp文件:
=================================================================

#include "dxstdafx.h"
#include "MyMesh01_One.h"

CMyMesh01_One::CMyMesh01_One(void)
{m_pVD = NULL;}

CMyMesh01_One::~CMyMesh01_One(void)
{
if (m_pVD)
{
m_pVD->Release();
m_pVD = NULL;
}
}
bool CMyMesh01_One::LoadMeshFromFile(char filename[], LPDIRECT3DDEVICE9 & pD3DDevice)
{
//Vd
D3DVERTEXELEMENT9 decl[] = {
{0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
{0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0},
D3DDECL_END()
};

HRESULT hr;
V(hr = pD3DDevice->CreateVertexDeclaration(decl, &m_pVD));

return true;
}


================================================================================
之后我在主程序中声明
CMyMesh01_One g_clsMyMesh01_One;
并且在OnCreateDevice中调用
HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext )
{
g_clsMyMesh01_One.LoadMeshFromFile("C:\\test.txt", pd3dDevice);
return S_OK;
}

但关闭程序时提示The D3D device has a non-zero reference count, meaning some objects were not released.
为什么产生这样的错误呀?
...全文
2393 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
张赐 2009-10-29
  • 打赏
  • 举报
回复
所以使用的资源都要安全的释放,楼主好好检查一下
luoya263547560 2009-10-29
  • 打赏
  • 举报
回复
或者你把CMyMesh01_One类中的if (m_pVD)
{
m_pVD->Release();
m_pVD = NULL;
}
单独放到一个函数中,比如叫Destory,在主程序的OnDestory函数中,调用这个函数,进行释放资源。
我猜测上面的原因是:CMyMesh01_One 这个类的析构函数执行的较晚,执行时pd3dDevice已经被释放,所以出现资源没有完全释放的错误,只是个人猜测,仅供参考
luoya263547560 2009-10-29
  • 打赏
  • 举报
回复
你在主程序(WinMain)的Destory函数里(销毁函数)主动的调用一次CMyMesh01_One类的析构函数,注意在D3D环境指针释放之前调用,试试看
luoya263547560 2009-10-29
  • 打赏
  • 举报
回复
程序结束的时候D3D资源没有释放完毕,仔细检查一下

8,324

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧