[Scummvm-cvs-logs] SF.net SVN: scummvm:[41657] scummvm/branches/gsoc2009-draci/engines/draci
dkasak13 at users.sourceforge.net
dkasak13 at users.sourceforge.net
Fri Jun 19 02:13:05 CEST 2009
Revision: 41657
http://scummvm.svn.sourceforge.net/scummvm/?rev=41657&view=rev
Author: dkasak13
Date: 2009-06-19 00:13:05 +0000 (Fri, 19 Jun 2009)
Log Message:
-----------
* Made the Screen class use the new Surface class.
* Added Screen::drawRect() method.
* Added support for updating dirty rectangles.
Modified Paths:
--------------
scummvm/branches/gsoc2009-draci/engines/draci/screen.cpp
scummvm/branches/gsoc2009-draci/engines/draci/screen.h
Modified: scummvm/branches/gsoc2009-draci/engines/draci/screen.cpp
===================================================================
--- scummvm/branches/gsoc2009-draci/engines/draci/screen.cpp 2009-06-19 00:09:36 UTC (rev 41656)
+++ scummvm/branches/gsoc2009-draci/engines/draci/screen.cpp 2009-06-19 00:13:05 UTC (rev 41657)
@@ -31,16 +31,14 @@
namespace Draci {
Screen::Screen(DraciEngine *vm) : _vm(vm) {
- _surface = new Graphics::Surface();
- _surface->create(kScreenWidth, kScreenHeight, 1);
- this->clearScreen();
+ _surface = new Surface(kScreenWidth, kScreenHeight);
_palette = new byte[4 * kNumColours];
setPaletteEmpty();
+ this->clearScreen();
}
Screen::~Screen() {
- _surface->free();
- delete[] _surface;
+ delete _surface;
delete[] _palette;
}
@@ -50,7 +48,7 @@
}
_vm->_system->setPalette(_palette, 0, numEntries);
- _vm->_system->updateScreen();
+ copyToScreen();
}
void Screen::setPalette(byte *data, uint16 start, uint16 num) {
@@ -73,49 +71,71 @@
}
_vm->_system->setPalette(_palette, start, num);
- _vm->_system->updateScreen();
+ copyToScreen();
}
void Screen::copyToScreen() const {
- byte *ptr = (byte *)_surface->getBasePtr(0, 0);
+ Common::List<Common::Rect> *dirtyRects = _surface->getDirtyRects();
+ Common::List<Common::Rect>::iterator it;
+
+ if (_surface->needsFullUpdate()) {
+ byte *ptr = (byte *)_surface->getBasePtr(0, 0);
- _vm->_system->copyRectToScreen(ptr, kScreenWidth, 0, 0,
- kScreenWidth, kScreenHeight);
+ _vm->_system->copyRectToScreen(ptr, kScreenWidth,
+ 0, 0, kScreenWidth, kScreenHeight);
+ } else {
+ for (it = dirtyRects->begin(); it != dirtyRects->end(); ++it) {
+ byte *ptr = (byte *)_surface->getBasePtr(it->left, it->top);
+ _vm->_system->copyRectToScreen(ptr, kScreenWidth,
+ it->left, it->top, it->width(), it->height());
+ }
+ }
+
_vm->_system->updateScreen();
+ _surface->markClean();
}
void Screen::clearScreen() const {
byte *ptr = (byte *)_surface->getBasePtr(0, 0);
+ _surface->markDirty();
+
memset(ptr, 0, kScreenWidth * kScreenHeight);
}
-void Screen::drawSprite(const Sprite &s) const {
- byte *dst = (byte *)_surface->getBasePtr(s._x, s._y);
- byte *src = s._data;
+void Screen::fillScreen(uint16 colour) const {
+ byte *ptr = (byte *)_surface->getBasePtr(0, 0);
- for (unsigned int i = 0; i < s._height; ++i) {
- for(unsigned int j = 0; j < s._width; ++j) {
- dst[j] = *src++;
+ _surface->markDirty();
+
+ memset(ptr, colour, kScreenWidth * kScreenHeight);
+}
+
+void Screen::drawRect(Common::Rect &r, uint8 colour) {
+
+ r.clip(_surface->w, _surface->h);
+
+ if (r.isEmpty())
+ return;
+
+ byte *ptr = (byte *)_surface->getBasePtr(r.left, r.top);
+
+ for (uint16 i = 0; i < r.width(); ++i) {
+ for (uint16 j = 0; j < r.height(); ++j) {
+ ptr[j * kScreenWidth + i] = colour;
}
-
- dst += _surface->pitch;
}
-}
-void Screen::fillScreen(uint16 colour) const {
- byte *ptr = (byte *)_surface->getBasePtr(0, 0);
-
- memset(ptr, colour, kScreenWidth * kScreenHeight);
+ _surface->markDirtyRect(r);
}
byte *Screen::getPalette() const {
return _palette;
}
-Graphics::Surface *Screen::getSurface() {
+Draci::Surface *Screen::getSurface() {
return _surface;
}
Modified: scummvm/branches/gsoc2009-draci/engines/draci/screen.h
===================================================================
--- scummvm/branches/gsoc2009-draci/engines/draci/screen.h 2009-06-19 00:09:36 UTC (rev 41656)
+++ scummvm/branches/gsoc2009-draci/engines/draci/screen.h 2009-06-19 00:13:05 UTC (rev 41657)
@@ -26,8 +26,7 @@
#ifndef DRACI_SCREEN_H
#define DRACI_SCREEN_H
-#include "graphics/surface.h"
-
+#include "draci/surface.h"
#include "draci/sprite.h"
namespace Draci {
@@ -35,8 +34,8 @@
enum ScreenParameters {
kScreenWidth = 320,
kScreenHeight = 200,
-
- kNumColours = 256
+ kNumColours = 256,
+ kDefaultTransparent = 255
};
class DraciEngine;
@@ -54,10 +53,11 @@
void clearScreen() const;
void drawSprite(const Sprite &s) const;
void fillScreen(uint16 colour) const;
- Graphics::Surface *getSurface();
-
+ Surface *getSurface();
+ void drawRect(Common::Rect &r, uint8 colour);
+
private:
- Graphics::Surface *_surface;
+ Surface *_surface;
byte *_palette;
DraciEngine *_vm;
};
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