[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