首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

使用Render Target,结束程序后会出现non-zero reference count提示。该怎么处理

2012-03-07 
使用Render Target,结束程序后会出现non-zero reference count提示。就是有东西没有释放完全。但我使用Rende

使用Render Target,结束程序后会出现non-zero reference count提示。
就是有东西没有释放完全。
但我使用Render Target时,定义了一个类TRT,其中只有三个成员变量。
LPDIRECT3DTEXTURE9 m_lpTexRT; //Render Target Texture
LPDIRECT3DSURFACE9 m_lpSurfRT; //Render Target Surface
LPDIRECT3DSURFACE9 m_lpSurfBk; //备份原来的Render Target
并且在类函数ReleaseRT中,三个都进行了SAFE_RELEASE。这个ReleaseRT在
主程序中的OnDestroyDevice中显式调用了。

我发现,我在主程序中加入SetRT与RestoreRT之后,结束程序提示non-zero错误,我想
就应该发生在这二个函数中吧?

下面是类代码,很简单的,请高手看一下,指点错误!谢谢!

C/C++ code
#include "dxstdafx.h"#include "TRT.h"#include "TOD.h"TRT::TRT(void){    m_lpTexRT = NULL;    m_lpSurfRT = NULL;    m_lpSurfBk = NULL;}TRT::~TRT(void){}bool TRT::CreateRT(LPDIRECT3DDEVICE9 pd3dDev, UINT nWid, UINT nHgt){    HRESULT hr = D3DXCreateTexture(pd3dDev, nWid, nHgt, 1,         D3DUSAGE_RENDERTARGET, D3DFMT_R8G8B8, D3DPOOL_DEFAULT, &m_lpTexRT);//    HRESULT hr = pd3dDev->CreateTexture(nWid, nHgt, 1, //        D3DUSAGE_RENDERTARGET, D3DFMT_R8G8B8, D3DPOOL_DEFAULT, &m_lpTexRT, NULL);    if (FAILED(hr))    {        tod.O("Error, CreateTexture-RTarget\r\n");    }    hr = m_lpTexRT->GetSurfaceLevel(0, &m_lpSurfRT);    return true;}bool TRT::SetRT(LPDIRECT3DDEVICE9 pd3dDev){    HRESULT hr = pd3dDev->GetRenderTarget(0, &m_lpSurfBk);    hr = pd3dDev->SetRenderTarget(0, m_lpSurfRT);    V(pd3dDev->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(0, 45, 50, 170), 1.0f, 0) );    V(pd3dDev->BeginScene());    return true;}bool TRT::RestoreRT(LPDIRECT3DDEVICE9 pd3dDev){    HRESULT hr;    V(pd3dDev->EndScene());    V(pd3dDev->SetRenderTarget(0, m_lpSurfBk));    return true;}bool TRT::ReleaseRT(){    SAFE_RELEASE(m_lpSurfRT);    SAFE_RELEASE(m_lpSurfBk);    SAFE_RELEASE(m_lpTexRT);    return true;}bool TRT::SaveRT(){    HRESULT hr;    V(D3DXSaveSurfaceToFileA("RT.jpg", D3DXIFF_JPG, m_lpSurfRT, NULL, NULL));    return true;}


[解决办法]
lz给你点建议
建议你在debug下单步调试一下 看一下到底是哪个语句的错误 这样你会更好找一点
另外在你render target的时候 你应该把zbuffer也取出来 然后再赋回去的 

[解决办法]
释放之前判断一下是不是为NULL
[解决办法]
设置了新RT之后,要把原RT也释放掉
[解决办法]
你设置之前肯定要保存原RT啊,等下次恢复了就要把保存的RT放掉

热点排行