[Scummvm-cvs-logs] scummvm master -> 127afbac8cffea5b0f0e5100de2d3bc28a8736ba

somaen einarjohan at somadalen.com
Sun Dec 16 23:14:40 CET 2012


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
6d79a66766 WINTERMUTE: Move draw-code to render_ticket.cpp
127afbac8c WINTERMUTE: Don't check the entire ticket-queue for every ticket.


Commit: 6d79a66766ede297ace36e060a0ab2b06aa42025
    https://github.com/scummvm/scummvm/commit/6d79a66766ede297ace36e060a0ab2b06aa42025
Author: Einar Johan Trøan Sømåen (einarjohants at gmail.com)
Date: 2012-12-16T14:13:58-08:00

Commit Message:
WINTERMUTE: Move draw-code to render_ticket.cpp

Changed paths:
    engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
    engines/wintermute/base/gfx/osystem/base_render_osystem.h
    engines/wintermute/base/gfx/osystem/render_ticket.cpp
    engines/wintermute/base/gfx/osystem/render_ticket.h



diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
index 5097d20..32bb608 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
@@ -277,7 +277,7 @@ void BaseRenderOSystem::drawSurface(BaseSurfaceOSystem *owner, const Graphics::S
 			if (*(compareTicket) == compare && compareTicket->_isValid) {
 				compareTicket->_colorMod = _colorMod;
 				if (_disableDirtyRects) {
-					drawFromSurface(compareTicket, NULL);
+					drawFromSurface(compareTicket);
 				} else {
 					drawFromTicket(compareTicket);
 				}
@@ -292,7 +292,7 @@ void BaseRenderOSystem::drawSurface(BaseSurfaceOSystem *owner, const Graphics::S
 	} else {
 		ticket->_wantsDraw = true;
 		_renderQueue.push_back(ticket);
-		drawFromSurface(ticket, NULL);
+		drawFromSurface(ticket);
 	}
 }
 
@@ -426,7 +426,7 @@ void BaseRenderOSystem::drawTickets() {
 			dstClip.translate(-offsetX, -offsetY);
 
 			_colorMod = ticket->_colorMod;
-			drawFromSurface(ticket, &ticket->_srcRect, &pos, &dstClip);
+			drawFromSurface(ticket, &pos, &dstClip);
 			_needsFlip = true;
 		}
 		// Some tickets want redraw but don't actually clip the dirty area (typically the ones that shouldnt become clear-color)
@@ -456,24 +456,12 @@ void BaseRenderOSystem::drawTickets() {
 }
 
 // Replacement for SDL2's SDL_RenderCopy
-void BaseRenderOSystem::drawFromSurface(RenderTicket *ticket, Common::Rect *clipRect) {
-	TransparentSurface src(*ticket->getSurface(), false);
-	bool doDelete = false;
-	if (!clipRect) {
-		doDelete = true;
-		clipRect = new Common::Rect();
-		clipRect->setWidth(ticket->getSurface()->w);
-		clipRect->setHeight(ticket->getSurface()->h);
-	}
-
-	src._enableAlphaBlit = ticket->_hasAlpha;
-	src.blit(*_renderSurface, ticket->_dstRect.left, ticket->_dstRect.top, ticket->_mirror, clipRect, _colorMod, clipRect->width(), clipRect->height());
-	if (doDelete) {
-		delete clipRect;
-	}
+void BaseRenderOSystem::drawFromSurface(RenderTicket *ticket) {
+	ticket->drawToSurface(_renderSurface);
 }
-void BaseRenderOSystem::drawFromSurface(RenderTicket *ticket, Common::Rect *srcRect, Common::Rect *dstRect, Common::Rect *clipRect) {
-	ticket->drawToSurface(_renderSurface, srcRect, dstRect, clipRect);
+
+void BaseRenderOSystem::drawFromSurface(RenderTicket *ticket, Common::Rect *dstRect, Common::Rect *clipRect) {
+	ticket->drawToSurface(_renderSurface, dstRect, clipRect);
 }
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.h b/engines/wintermute/base/gfx/osystem/base_render_osystem.h
index e7f1447..039679a 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.h
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.h
@@ -86,9 +86,9 @@ private:
 	void addDirtyRect(const Common::Rect &rect);
 	void drawTickets();
 	// Non-dirty-rects:
-	void drawFromSurface(RenderTicket *ticket, Common::Rect *clipRect);
+	void drawFromSurface(RenderTicket *ticket);
 	// Dirty-rects:
-	void drawFromSurface(RenderTicket *ticket, Common::Rect *srcRect, Common::Rect *dstRect, Common::Rect *clipRect);
+	void drawFromSurface(RenderTicket *ticket, Common::Rect *dstRect, Common::Rect *clipRect);
 	typedef Common::List<RenderTicket *>::iterator RenderQueueIterator;
 	Common::Rect *_dirtyRect;
 	Common::List<RenderTicket *> _renderQueue;
diff --git a/engines/wintermute/base/gfx/osystem/render_ticket.cpp b/engines/wintermute/base/gfx/osystem/render_ticket.cpp
index 8b513f8..174f54e 100644
--- a/engines/wintermute/base/gfx/osystem/render_ticket.cpp
+++ b/engines/wintermute/base/gfx/osystem/render_ticket.cpp
@@ -83,7 +83,19 @@ bool RenderTicket::operator==(RenderTicket &t) {
 	return true;
 }
 
-void RenderTicket::drawToSurface(Graphics::Surface *_targetSurface, Common::Rect *srcRect, Common::Rect *dstRect, Common::Rect *clipRect) {
+// Replacement for SDL2's SDL_RenderCopy
+void RenderTicket::drawToSurface(Graphics::Surface *_targetSurface) {
+	TransparentSurface src(*getSurface(), false);
+
+	Common::Rect clipRect;
+	clipRect.setWidth(getSurface()->w);
+	clipRect.setHeight(getSurface()->h);
+
+	src._enableAlphaBlit = _hasAlpha;
+	src.blit(*_targetSurface, _dstRect.left, _dstRect.top, _mirror, &clipRect, _colorMod, clipRect.width(), clipRect.height());
+}
+
+void RenderTicket::drawToSurface(Graphics::Surface *_targetSurface, Common::Rect *dstRect, Common::Rect *clipRect) {
 	TransparentSurface src(*getSurface(), false);
 	bool doDelete = false;
 	if (!clipRect) {
@@ -92,7 +104,7 @@ void RenderTicket::drawToSurface(Graphics::Surface *_targetSurface, Common::Rect
 		clipRect->setWidth(getSurface()->w);
 		clipRect->setHeight(getSurface()->h);
 	}
-	
+
 	src._enableAlphaBlit = _hasAlpha;
 	src.blit(*_targetSurface, dstRect->left, dstRect->top, _mirror, clipRect, _colorMod, clipRect->width(), clipRect->height());
 	if (doDelete) {
diff --git a/engines/wintermute/base/gfx/osystem/render_ticket.h b/engines/wintermute/base/gfx/osystem/render_ticket.h
index 242822c..19637a2 100644
--- a/engines/wintermute/base/gfx/osystem/render_ticket.h
+++ b/engines/wintermute/base/gfx/osystem/render_ticket.h
@@ -36,18 +36,18 @@ namespace Wintermute {
 
 class BaseSurfaceOSystem;
 class RenderTicket {
-	Graphics::Surface *_surface;
 public:
 	RenderTicket(BaseSurfaceOSystem *owner, const Graphics::Surface *surf, Common::Rect *srcRect, Common::Rect *dstRest, bool mirrorX = false, bool mirrorY = false, bool disableAlpha = false);
 	RenderTicket() : _isValid(true), _wantsDraw(false), _drawNum(0) {}
 	~RenderTicket();
 	const Graphics::Surface *getSurface() { return _surface; }
-	void drawToSurface(Graphics::Surface *_targetSurface, Common::Rect *srcRect, Common::Rect *dstRect, Common::Rect *clipRect);
-	Common::Rect _srcRect;
+	// Non-dirty-rects:
+	void drawToSurface(Graphics::Surface *_targetSurface);
+	// Dirty-rects:
+	void drawToSurface(Graphics::Surface *_targetSurface, Common::Rect *dstRect, Common::Rect *clipRect);
+
 	Common::Rect _dstRect;
-	uint32 _mirror;
 	uint32 _batchNum;
-	bool _hasAlpha;
 
 	bool _isValid;
 	bool _wantsDraw;
@@ -56,6 +56,11 @@ public:
 
 	BaseSurfaceOSystem *_owner;
 	bool operator==(RenderTicket &a);
+private:
+	Graphics::Surface *_surface;
+	Common::Rect _srcRect;
+	bool _hasAlpha;
+	uint32 _mirror;
 };
 
 } // end of namespace Wintermute


Commit: 127afbac8cffea5b0f0e5100de2d3bc28a8736ba
    https://github.com/scummvm/scummvm/commit/127afbac8cffea5b0f0e5100de2d3bc28a8736ba
Author: Einar Johan Trøan Sømåen (einarjohants at gmail.com)
Date: 2012-12-16T14:13:58-08:00

Commit Message:
WINTERMUTE: Don't check the entire ticket-queue for every ticket.

Changed paths:
    engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
    engines/wintermute/base/gfx/osystem/base_render_osystem.h



diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
index 32bb608..097ea7f 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
@@ -260,6 +260,11 @@ void BaseRenderOSystem::drawSurface(BaseSurfaceOSystem *owner, const Graphics::S
 	if ((dstRect->left < 0 && dstRect->right < 0) || (dstRect->top < 0 && dstRect->bottom < 0)) {
 		return;
 	}
+	// Start searching from the beginning for the first and second items (since it's empty the first time around
+	// then keep incrementing the start-position, to avoid comparing against already used tickets.
+	if (_drawNum == 0 || _drawNum == 1) {
+		_lastAddedTicket = _renderQueue.begin();
+	}
 
 	if (owner) { // Fade-tickets are owner-less
 		RenderTicket compare(owner, NULL, srcRect, dstRect, mirrorX, mirrorY, disableAlpha);
@@ -272,7 +277,7 @@ void BaseRenderOSystem::drawSurface(BaseSurfaceOSystem *owner, const Graphics::S
 		// LOTS of tickets.
 		RenderQueueIterator endIterator = _renderQueue.end();
 		RenderTicket *compareTicket = NULL;
-		for (it = _renderQueue.begin(); it != endIterator; ++it) {
+		for (it = _lastAddedTicket; it != endIterator; ++it) {
 			compareTicket = *it;
 			if (*(compareTicket) == compare && compareTicket->_isValid) {
 				compareTicket->_colorMod = _colorMod;
@@ -280,6 +285,7 @@ void BaseRenderOSystem::drawSurface(BaseSurfaceOSystem *owner, const Graphics::S
 					drawFromSurface(compareTicket);
 				} else {
 					drawFromTicket(compareTicket);
+					_lastAddedTicket++;
 				}
 				return;
 			}
@@ -289,10 +295,11 @@ void BaseRenderOSystem::drawSurface(BaseSurfaceOSystem *owner, const Graphics::S
 	ticket->_colorMod = _colorMod;
 	if (!_disableDirtyRects) {
 		drawFromTicket(ticket);
+		drawFromSurface(ticket);
+		_lastAddedTicket++;
 	} else {
 		ticket->_wantsDraw = true;
 		_renderQueue.push_back(ticket);
-		drawFromSurface(ticket);
 	}
 }
 
diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.h b/engines/wintermute/base/gfx/osystem/base_render_osystem.h
index 039679a..e79a0ce 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.h
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.h
@@ -92,6 +92,8 @@ private:
 	typedef Common::List<RenderTicket *>::iterator RenderQueueIterator;
 	Common::Rect *_dirtyRect;
 	Common::List<RenderTicket *> _renderQueue;
+	RenderQueueIterator _lastAddedTicket;
+
 	bool _needsFlip;
 	uint32 _drawNum;
 	Common::Rect _renderRect;






More information about the Scummvm-git-logs mailing list