summaryrefslogtreecommitdiff
path: root/src/graphicsvertexes.h
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2011-03-26 05:07:12 +0200
committerAndrei Karas <akaras@inbox.ru>2011-03-26 05:50:44 +0200
commit8403dcf857c9cc639e8162edd5d4df4af07274bc (patch)
tree2f127213e0df4691b06c549a8f20b3d5225b9220 /src/graphicsvertexes.h
parentfc24490f1ecd186f3c294915fadee62c3053d841 (diff)
downloadplus-8403dcf857c9cc639e8162edd5d4df4af07274bc.tar.gz
plus-8403dcf857c9cc639e8162edd5d4df4af07274bc.tar.bz2
plus-8403dcf857c9cc639e8162edd5d4df4af07274bc.tar.xz
plus-8403dcf857c9cc639e8162edd5d4df4af07274bc.zip
Precalculation vertexes for improving draw speed.
Implemented in Software and fast OpenGL backends. Not all controls using this mode because some limitations. Known issue: impossible compile without opengl. Will be fixed in next commits.
Diffstat (limited to 'src/graphicsvertexes.h')
-rw-r--r--src/graphicsvertexes.h155
1 files changed, 155 insertions, 0 deletions
diff --git a/src/graphicsvertexes.h b/src/graphicsvertexes.h
new file mode 100644
index 000000000..1efb74f01
--- /dev/null
+++ b/src/graphicsvertexes.h
@@ -0,0 +1,155 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2011 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GRAPHICSVERTEXES_H
+#define GRAPHICSVERTEXES_H
+
+
+#include "main.h"
+
+#include "graphics.h"
+
+#ifdef USE_OPENGL
+#define NO_SDL_GLEXT
+
+#include <SDL_opengl.h>
+#endif
+
+#include <string>
+#include <list>
+#include <vector>
+
+//include <guichan/sdl/sdlgraphics.hpp>
+
+
+struct DoubleRect
+{
+ SDL_Rect src;
+ SDL_Rect dst;
+};
+
+class SDLGraphicsVertexes
+{
+ public:
+ SDLGraphicsVertexes();
+
+ ~SDLGraphicsVertexes();
+
+ std::list<DoubleRect*> mList;
+};
+
+
+class OpenGL1GraphicsVertexes
+{
+};
+
+class OpenGLGraphicsVertexes
+{
+ public:
+ OpenGLGraphicsVertexes();
+
+ ~OpenGLGraphicsVertexes();
+
+ GLfloat *switchFloatTexArray();
+
+ GLint *switchIntVertArray();
+
+ GLint *switchIntTexArray();
+
+ void init();
+
+ void clear();
+
+ std::vector<GLfloat*> &getFloatTexPool()
+ { return mFloatTexPool; }
+
+ std::vector<GLint*> &getIntVertPool()
+ { return mIntVertPool; }
+
+ std::vector<GLint*> &getIntTexPool()
+ { return mIntTexPool; }
+
+ void switchVp(int n);
+
+ std::vector<int> &getVp()
+ { return mVp; }
+
+ private:
+ GLfloat *mFloatTexArray;
+ GLint *mIntTexArray;
+ GLint *mIntVertArray;
+ std::vector<GLfloat*> mFloatTexPool;
+ std::vector<GLint*> mIntVertPool;
+ std::vector<GLint*> mIntTexPool;
+ std::vector<int> mVp;
+};
+
+class GraphicsVertexes
+{
+ public:
+ GraphicsVertexes();
+
+ ~GraphicsVertexes();
+
+ static void setLoadAsOpenGL(int useOpenGL);
+
+ SDLGraphicsVertexes sdl[5];
+
+ OpenGL1GraphicsVertexes ogl1[5];
+
+ OpenGLGraphicsVertexes ogl[5];
+
+ void init(int x, int y, int w, int h);
+
+ void pushSDL(SDL_Rect r1, SDL_Rect r2);
+
+ void clearSDL();
+
+ std::list<DoubleRect*> *getRectsSDL();
+
+ void incPtr(int num = 1)
+ { mPtr += num; }
+
+ void setPtr(int num)
+ { mPtr = num; }
+
+ OpenGLGraphicsVertexes* getOGL()
+ { return &ogl[mPtr]; }
+
+ int getX()
+ { return mX; }
+
+ int getY()
+ { return mY; }
+
+ int getW()
+ { return mW; }
+
+ int getH()
+ { return mH; }
+
+ int mX, mY, mW, mH;
+ int mPtr;
+
+ private:
+ static int mUseOpenGL;
+};
+
+#endif // GRAPHICSVERTEXES_H