From 8403dcf857c9cc639e8162edd5d4df4af07274bc Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 26 Mar 2011 05:07:12 +0200 Subject: 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. --- src/graphicsvertexes.h | 155 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 src/graphicsvertexes.h (limited to 'src/graphicsvertexes.h') 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 . + */ + +#ifndef GRAPHICSVERTEXES_H +#define GRAPHICSVERTEXES_H + + +#include "main.h" + +#include "graphics.h" + +#ifdef USE_OPENGL +#define NO_SDL_GLEXT + +#include +#endif + +#include +#include +#include + +//include + + +struct DoubleRect +{ + SDL_Rect src; + SDL_Rect dst; +}; + +class SDLGraphicsVertexes +{ + public: + SDLGraphicsVertexes(); + + ~SDLGraphicsVertexes(); + + std::list mList; +}; + + +class OpenGL1GraphicsVertexes +{ +}; + +class OpenGLGraphicsVertexes +{ + public: + OpenGLGraphicsVertexes(); + + ~OpenGLGraphicsVertexes(); + + GLfloat *switchFloatTexArray(); + + GLint *switchIntVertArray(); + + GLint *switchIntTexArray(); + + void init(); + + void clear(); + + std::vector &getFloatTexPool() + { return mFloatTexPool; } + + std::vector &getIntVertPool() + { return mIntVertPool; } + + std::vector &getIntTexPool() + { return mIntTexPool; } + + void switchVp(int n); + + std::vector &getVp() + { return mVp; } + + private: + GLfloat *mFloatTexArray; + GLint *mIntTexArray; + GLint *mIntVertArray; + std::vector mFloatTexPool; + std::vector mIntVertPool; + std::vector mIntTexPool; + std::vector 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 *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 -- cgit v1.2.3-70-g09d2