diff options
| author | Nipun Garg | 2019-07-18 02:19:18 +0530 | 
|---|---|---|
| committer | Eugene Sandulenko | 2019-09-03 17:17:23 +0200 | 
| commit | 161f9e67070f38906cd62b7db65d1d6cf2802823 (patch) | |
| tree | c672e3075942efc60f94e4f1aec2dbd42cd2b90e | |
| parent | e9e654d7db8c6b865c6f168f6f35663af85fce85 (diff) | |
| download | scummvm-rg350-161f9e67070f38906cd62b7db65d1d6cf2802823.tar.gz scummvm-rg350-161f9e67070f38906cd62b7db65d1d6cf2802823.tar.bz2 scummvm-rg350-161f9e67070f38906cd62b7db65d1d6cf2802823.zip  | |
HDB: NULL each tile after calling destructor
| -rw-r--r-- | engines/hdb/ai-init.cpp | 25 | ||||
| -rw-r--r-- | engines/hdb/ai.h | 17 | ||||
| -rw-r--r-- | engines/hdb/gfx.cpp | 44 | ||||
| -rw-r--r-- | engines/hdb/gfx.h | 10 | ||||
| -rw-r--r-- | engines/hdb/hdb.cpp | 7 | 
5 files changed, 73 insertions, 30 deletions
diff --git a/engines/hdb/ai-init.cpp b/engines/hdb/ai-init.cpp index 5a71b4bb17..c0c85e7c76 100644 --- a/engines/hdb/ai-init.cpp +++ b/engines/hdb/ai-init.cpp @@ -946,6 +946,31 @@ AI::~AI() {  	memset(_clubRightGfx, 0, sizeof(_clubRightGfx));  	memset(_slugAttackGfx, 0, sizeof(_slugAttackGfx)); +	// Clean up Player Graphics Storage +	memset(_horrible1Gfx, 0, sizeof(_horrible1Gfx)); +	memset(_horrible2Gfx, 0, sizeof(_horrible2Gfx)); +	memset(_horrible3Gfx, 0, sizeof(_horrible3Gfx)); +	memset(_horrible4Gfx, 0, sizeof(_horrible4Gfx)); +	memset(_plummetGfx, 0, sizeof(_plummetGfx)); +	memset(_dyingGfx, 0, sizeof(_dyingGfx)); + +	memset(_pushdownGfx, 0, sizeof(_pushdownGfx)); +	memset(_pushupGfx, 0, sizeof(_pushupGfx)); +	memset(_pushleftGfx, 0, sizeof(_pushleftGfx)); +	memset(_pushrightGfx, 0, sizeof(_pushrightGfx)); +	memset(_stunDownGfx, 0, sizeof(_stunDownGfx)); +	memset(_stunUpGfx, 0, sizeof(_stunUpGfx)); +	memset(_stunLeftGfx, 0, sizeof(_stunLeftGfx)); +	memset(_stunRightGfx, 0, sizeof(_stunRightGfx)); +	memset(_slugDownGfx, 0, sizeof(_slugDownGfx)); +	memset(_slugUpGfx, 0, sizeof(_slugUpGfx)); +	memset(_slugLeftGfx, 0, sizeof(_slugLeftGfx)); +	memset(_slugRightGfx, 0, sizeof(_slugRightGfx)); + +	memset(_waypointGfx, 0, sizeof(_waypointGfx)); +	delete _debugQMark; +	_debugQMark = NULL; +  	// Free AnimTargets  	for (uint i = 0; i < _animTargets.size(); i++) { diff --git a/engines/hdb/ai.h b/engines/hdb/ai.h index 8b25008648..533d4310a9 100644 --- a/engines/hdb/ai.h +++ b/engines/hdb/ai.h @@ -550,51 +550,61 @@ struct AIEntity {  		blinkFrames = 0;  		for (int i = 0; i < kMaxAnimFrames; i++) {  			delete blinkGfx[i]; +			blinkGfx[i] = NULL;  		}  		special1Frames = 0;  		for (int i = 0; i < kMaxAnimFrames; i++) {  			delete special1Gfx[i]; +			special1Gfx[i] = NULL;  		}  		standdownFrames = 0;  		for (int i = 0; i < kMaxAnimFrames; i++) {  			delete standdownGfx[i]; +			standdownGfx[i] = NULL;  		}  		standupFrames = 0;  		for (int i = 0; i < kMaxAnimFrames; i++) {  			delete standupGfx[i]; +			standupGfx[i] = NULL;  		}  		standleftFrames = 0;  		for (int i = 0; i < kMaxAnimFrames; i++) {  			delete standleftGfx[i]; +			standleftGfx[i] = NULL;  		}  		standrightFrames = 0;  		for (int i = 0; i < kMaxAnimFrames; i++) {  			delete standrightGfx[i]; +			standrightGfx[i] = NULL;  		}  		movedownFrames = 0;  		for (int i = 0; i < kMaxAnimFrames; i++) {  			delete movedownGfx[i]; +			movedownGfx[i] = NULL;  		}  		moveupFrames = 0;  		for (int i = 0; i < kMaxAnimFrames; i++) {  			delete moveupGfx[i]; +			moveupGfx[i] = NULL;  		}  		moveleftFrames = 0;  		for (int i = 0; i < kMaxAnimFrames; i++) {  			delete moveleftGfx[i]; +			moveleftGfx[i] = NULL;  		}  		moverightFrames = 0;  		for (int i = 0; i < kMaxAnimFrames; i++) {  			delete moverightGfx[i]; +			moverightGfx[i] = NULL;  		}  	} @@ -652,6 +662,7 @@ struct AnimTarget {  	~AnimTarget() {  		for (int i = 0; i < kMaxAnimTFrames; i++) {  			delete gfxList[i]; +			gfxList[i] = NULL;  		}  	}  }; @@ -680,6 +691,12 @@ struct DlvEnt {  		destTextName[0] = 0;  		destGfxName[0] = 0;  	} +	~DlvEnt() { +		delete itemGfx; +		itemGfx = NULL; +		delete destGfx; +		destGfx = NULL; +	}  };  struct Waypoint { diff --git a/engines/hdb/gfx.cpp b/engines/hdb/gfx.cpp index 942fd1d2b6..de897074e0 100644 --- a/engines/hdb/gfx.cpp +++ b/engines/hdb/gfx.cpp @@ -1032,16 +1032,14 @@ void Gfx::drawDebugInfo(Tile *_debugLogo, int fps) {  }  Picture::Picture() : _width(0), _height(0), _name("") { -	_surface = NULL; +	_surface.create(_width, _height, g_hdb->_format);  }  Picture::~Picture() { -	if (_surface) -		_surface->free(); -	_surface = NULL; +	_surface.free();  } -Graphics::ManagedSurface *Picture::load(Common::SeekableReadStream *stream) { +Graphics::Surface Picture::load(Common::SeekableReadStream *stream) {  	_width = stream->readUint32LE();  	_height = stream->readUint32LE();  	stream->read(_name, 64); @@ -1049,14 +1047,13 @@ Graphics::ManagedSurface *Picture::load(Common::SeekableReadStream *stream) {  	debug(8, "Picture: _width: %d, _height: %d", _width, _height);  	debug(8, "Picture: _name: %s", _name); -	_surface = new Graphics::ManagedSurface; -	_surface->create(_width, _height, g_hdb->_format); +	_surface.create(_width, _height, g_hdb->_format);  	stream->readUint32LE(); // Skip Win32 Surface  	uint16 *ptr;  	for (int y = 0; y < _height; y++) { -		ptr = (uint16 *)_surface->getBasePtr(0, y); +		ptr = (uint16 *)_surface.getBasePtr(0, y);  		for (int x = 0; x < _width; x++) {  			*ptr = TO_LE_16(stream->readUint16LE());  			ptr++; @@ -1067,9 +1064,9 @@ Graphics::ManagedSurface *Picture::load(Common::SeekableReadStream *stream) {  }  int Picture::draw(int x, int y) { -	g_hdb->_gfx->_globalSurface.blitFrom(*_surface, Common::Point(x, y)); +	g_hdb->_gfx->_globalSurface.blitFrom(_surface, Common::Point(x, y)); -	Common::Rect clip(_surface->getBounds()); +	Common::Rect clip(_surface.getBounds());  	clip.moveTo(x, y);  	clip.clip(g_hdb->_gfx->_globalSurface.getBounds());  	if (!clip.isEmpty()) { @@ -1080,9 +1077,9 @@ int Picture::draw(int x, int y) {  }  int Picture::drawMasked(int x, int y, int alpha) { -	g_hdb->_gfx->_globalSurface.transBlitFrom(*_surface, Common::Point(x, y), 0xf81f, false, 0, alpha & 0xff); +	g_hdb->_gfx->_globalSurface.transBlitFrom(_surface, Common::Point(x, y), 0xf81f, false, 0, alpha & 0xff); -	Common::Rect clip(_surface->getBounds()); +	Common::Rect clip(_surface.getBounds());  	clip.moveTo(x, y);  	clip.clip(g_hdb->_gfx->_globalSurface.getBounds());  	if (!clip.isEmpty()) { @@ -1092,26 +1089,25 @@ int Picture::drawMasked(int x, int y, int alpha) {  	return 0;  } -Tile::Tile() : _flags(0), _name(""), _surface(NULL) {} +Tile::Tile() : _flags(0), _name("") { +	_surface.create(32, 32, g_hdb->_format); +}  Tile::~Tile() { -	if (_surface) -		_surface->free(); -	_surface = NULL; +	_surface.free();  } -Graphics::ManagedSurface *Tile::load(Common::SeekableReadStream *stream) { +Graphics::Surface Tile::load(Common::SeekableReadStream *stream) {  	_flags = stream->readUint32LE();  	stream->read(_name, 64); -	_surface = new Graphics::ManagedSurface; -	_surface->create(32, 32, g_hdb->_format); +	_surface.create(32, 32, g_hdb->_format);  	stream->readUint32LE(); // Skip Win32 Surface  	uint16 *ptr;  	for (uint y = 0; y < 32; y++) { -		ptr = (uint16 *)_surface->getBasePtr(0, y); +		ptr = (uint16 *)_surface.getBasePtr(0, y);  		for (uint x = 0; x < 32; x++) {  			*ptr = TO_LE_16(stream->readUint16LE());  			ptr++; @@ -1122,9 +1118,9 @@ Graphics::ManagedSurface *Tile::load(Common::SeekableReadStream *stream) {  }  int Tile::draw(int x, int y) { -	g_hdb->_gfx->_globalSurface.blitFrom(*_surface, Common::Point(x, y)); +	g_hdb->_gfx->_globalSurface.blitFrom(_surface, Common::Point(x, y)); -	Common::Rect clip(_surface->getBounds()); +	Common::Rect clip(_surface.getBounds());  	clip.moveTo(x, y);  	clip.clip(g_hdb->_gfx->_globalSurface.getBounds());  	if (!clip.isEmpty()) { @@ -1135,9 +1131,9 @@ int Tile::draw(int x, int y) {  }  int Tile::drawMasked(int x, int y, int alpha) { -	g_hdb->_gfx->_globalSurface.transBlitFrom(*_surface, Common::Point(x, y), 0xf81f, false, 0, alpha & 0xff); +	g_hdb->_gfx->_globalSurface.transBlitFrom(_surface, Common::Point(x, y), 0xf81f, false, 0, alpha & 0xff); -	Common::Rect clip(_surface->getBounds()); +	Common::Rect clip(_surface.getBounds());  	clip.moveTo(x, y);  	clip.clip(g_hdb->_gfx->_globalSurface.getBounds());  	if (!clip.isEmpty()) { diff --git a/engines/hdb/gfx.h b/engines/hdb/gfx.h index 1c993ec201..ce6ceb6502 100644 --- a/engines/hdb/gfx.h +++ b/engines/hdb/gfx.h @@ -253,7 +253,7 @@ public:  	Picture();  	~Picture(); -	Graphics::ManagedSurface *load(Common::SeekableReadStream *stream); +	Graphics::Surface load(Common::SeekableReadStream *stream);  	int draw(int x, int y);  	int drawMasked(int x, int y, int alpha = 0xff); @@ -261,12 +261,12 @@ public:  	char *getName() { return _name; } -	Graphics::ManagedSurface *getSurface() { return _surface; } +	Graphics::ManagedSurface *getSurface() { return &_surface; }  private:  	char _name[64]; -	Graphics::ManagedSurface *_surface; +	Graphics::ManagedSurface _surface;  };  class Tile { @@ -275,7 +275,7 @@ public:  	Tile();  	~Tile(); -	Graphics::ManagedSurface *load(Common::SeekableReadStream *stream); +	Graphics::Surface load(Common::SeekableReadStream *stream);  	int draw(int x, int y);  	int drawMasked(int x, int y, int alpha = 0xff); @@ -285,7 +285,7 @@ public:  private:  	char _name[64]; -	Graphics::ManagedSurface *_surface; +	Graphics::ManagedSurface _surface;  };  } // End of Namespace HDB diff --git a/engines/hdb/hdb.cpp b/engines/hdb/hdb.cpp index c5b91bbb07..49a2f99807 100644 --- a/engines/hdb/hdb.cpp +++ b/engines/hdb/hdb.cpp @@ -87,10 +87,15 @@ HDBGame::~HDBGame() {  	delete _rnd;  	delete _progressGfx; +	_progressGfx = NULL;  	delete _progressMarkGfx; +	_progressMarkGfx = NULL;  	delete _loadingScreenGfx; -	if (_logoGfx) +	_loadingScreenGfx = NULL; +	if (_logoGfx) {  		delete _logoGfx; +		_logoGfx = NULL; +	}  	DebugMan.clearAllDebugChannels();  }  | 
