[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