[Scummvm-cvs-logs] SF.net SVN: scummvm: [28540] scummvm/trunk/engines/parallaction

peres001 at users.sourceforge.net peres001 at users.sourceforge.net
Sun Aug 12 10:47:46 CEST 2007


Revision: 28540
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28540&view=rev
Author:   peres001
Date:     2007-08-12 01:47:45 -0700 (Sun, 12 Aug 2007)

Log Message:
-----------
Even better large background support. Now internal buffers aren't reallocated if not background size stays the same across location switches.

Modified Paths:
--------------
    scummvm/trunk/engines/parallaction/graphics.cpp
    scummvm/trunk/engines/parallaction/graphics.h

Modified: scummvm/trunk/engines/parallaction/graphics.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/graphics.cpp	2007-08-12 08:37:46 UTC (rev 28539)
+++ scummvm/trunk/engines/parallaction/graphics.cpp	2007-08-12 08:47:45 UTC (rev 28540)
@@ -693,15 +693,11 @@
 }
 
 
+
 void Gfx::setBackground(Graphics::Surface *surface) {
 	_buffers[kBit2] = surface;
 
-	_backgroundWidth = surface->w;
-	_backgroundHeight = surface->h;
-
-	_buffers[kBitFront]->create(surface->w, surface->h, 1);
-	_buffers[kBitBack]->create(surface->w, surface->h, 1);
-
+	initBuffers(surface->w, surface->h);
 	copyScreen(kBit2, kBitBack);
 }
 
@@ -781,17 +777,11 @@
 	g_system->initSize(_vm->_screenWidth, _vm->_screenHeight);
 	g_system->endGFXTransaction();
 
-	_backgroundWidth = _vm->_screenWidth;
-	_backgroundHeight = _vm->_screenHeight;
-
-	_buffers[kBitFront] = new Graphics::Surface;
-	_buffers[kBitFront]->create(_vm->_screenWidth, _vm->_screenHeight, 1);
-	_buffers[kBitBack] = new Graphics::Surface;
-	_buffers[kBitBack]->create(_vm->_screenWidth, _vm->_screenHeight, 1);
 	_buffers[kBit2] = 0;
-
 	_depthMask = 0;
 
+	initBuffers(_vm->_screenWidth, _vm->_screenHeight);
+
 	setPalette(_palette);
 
 	_screenX = 0;
@@ -810,13 +800,49 @@
 
 Gfx::~Gfx() {
 
-	_buffers[kBitFront]->free();
-	delete _buffers[kBitFront];
-	_buffers[kBitBack]->free();
-	delete _buffers[kBitBack];
+	freeBuffers();
 
 	return;
 }
 
+void Gfx::initBuffers(int w, int h) {
 
+	_backgroundWidth = w;
+	_backgroundHeight = h;
+
+	if (!_buffers[kBitFront]) {
+		_buffers[kBitFront] = new Graphics::Surface;
+	}
+
+	if (!_buffers[kBitBack]) {
+		_buffers[kBitBack] = new Graphics::Surface;
+	}
+
+	if (_buffers[kBitFront]->w != w || _buffers[kBitFront]->h != h) {
+		_buffers[kBitFront]->create(w, h, 1);
+	}
+
+	if (_buffers[kBitBack]->w != w || _buffers[kBitBack]->h != h) {
+		_buffers[kBitBack]->create(w, h, 1);
+	}
+
+}
+
+void Gfx::freeBuffers() {
+
+	if (_buffers[kBitFront]) {
+		_buffers[kBitFront]->free();
+		delete _buffers[kBitFront];
+	}
+
+	if (_buffers[kBitBack]) {
+		_buffers[kBitBack]->free();
+		delete _buffers[kBitBack];
+	}
+
+	_buffers[kBitFront] = 0;
+	_buffers[kBitBack] = 0;
+}
+
+
 } // namespace Parallaction

Modified: scummvm/trunk/engines/parallaction/graphics.h
===================================================================
--- scummvm/trunk/engines/parallaction/graphics.h	2007-08-12 08:37:46 UTC (rev 28539)
+++ scummvm/trunk/engines/parallaction/graphics.h	2007-08-12 08:47:45 UTC (rev 28540)
@@ -241,8 +241,8 @@
 	PaletteFxRange		_palettefx[6];
 	Palette				_palette;
 
-	uint 				_backgroundWidth;
-	uint 				_backgroundHeight;
+	int 				_backgroundWidth;
+	int 				_backgroundHeight;
 
 	uint				_screenX;		// scrolling position
 	uint				_screenY;
@@ -255,6 +255,9 @@
 	bool				_halfbrite;
 
 protected:
+	void initBuffers(int w, int h);
+	void freeBuffers();
+
 	void copyRect(uint width, uint height, byte *dst, uint dstPitch, byte *src, uint srcPitch);
 	void flatBlit(const Common::Rect& r, byte *data, Gfx::Buffers buffer, byte transparentColor);
 	void blit(const Common::Rect& r, uint16 z, byte *data, Gfx::Buffers buffer);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list