使用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错误,我想
就应该发生在这二个函数中吧?
下面是类代码,很简单的,请高手看一下,指点错误!谢谢!
#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;}