aboutsummaryrefslogtreecommitdiff
path: root/engines/wintermute/base/gfx/osystem/base_render_osystem.h
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2013-09-26 10:50:12 +0200
committerWillem Jan Palenstijn2013-09-26 10:50:13 +0200
commit4e12600d7053cdd3740dc1b099f1c1071645ae34 (patch)
tree270ee7ee8a6e2aceacda17a49aba8d04bc1704a2 /engines/wintermute/base/gfx/osystem/base_render_osystem.h
parentc6220a9cd1b5400242773dcb89dfbbc2a98453bd (diff)
parent265f7e463ee9265df7b675a43ce5861418090d2f (diff)
downloadscummvm-rg350-4e12600d7053cdd3740dc1b099f1c1071645ae34.tar.gz
scummvm-rg350-4e12600d7053cdd3740dc1b099f1c1071645ae34.tar.bz2
scummvm-rg350-4e12600d7053cdd3740dc1b099f1c1071645ae34.zip
Merge branch 'wme_lineartickets' into wme_rendering
This replaces the (quadratic time) renderqueue drawnum logic by a (linear time) approach based on following along the queue with an iterator. This branch first implements the new iterator logic next to the old drawnum logic, adding asserts that they produce identical results to facilitate testing and debugging. The old code is removed after that.
Diffstat (limited to 'engines/wintermute/base/gfx/osystem/base_render_osystem.h')
-rw-r--r--engines/wintermute/base/gfx/osystem/base_render_osystem.h13
1 files changed, 10 insertions, 3 deletions
diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.h b/engines/wintermute/base/gfx/osystem/base_render_osystem.h
index dd3cc6140e..fd5d33622e 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.h
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.h
@@ -62,6 +62,8 @@ public:
BaseRenderOSystem(BaseGame *inGame);
~BaseRenderOSystem();
+ typedef Common::List<RenderTicket *>::iterator RenderQueueIterator;
+
Common::String getName() const;
bool initRenderer(int width, int height, bool windowed) override;
@@ -79,11 +81,16 @@ public:
void invalidateTicket(RenderTicket *renderTicket);
void invalidateTicketsFromSurface(BaseSurfaceOSystem *surf);
/**
- * Insert a ticket into the queue, adding a dirty rect if it's
- * new, or out-of-order from last draw from the ticket.
+ * Insert a new ticket into the queue, adding a dirty rect
* param renderTicket the ticket to be added.
*/
void drawFromTicket(RenderTicket *renderTicket);
+ /**
+ * Re-insert an existing ticket into the queue, adding a dirty rect
+ * out-of-order from last draw from the ticket.
+ * param ticket iterator pointing to the ticket to be added.
+ */
+ void drawFromQueuedTicket(const RenderQueueIterator &ticket);
bool setViewport(int left, int top, int right, int bottom) override;
bool setViewport(Rect32 *rect) override { return BaseRenderer::setViewport(rect); }
@@ -120,7 +127,6 @@ private:
void drawFromSurface(RenderTicket *ticket);
// Dirty-rects:
void drawFromSurface(RenderTicket *ticket, Common::Rect *dstRect, Common::Rect *clipRect);
- typedef Common::List<RenderTicket *>::iterator RenderQueueIterator;
Common::Rect *_dirtyRect;
Common::List<RenderTicket *> _renderQueue;
RenderQueueIterator _lastAddedTicket;
@@ -128,6 +134,7 @@ private:
bool _needsFlip;
uint32 _drawNum; ///< The global number of the current draw-operation.
+ RenderQueueIterator _lastFrameIter;
Common::Rect _renderRect;
Graphics::Surface *_renderSurface;
Graphics::Surface *_blankSurface;