/* * The ManaPlus Client * Copyright (C) 2011-2012 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 "localconsts.h" #ifdef USE_OPENGL #ifdef ANDROID #include #else #define GL_GLEXT_PROTOTYPES 1 #include #endif #include #include "mobileopenglgraphics.h" #include "normalopenglgraphics.h" #include "safeopenglgraphics.h" #endif #include "resources/image.h" #include #include #include struct DoubleRect final { SDL_Rect src; SDL_Rect dst; }; class SDLGraphicsVertexes final { public: SDLGraphicsVertexes(); A_DELETE_COPY(SDLGraphicsVertexes) ~SDLGraphicsVertexes(); std::vector mList; }; #ifdef USE_OPENGL class SafeOpenGLGraphicsVertexes final { }; class NormalOpenGLGraphicsVertexes final { public: NormalOpenGLGraphicsVertexes(); A_DELETE_COPY(NormalOpenGLGraphicsVertexes) ~NormalOpenGLGraphicsVertexes(); GLfloat *switchFloatTexArray(); GLint *switchIntVertArray(); GLint *switchIntTexArray(); GLshort *switchShortVertArray(); std::vector *getFloatTexPool() A_WARN_UNUSED { return &mFloatTexPool; } std::vector *getIntVertPool() A_WARN_UNUSED { return &mIntVertPool; } std::vector *getShortVertPool() A_WARN_UNUSED { return &mShortVertPool; } std::vector *getIntTexPool() A_WARN_UNUSED { return &mIntTexPool; } void switchVp(int n); GLfloat *continueFloatTexArray(); GLint *continueIntVertArray(); GLshort *continueShortVertArray(); GLint *continueIntTexArray(); int continueVp(); void updateVp(int n); std::vector *getVp() A_WARN_UNUSED { return &mVp; } void init(); void clear(); int ptr; GLfloat *mFloatTexArray; GLint *mIntTexArray; GLint *mIntVertArray; GLshort *mShortVertArray; std::vector mVp; std::vector mFloatTexPool; std::vector mIntVertPool; std::vector mShortVertPool; std::vector mIntTexPool; }; #endif typedef std::vector DoubleRects; class ImageVertexes final { public: ImageVertexes(); A_DELETE_COPY(ImageVertexes) ~ImageVertexes(); const Image *image; DoubleRects sdl; #ifdef USE_OPENGL NormalOpenGLGraphicsVertexes ogl; #endif }; typedef std::vector ImageVertexesVector; typedef ImageVertexesVector::const_iterator ImageCollectionCIter; class ImageCollection final { public: ImageCollection(); ~ImageCollection(); void clear(); #ifdef USE_OPENGL GLuint currentGLImage; #endif const Image *currentImage; ImageVertexes *currentVert; ImageVertexesVector draws; }; class GraphicsVertexes final { public: GraphicsVertexes(); A_DELETE_COPY(GraphicsVertexes) ~GraphicsVertexes(); static void setLoadAsOpenGL(int useOpenGL); SDLGraphicsVertexes sdl[5]; #ifdef USE_OPENGL // SafeOpenGLGraphicsVertexes ogl1[5]; NormalOpenGLGraphicsVertexes ogl[5]; #endif void init(const int x, const int y, const int w, const int h); void pushSDL(const SDL_Rect &r1, const SDL_Rect &r2); void clearSDL(); std::vector *getRectsSDL(); const std::vector *getRectsSDLconst() const; void incPtr(const int num = 1) { mPtr += num; } void setPtr(const int num) { mPtr = num; } #ifdef USE_OPENGL NormalOpenGLGraphicsVertexes &getOGL() A_WARN_UNUSED { return ogl[mPtr]; } const NormalOpenGLGraphicsVertexes &getOGLconst() const A_WARN_UNUSED { return ogl[mPtr]; } #endif int getX() const A_WARN_UNUSED { return mX; } int getY() const A_WARN_UNUSED { return mY; } int getW() const A_WARN_UNUSED { return mW; } int getH() const A_WARN_UNUSED { return mH; } int mX, mY, mW, mH; int mPtr; private: #ifdef USE_OPENGL static int mUseOpenGL; #endif }; #ifdef USE_OPENGL extern unsigned int vertexBufSize; #endif #endif // GRAPHICSVERTEXES_H