diff options
author | Andrei Karas <akaras@inbox.ru> | 2011-03-26 05:07:12 +0200 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2011-03-26 05:50:44 +0200 |
commit | 8403dcf857c9cc639e8162edd5d4df4af07274bc (patch) | |
tree | 2f127213e0df4691b06c549a8f20b3d5225b9220 /src/graphicsvertexes.h | |
parent | fc24490f1ecd186f3c294915fadee62c3053d841 (diff) | |
download | plus-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.h | 155 |
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 |