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.cpp | 144 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 src/graphicsvertexes.cpp (limited to 'src/graphicsvertexes.cpp') diff --git a/src/graphicsvertexes.cpp b/src/graphicsvertexes.cpp new file mode 100644 index 000000000..1170d55fd --- /dev/null +++ b/src/graphicsvertexes.cpp @@ -0,0 +1,144 @@ +/* + * 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 . + */ + +#include "graphicsvertexes.h" + +#include "main.h" + +#include "utils/dtor.h" + +#ifdef USE_OPENGL +int GraphicsVertexes::mUseOpenGL = 0; +const unsigned int vertexBufSize = 500; +#endif + + +SDLGraphicsVertexes::SDLGraphicsVertexes() +{ + +} + +SDLGraphicsVertexes::~SDLGraphicsVertexes() +{ + delete_all(mList); +} + + +OpenGLGraphicsVertexes::OpenGLGraphicsVertexes() : + mFloatTexArray(0), + mIntTexArray(0), + mIntVertArray(0) +{ +} + +OpenGLGraphicsVertexes::~OpenGLGraphicsVertexes() +{ + clear(); +} + +void OpenGLGraphicsVertexes::clear() +{ + delete_all(mFloatTexPool); + mFloatTexPool.clear(); + delete_all(mIntVertPool); + mIntVertPool.clear(); + delete_all(mIntTexPool); + mIntTexPool.clear(); + mVp.clear(); +} + +void OpenGLGraphicsVertexes::init() +{ + clear(); +} + +GLfloat *OpenGLGraphicsVertexes::switchFloatTexArray() +{ + mFloatTexArray = new GLfloat[vertexBufSize * 4 + 30]; + mFloatTexPool.push_back(mFloatTexArray); + return mFloatTexArray; +} + +GLint *OpenGLGraphicsVertexes::switchIntVertArray() +{ + mIntVertArray = new GLint[vertexBufSize * 4 + 30]; + mIntVertPool.push_back(mIntVertArray); + return mIntVertArray; +} + +GLint *OpenGLGraphicsVertexes::switchIntTexArray() +{ + mIntTexArray = new GLint[vertexBufSize * 4 + 30]; + mIntTexPool.push_back(mIntTexArray); + return mIntTexArray; +} + +void OpenGLGraphicsVertexes::switchVp(int n) +{ + mVp.push_back(n); +} + +GraphicsVertexes::GraphicsVertexes() : + mX(0), mY(0), + mW(0), mH(0), + mPtr(0) +{ +} + +GraphicsVertexes::~GraphicsVertexes() +{ +} + +void GraphicsVertexes::init(int x, int y, int w, int h) +{ + mPtr = 0; + mX = x; + mY = y; + mW = w; + mH = h; + for (int f = 0; f < 10; f ++) + { + sdl[mPtr].mList.clear(); + ogl[mPtr].init(); + } +} + +void GraphicsVertexes::setLoadAsOpenGL(int useOpenGL) +{ + mUseOpenGL = useOpenGL; +} + +void GraphicsVertexes::pushSDL(SDL_Rect r1, SDL_Rect r2) +{ + DoubleRect *r = new DoubleRect(); + r->src = r1; + r->dst = r2; + sdl[mPtr].mList.push_back(r); +} + +void GraphicsVertexes::clearSDL() +{ + sdl[mPtr].mList.clear(); +} + +std::list *GraphicsVertexes::getRectsSDL() +{ + return &sdl[mPtr].mList; +} -- cgit v1.2.3-60-g2f50