From d418537e26ec75bc656518dab293ff6313998682 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 1 Dec 2012 19:49:34 +0300 Subject: Add batch drawing to touch manager. --- src/touchmanager.cpp | 50 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 12 deletions(-) (limited to 'src/touchmanager.cpp') diff --git a/src/touchmanager.cpp b/src/touchmanager.cpp index 7675cfb9b..f2c91f867 100644 --- a/src/touchmanager.cpp +++ b/src/touchmanager.cpp @@ -22,6 +22,7 @@ #include "configuration.h" #include "graphics.h" +#include "graphicsvertexes.h" #include "touchactions.h" #include "gui/theme.h" @@ -30,9 +31,13 @@ TouchManager touchManager; +extern int openGLMode; + TouchManager::TouchManager() : mKeyboard(nullptr), - mPad(nullptr) + mPad(nullptr), + mVertexes(new ImageCollection), + mRedraw(true) { for (int f = 0;f < actionsSize; f ++) mActions[f] = false; @@ -85,6 +90,7 @@ void TouchManager::loadTouchItem(TouchItem **item, std::string name, bool type, } theme->unload(skin); } + mRedraw = true; } void TouchManager::clear() @@ -104,6 +110,7 @@ void TouchManager::clear() } } mObjects.clear(); + mRedraw = true; } void TouchManager::unloadTouchItem(TouchItem **item0) @@ -116,23 +123,42 @@ void TouchManager::unloadTouchItem(TouchItem **item0) delete item; *item0 = nullptr; } + mRedraw = true; } void TouchManager::draw() { -// drawTouchItem(mPad); - for (TouchItemVectorCIter it = mObjects.begin(), it_end = mObjects.end(); - it != it_end; ++ it) + if (openGLMode != 2) + { + if (mRedraw) + { + mRedraw = false; + mVertexes->clear(); + for (TouchItemVectorCIter it = mObjects.begin(), + it_end = mObjects.end(); + it != it_end; ++ it) + { + const TouchItem *const item = *it; + if (item && item->image) + { + mainGraphics->calcTile(mVertexes, item->image, + item->x, item->y); + } + } + } + mainGraphics->drawTile(mVertexes); + } + else { - drawTouchItem(*it); + for (TouchItemVectorCIter it = mObjects.begin(), + it_end = mObjects.end(); + it != it_end; ++ it) + { + const TouchItem *const item = *it; + if (item && item->image) + mainGraphics->drawImage(item->image, item->x, item->y); + } } -// drawTouchItem(mKeyboard); -} - -void TouchManager::drawTouchItem(const TouchItem *const item) const -{ - if (item && item->image) - mainGraphics->drawImage(item->image, item->x, item->y); } bool TouchManager::processEvent(const gcn::MouseInput &mouseInput) -- cgit v1.2.3-60-g2f50