mirror of https://github.com/PCSX2/pcsx2.git
GSdx: fixing the (texture) memory leak
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1464 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
4c76909afe
commit
6eed14ae75
|
@ -34,6 +34,13 @@ GSDevice::GSDevice()
|
||||||
|
|
||||||
GSDevice::~GSDevice()
|
GSDevice::~GSDevice()
|
||||||
{
|
{
|
||||||
|
for_each(m_pool.begin(), m_pool.end(), delete_object());
|
||||||
|
|
||||||
|
delete m_backbuffer;
|
||||||
|
delete m_merge;
|
||||||
|
delete m_weavebob;
|
||||||
|
delete m_blend;
|
||||||
|
delete m_1x1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GSDevice::Create(GSWnd* wnd, bool vsync)
|
bool GSDevice::Create(GSWnd* wnd, bool vsync)
|
||||||
|
@ -46,10 +53,7 @@ bool GSDevice::Create(GSWnd* wnd, bool vsync)
|
||||||
|
|
||||||
bool GSDevice::Reset(int w, int h, int mode)
|
bool GSDevice::Reset(int w, int h, int mode)
|
||||||
{
|
{
|
||||||
for(list<GSTexture*>::iterator i = m_pool.begin(); i != m_pool.end(); i++)
|
for_each(m_pool.begin(), m_pool.end(), delete_object());
|
||||||
{
|
|
||||||
delete *i;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_pool.clear();
|
m_pool.clear();
|
||||||
|
|
||||||
|
|
|
@ -66,10 +66,7 @@ public:
|
||||||
|
|
||||||
virtual ~GSFunctionMap()
|
virtual ~GSFunctionMap()
|
||||||
{
|
{
|
||||||
for(hash_map<KEY, ActivePtr*>::iterator i = m_map_active.begin(); i != m_map_active.end(); i++)
|
for_each(m_map_active.begin(), m_map_active.end(), delete_second());
|
||||||
{
|
|
||||||
delete i->second;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE operator [] (KEY key)
|
VALUE operator [] (KEY key)
|
||||||
|
@ -177,10 +174,7 @@ public:
|
||||||
|
|
||||||
virtual ~GSCodeGeneratorFunctionMap()
|
virtual ~GSCodeGeneratorFunctionMap()
|
||||||
{
|
{
|
||||||
for(hash_map<uint64, CG*>::iterator i = m_cgmap.begin(); i != m_cgmap.end(); i++)
|
for_each(m_cgmap.begin(), m_cgmap.end(), delete_second());
|
||||||
{
|
|
||||||
delete i->second;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE GetDefaultFunction(KEY key)
|
VALUE GetDefaultFunction(KEY key)
|
||||||
|
|
|
@ -883,10 +883,7 @@ GSRasterizerList::~GSRasterizerList()
|
||||||
|
|
||||||
void GSRasterizerList::FreeRasterizers()
|
void GSRasterizerList::FreeRasterizers()
|
||||||
{
|
{
|
||||||
for(list<IRasterizer*>::iterator i = begin(); i != end(); i++)
|
for_each(begin(), end(), delete_object());
|
||||||
{
|
|
||||||
delete *i;
|
|
||||||
}
|
|
||||||
|
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,8 +87,6 @@ GSState::GSState(uint8* base, bool mt, void (*irq)())
|
||||||
|
|
||||||
m_regs = (GSPrivRegSet*)(base + 0x12000000);
|
m_regs = (GSPrivRegSet*)(base + 0x12000000);
|
||||||
|
|
||||||
memset(m_regs, 0, sizeof(GSPrivRegSet));
|
|
||||||
|
|
||||||
PRIM = &m_env.PRIM;
|
PRIM = &m_env.PRIM;
|
||||||
// CSR->rREV = 0x20;
|
// CSR->rREV = 0x20;
|
||||||
m_env.PRMODECONT.AC = 1;
|
m_env.PRMODECONT.AC = 1;
|
||||||
|
|
|
@ -38,10 +38,7 @@ void GSTextureCache::RemoveAll()
|
||||||
|
|
||||||
for(int type = 0; type < 2; type++)
|
for(int type = 0; type < 2; type++)
|
||||||
{
|
{
|
||||||
for(list<Target*>::iterator i = m_dst[type].begin(); i != m_dst[type].end(); i++)
|
for_each(m_dst[type].begin(), m_dst[type].end(), delete_object());
|
||||||
{
|
|
||||||
delete *i;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_dst[type].clear();
|
m_dst[type].clear();
|
||||||
}
|
}
|
||||||
|
@ -842,10 +839,7 @@ void GSTextureCache::SourceMap::Add(Source* s, const GIFRegTEX0& TEX0, GSLocalMe
|
||||||
|
|
||||||
void GSTextureCache::SourceMap::RemoveAll()
|
void GSTextureCache::SourceMap::RemoveAll()
|
||||||
{
|
{
|
||||||
for(hash_map<Source*, bool>::iterator i = m_surfaces.begin(); i != m_surfaces.end(); i++)
|
for_each(m_surfaces.begin(), m_surfaces.end(), delete_first());
|
||||||
{
|
|
||||||
delete i->first;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_surfaces.clear();
|
m_surfaces.clear();
|
||||||
|
|
||||||
|
|
|
@ -130,10 +130,7 @@ const GSTextureCacheSW::GSTexture* GSTextureCacheSW::Lookup(const GIFRegTEX0& TE
|
||||||
|
|
||||||
void GSTextureCacheSW::RemoveAll()
|
void GSTextureCacheSW::RemoveAll()
|
||||||
{
|
{
|
||||||
for(hash_map<GSTexture*, bool>::iterator i = m_textures.begin(); i != m_textures.end(); i++)
|
for_each(m_textures.begin(), m_textures.end(), delete_first());
|
||||||
{
|
|
||||||
delete i->first;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_textures.clear();
|
m_textures.clear();
|
||||||
|
|
||||||
|
|
|
@ -53,12 +53,17 @@
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <hash_map>
|
#include <hash_map>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace stdext;
|
using namespace stdext;
|
||||||
|
|
||||||
extern string format(const char* fmt, ...);
|
extern string format(const char* fmt, ...);
|
||||||
|
|
||||||
|
struct delete_object {template<class T> void operator()(T& p) {delete p;}};
|
||||||
|
struct delete_first {template<class T> void operator()(T& p) {delete p.first;}};
|
||||||
|
struct delete_second {template<class T> void operator()(T& p) {delete p.second;}};
|
||||||
|
|
||||||
// syntactic sugar
|
// syntactic sugar
|
||||||
|
|
||||||
// put these into vc9/common7/ide/usertype.dat to have them highlighted
|
// put these into vc9/common7/ide/usertype.dat to have them highlighted
|
||||||
|
|
Loading…
Reference in New Issue