summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
Diffstat (limited to 'src/render')
-rw-r--r--src/render/graphics.cpp775
-rw-r--r--src/render/graphics.h557
-rw-r--r--src/render/graphics_calcImageRect.hpp94
-rw-r--r--src/render/graphics_drawImageRect.hpp83
-rw-r--r--src/render/graphicsdef.hpp154
-rw-r--r--src/render/imagegraphics.cpp64
-rw-r--r--src/render/imagegraphics.h208
-rw-r--r--src/render/mobileopengl2graphics.cpp1389
-rw-r--r--src/render/mobileopengl2graphics.h164
-rw-r--r--src/render/mobileopenglgraphics.cpp1385
-rw-r--r--src/render/mobileopenglgraphics.h115
-rw-r--r--src/render/modernopenglgraphics.cpp1403
-rw-r--r--src/render/modernopenglgraphics.h159
-rw-r--r--src/render/nacl/naclfunctions.h35
-rw-r--r--src/render/nacl/naclgles.cpp55
-rw-r--r--src/render/nacl/naclgles.h32
-rw-r--r--src/render/normalopenglgraphics.cpp1782
-rw-r--r--src/render/normalopenglgraphics.h133
-rw-r--r--src/render/nullopenglgraphics.cpp1251
-rw-r--r--src/render/nullopenglgraphics.h111
-rw-r--r--src/render/opengl/mgl.cpp34
-rw-r--r--src/render/opengl/mgl.h38
-rw-r--r--src/render/opengl/mgl.hpp144
-rw-r--r--src/render/opengl/mglcheck.h30
-rw-r--r--src/render/opengl/mgldefines.h136
-rw-r--r--src/render/opengl/mglemu.cpp54
-rw-r--r--src/render/opengl/mglemu.h41
-rw-r--r--src/render/opengl/mglfunctions.h101
-rw-r--r--src/render/opengl/mgltypes.h226
-rw-r--r--src/render/opengl/naclglfunctions.h322
-rw-r--r--src/render/opengl/opengldebug.h38
-rw-r--r--src/render/openglgraphicsdef.hpp58
-rw-r--r--src/render/openglgraphicsdef1.hpp30
-rw-r--r--src/render/openglgraphicsdefadvanced.hpp43
-rw-r--r--src/render/openglx/mglx.cpp34
-rw-r--r--src/render/openglx/mglx.h35
-rw-r--r--src/render/openglx/mglx.hpp29
-rw-r--r--src/render/openglx/mglxinit.cpp42
-rw-r--r--src/render/openglx/mglxinit.h32
-rw-r--r--src/render/openglx/mglxtypes.h41
-rw-r--r--src/render/renderers.cpp117
-rw-r--r--src/render/renderers.h32
-rw-r--r--src/render/rendererslistsdl.h176
-rw-r--r--src/render/rendererslistsdl2.h184
-rw-r--r--src/render/safeopenglgraphics.cpp763
-rw-r--r--src/render/safeopenglgraphics.h80
-rw-r--r--src/render/sdl2graphics.cpp789
-rw-r--r--src/render/sdl2graphics.h116
-rw-r--r--src/render/sdl2softwaregraphics.cpp1530
-rw-r--r--src/render/sdl2softwaregraphics.h89
-rw-r--r--src/render/sdlgraphics.cpp1518
-rw-r--r--src/render/sdlgraphics.h75
-rw-r--r--src/render/shaders/shader.cpp41
-rw-r--r--src/render/shaders/shader.h45
-rw-r--r--src/render/shaders/shaderprogram.cpp54
-rw-r--r--src/render/shaders/shaderprogram.h51
-rw-r--r--src/render/shaders/shadersmanager.cpp146
-rw-r--r--src/render/shaders/shadersmanager.h57
-rw-r--r--src/render/softwaregraphicsdef.hpp27
-rw-r--r--src/render/surfacegraphics.cpp156
-rw-r--r--src/render/surfacegraphics.h218
-rw-r--r--src/render/vertexes/imagecollection.cpp52
-rw-r--r--src/render/vertexes/imagecollection.h52
-rw-r--r--src/render/vertexes/imagevertexes.cpp41
-rw-r--r--src/render/vertexes/imagevertexes.h59
-rw-r--r--src/render/vertexes/openglgraphicsvertexes.cpp225
-rw-r--r--src/render/vertexes/openglgraphicsvertexes.h109
67 files changed, 0 insertions, 18259 deletions
diff --git a/src/render/graphics.cpp b/src/render/graphics.cpp
deleted file mode 100644
index 09a21fff1..000000000
--- a/src/render/graphics.cpp
+++ /dev/null
@@ -1,775 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-/* _______ __ __ __ ______ __ __ _______ __ __
- * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\
- * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / /
- * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / /
- * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / /
- * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ /
- * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/
- *
- * Copyright (c) 2004 - 2008 Olof Naessén and Per Larsson
- *
- *
- * Per Larsson a.k.a finalman
- * Olof Naessén a.k.a jansem/yakslem
- *
- * Visit: http://guichan.sourceforge.net
- *
- * License: (BSD)
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name of Guichan nor the names of its contributors may
- * be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "render/graphics.h"
-
-#ifdef USE_OPENGL
-#include "configuration.h"
-#include "graphicsmanager.h"
-#endif // USE_OPENGL
-
-#if defined(USE_OPENGL) && defined(USE_X11)
-#include "render/openglx/mglxinit.h"
-#endif // defined(USE_OPENGL) && defined(USE_X11)
-
-#ifdef USE_OPENGL
-#include "resources/openglimagehelper.h"
-#ifndef ANDROID
-#include "resources/safeopenglimagehelper.h"
-#endif // ANDROID
-#ifdef __native_client__
-#include "render/nacl/naclfunctions.h"
-#include "render/nacl/naclgles.h"
-#endif // __native_client__
-#else // USE_OPENGL
-#ifndef USE_SDL2
-#include "resources/imagehelper.h"
-#endif // USE_SDL2
-#endif // USE_OPENGL
-
-#ifdef USE_OPENGL
-#ifdef __APPLE__
-#include <OpenGL/OpenGL.h>
-#endif // __APPLE__
-#include "render/opengl/mgldefines.h"
-RENDER_OPENGL_MGLDEFINES_H
-#endif // USE_OPENGL
-
-#include "debug.h"
-
-#ifdef USE_OPENGL
-#ifndef GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX
-#define GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049
-#endif // GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX
-#endif // USE_OPENGL
-
-Graphics *mainGraphics A_NONNULLPOINTER = nullptr;
-
-#ifdef USE_SDL2
-SDL_Renderer *restrict Graphics::mRenderer = nullptr;
-#endif // USE_SDL2
-#ifdef USE_OPENGL
-#ifdef USE_SDL2
-SDL_GLContext Graphics::mGLContext = nullptr;
-#else // USE_SDL2
-
-void *restrict Graphics::mGLContext = nullptr;
-#endif // USE_SDL2
-#endif // USE_OPENGL
-
-Graphics::Graphics() :
- mWidth(0),
- mHeight(0),
- mActualWidth(0),
- mActualHeight(0),
- mClipStack(1000),
- mWindow(nullptr),
- mBpp(0),
- mAlpha(false),
- mFullscreen(false),
- mHWAccel(false),
- mRedraw(false),
- mDoubleBuffer(false),
- mRect(),
- mSecure(false),
- mOpenGL(RENDER_SOFTWARE),
- mEnableResize(false),
- mNoFrame(false),
- mAllowHighDPI(false),
- mName("Unknown"),
- mStartFreeMem(0),
- mSync(false),
- mScale(1),
- mColor()
-{
- mRect.x = 0;
- mRect.y = 0;
- mRect.w = 0;
- mRect.h = 0;
-}
-
-Graphics::~Graphics()
-{
- endDraw();
-}
-
-void Graphics::cleanUp()
-{
-#ifdef USE_SDL2
- if (mRenderer)
- {
- SDL_DestroyRenderer(mRenderer);
- mRenderer = nullptr;
- }
-#ifdef USE_OPENGL
- if (mGLContext)
- {
- SDL_GL_DeleteContext(mGLContext);
- mGLContext = nullptr;
- }
-#endif // USE_OPENGL
-#endif // USE_SDL2
-}
-
-void Graphics::setSync(const bool sync) restrict2
-{
- mSync = sync;
-}
-
-void Graphics::setMainFlags(const int w, const int h,
- const int scale,
- const int bpp,
- const bool fs,
- const bool hwaccel,
- const bool resize,
- const bool noFrame,
- const bool allowHighDPI) restrict2
-{
- logger->log("graphics backend: %s", getName().c_str());
- logger->log("Setting video mode %dx%d %s",
- w, h, fs ? "fullscreen" : "windowed");
-
- mBpp = bpp;
- mFullscreen = fs;
- mHWAccel = hwaccel;
- mEnableResize = resize;
- mNoFrame = noFrame;
- mAllowHighDPI = allowHighDPI;
- mActualWidth = w;
- mActualHeight = h;
- setScale(scale);
-}
-
-void Graphics::setScale(int scale) restrict2
-{
- if (isAllowScale())
- {
- if (scale == 0)
- scale = 1;
- int scaleW = mActualWidth / scale;
- int scaleH = mActualHeight / scale;
- if (scaleW < 470)
- {
- scale = mActualWidth / 470;
- if (scale < 1)
- scale = 1;
- scaleH = mActualHeight / scale;
- }
- if (scaleH < 320)
- {
- scale = mActualHeight / 320;
- if (scale < 1)
- scale = 1;
- }
- logger->log("set scale: %d", scale);
- mScale = scale;
- mWidth = mActualWidth / mScale;
- mHeight = mActualHeight / mScale;
- }
- else
- {
- mScale = 1;
- mWidth = mActualWidth;
- mHeight = mActualHeight;
- }
- mRect.w = static_cast<RectSize>(mWidth);
- mRect.h = static_cast<RectSize>(mHeight);
-}
-
-int Graphics::getOpenGLFlags() const restrict2
-{
-#ifdef USE_OPENGL
-
-#ifdef USE_SDL2
- int displayFlags = SDL_WINDOW_OPENGL;
- if (mFullscreen)
- displayFlags |= SDL_WINDOW_FULLSCREEN;
-#if SDL_VERSION_ATLEAST(2, 0, 1)
- if (mAllowHighDPI)
- displayFlags |= SDL_WINDOW_ALLOW_HIGHDPI;
-#endif // SDL_VERSION_ATLEAST(2, 0, 1)
-#else // USE_SDL2
-
- int displayFlags = SDL_ANYFORMAT | SDL_OPENGL;
-#endif // USE_SDL2
-
- if (mFullscreen)
- {
- displayFlags |= SDL_FULLSCREEN;
- }
- else
- {
- // Resizing currently not supported on Windows, where it would require
- // reuploading all textures.
-#if !defined(_WIN32)
- if (mEnableResize)
- displayFlags |= SDL_RESIZABLE;
-#endif // !defined(_WIN32)
- }
-
- if (mNoFrame)
- displayFlags |= SDL_NOFRAME;
-
- return displayFlags;
-#else // USE_OPENGL
-
- return 0;
-#endif // USE_OPENGL
-}
-
-bool Graphics::setOpenGLMode() restrict2
-{
-#ifdef USE_OPENGL
- SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
- if ((mWindow = graphicsManager.createWindow(
- mActualWidth, mActualHeight,
- mBpp, getOpenGLFlags())) == nullptr)
- {
- logger->log("Window/context creation failed");
- mRect.w = 0;
- mRect.h = 0;
- return false;
- }
-
-#if defined(USE_X11)
- Glx::initFunctions();
-#endif // defined(USE_X11)
-#ifdef __native_client__
- NaclGles::initGles();
-#endif // __native_client__
-
-#ifdef USE_SDL2
- int w1 = 0;
- int h1 = 0;
- SDL_GetWindowSize(mWindow, &w1, &h1);
- mRect.w = CAST_S32(w1 / mScale);
- mRect.h = CAST_S32(h1 / mScale);
-
- createGLContext(config.getBoolValue("openglContext"));
-#else // USE_SDL2
-
- createGLContext(config.getBoolValue("openglContext"));
- mRect.w = CAST_U16(mWindow->w / mScale);
- mRect.h = CAST_U16(mWindow->h / mScale);
-
-#endif // USE_SDL2
-
-#ifdef __APPLE__
- if (mSync)
- {
- const GLint VBL = 1;
- CGLSetParameter(CGLGetCurrentContext(), kCGLCPSwapInterval, &VBL);
- }
-#endif // __APPLE__
-
- graphicsManager.setGLVersion();
- graphicsManager.logVersion();
-
- // Setup OpenGL
- glViewport(0, 0, mActualWidth, mActualHeight);
- int gotDoubleBuffer = 0;
- SDL_GL_GetAttribute(SDL_GL_DOUBLEBUFFER, &gotDoubleBuffer);
- logger->log("Using OpenGL %s double buffering.",
- (gotDoubleBuffer != 0 ? "with" : "without"));
-
- graphicsManager.initOpenGL();
- initArrays(graphicsManager.getMaxVertices());
- graphicsManager.updateTextureCompressionFormat();
- graphicsManager.updateTextureFormat();
- updateMemoryInfo();
-
- GLint texSize;
- bool rectTex = graphicsManager.supportExtension(
- "GL_ARB_texture_rectangle") ||
- graphicsManager.supportExtension("GL_EXT_texture_rectangle");
-
- if (rectTex
- && OpenGLImageHelper::getInternalTextureType() == 4
- && getOpenGL() != RENDER_GLES_OPENGL
- && getOpenGL() != RENDER_GLES2_OPENGL
- && getOpenGL() != RENDER_MODERN_OPENGL
- && config.getBoolValue("rectangulartextures")
- && !graphicsManager.isUseTextureSampler())
- {
- logger->log1("using GL_ARB_texture_rectangle");
- OpenGLImageHelper::mTextureType = GL_TEXTURE_RECTANGLE_ARB;
- glEnable(GL_TEXTURE_RECTANGLE_ARB);
- glGetIntegerv(GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB, &texSize);
- OpenGLImageHelper::mTextureSize = texSize;
- logger->log("OpenGL texture size: %d pixels (rectangle textures)",
- OpenGLImageHelper::mTextureSize);
-#ifndef ANDROID
- SafeOpenGLImageHelper::mTextureType = GL_TEXTURE_RECTANGLE_ARB;
- SafeOpenGLImageHelper::mTextureSize = texSize;
-#endif // ANDROID
- }
- else
- {
- glGetIntegerv(GL_MAX_TEXTURE_SIZE, &texSize);
- OpenGLImageHelper::mTextureType = GL_TEXTURE_2D;
- OpenGLImageHelper::mTextureSize = texSize;
-#ifndef ANDROID
- SafeOpenGLImageHelper::mTextureType = GL_TEXTURE_2D;
- SafeOpenGLImageHelper::mTextureSize = texSize;
-#endif // ANDROID
-
- logger->log("OpenGL texture size: %d pixels",
- OpenGLImageHelper::mTextureSize);
- }
- return videoInfo();
-#else // USE_OPENGL
-
- return false;
-#endif // USE_OPENGL
-}
-
-int Graphics::getSoftwareFlags() const restrict2
-{
-#ifdef USE_SDL2
- int displayFlags = SDL_WINDOW_SHOWN;
-#if SDL_VERSION_ATLEAST(2, 0, 1)
- if (mAllowHighDPI)
- displayFlags |= SDL_WINDOW_ALLOW_HIGHDPI;
-#endif // SDL_VERSION_ATLEAST(2, 0, 1)
-#else // USE_SDL2
-
- int displayFlags = SDL_ANYFORMAT;
-
- if (mHWAccel)
- displayFlags |= SDL_HWSURFACE | SDL_DOUBLEBUF;
- else
- displayFlags |= SDL_SWSURFACE;
-#endif // USE_SDL2
-
- if (mFullscreen)
- displayFlags |= SDL_FULLSCREEN;
- else if (mEnableResize)
- displayFlags |= SDL_RESIZABLE;
-
- if (mNoFrame)
- displayFlags |= SDL_NOFRAME;
- return displayFlags;
-}
-
-#ifdef USE_OPENGL
-void Graphics::createGLContext(const bool custom A_UNUSED) restrict2
-{
-#ifdef USE_SDL2
- mGLContext = SDL_GL_CreateContext(mWindow);
-#endif // USE_SDL2
-}
-#endif // USE_OPENGL
-
-void Graphics::updateMemoryInfo() restrict2
-{
-#ifdef USE_OPENGL
- if (mStartFreeMem != 0)
- return;
-
- if (graphicsManager.supportExtension("GL_NVX_gpu_memory_info"))
- {
- glGetIntegerv(GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX,
- &mStartFreeMem);
- logger->log("free video memory: %d", mStartFreeMem);
- }
-#endif // USE_OPENGL
-}
-
-int Graphics::getMemoryUsage() const restrict2
-{
-#ifdef USE_OPENGL
- if (mStartFreeMem == 0)
- return 0;
-
- if (graphicsManager.supportExtension("GL_NVX_gpu_memory_info"))
- {
- GLint val;
- glGetIntegerv(GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX,
- &val);
- return mStartFreeMem - val;
- }
-#endif // USE_OPENGL
- return 0;
-}
-
-#ifdef USE_SDL2
-void Graphics::dumpRendererInfo(const char *restrict const str,
- const SDL_RendererInfo &restrict info)
- restrict2
-{
- logger->log(str, info.name);
- logger->log("flags:");
- if (info.flags & SDL_RENDERER_SOFTWARE)
- logger->log(" software");
- if (info.flags & SDL_RENDERER_ACCELERATED)
- logger->log(" accelerated");
- if (info.flags & SDL_RENDERER_PRESENTVSYNC)
- logger->log(" vsync");
- if (info.flags & SDL_RENDERER_TARGETTEXTURE)
- logger->log(" texture target");
- logger->log("max texture size: %d,%d",
- info.max_texture_width,
- info.max_texture_height);
- const size_t sz = CAST_SIZE(info.num_texture_formats);
- logger->log("texture formats:");
- for (size_t f = 0; f < sz; f ++)
- logger->log(" %u", info.texture_formats[f]);
-}
-#endif // USE_SDL2
-
-bool Graphics::videoInfo() restrict2
-{
- logger->log("SDL video info");
-#ifdef USE_SDL2
- logger->log("Using video driver: %s", SDL_GetCurrentVideoDriver());
-
- if (mRenderer)
- {
- SDL_RendererInfo info;
- SDL_GetRendererInfo(mRenderer, &info);
- dumpRendererInfo("Current SDL renderer name: %s", info);
-
- const int num = SDL_GetNumRenderDrivers();
- logger->log("Known renderers");
- for (int f = 0; f < num; f ++)
- {
- if (!SDL_GetRenderDriverInfo(f, &info))
- dumpRendererInfo("renderer name: %s", info);
- }
- }
-#else // USE_SDL2
-
- char videoDriverName[65];
- if (SDL_VideoDriverName(videoDriverName, 64) != nullptr)
- logger->log("Using video driver: %s", videoDriverName);
- else
- logger->log1("Using video driver: unknown");
- mDoubleBuffer = ((mWindow->flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF);
- logger->log("Double buffer mode: %s", mDoubleBuffer ? "yes" : "no");
-
- ImageHelper::dumpSurfaceFormat(mWindow);
-
- const SDL_VideoInfo *restrict const vi = SDL_GetVideoInfo();
- if (vi == nullptr)
- return false;
-
- logger->log("Possible to create hardware surfaces: %s",
- ((vi->hw_available) != 0u ? "yes" : "no"));
- logger->log("Window manager available: %s",
- ((vi->wm_available) != 0u ? "yes" : "no"));
- logger->log("Accelerated hardware to hardware blits: %s",
- ((vi->blit_hw) != 0u ? "yes" : "no"));
- logger->log("Accelerated hardware to hardware colorkey blits: %s",
- ((vi->blit_hw_CC) != 0u ? "yes" : "no"));
- logger->log("Accelerated hardware to hardware alpha blits: %s",
- ((vi->blit_hw_A) != 0u ? "yes" : "no"));
- logger->log("Accelerated software to hardware blits: %s",
- ((vi->blit_sw) != 0u ? "yes" : "no"));
- logger->log("Accelerated software to hardware colorkey blits: %s",
- ((vi->blit_sw_CC) != 0u ? "yes" : "no"));
- logger->log("Accelerated software to hardware alpha blits: %s",
- ((vi->blit_sw_A) != 0u ? "yes" : "no"));
- logger->log("Accelerated color fills: %s",
- ((vi->blit_fill) != 0u ? "yes" : "no"));
-#endif // USE_SDL2
-
- return true;
-}
-
-bool Graphics::setFullscreen(const bool fs) restrict2
-{
- if (mFullscreen == fs)
- return true;
-
- return setVideoMode(mActualWidth,
- mActualHeight,
- mScale,
- mBpp,
- fs,
- mHWAccel,
- mEnableResize,
- mNoFrame,
- mAllowHighDPI);
-}
-
-bool Graphics::resizeScreen(const int width,
- const int height) restrict2
-{
-#ifdef USE_SDL2
- endDraw();
-
- mRect.w = CAST_S32(width / mScale);
- mRect.h = CAST_S32(height / mScale);
- mWidth = width / mScale;
- mHeight = height / mScale;
- mActualWidth = width;
- mActualHeight = height;
-
-#ifdef USE_OPENGL
- // +++ probably this way will not work in windows/mac
- // Setup OpenGL
- glViewport(0, 0, mActualWidth, mActualHeight);
- glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
-#else // USE_OPENGL
- // +++ need impliment resize in soft mode
-#endif // USE_OPENGL
-
- screenResized();
- beginDraw();
- return true;
-
-#else // USE_SDL2
-
- const int prevWidth = mWidth;
- const int prevHeight = mHeight;
-
- endDraw();
-
- bool success = true;
-#ifdef __native_client__
- if (mOpenGL != RENDER_SOFTWARE)
- {
- mRect.w = CAST_S32(width / mScale);
- mRect.h = CAST_S32(height / mScale);
- mWidth = width / mScale;
- mHeight = height / mScale;
- mActualWidth = width;
- mActualHeight = height;
-#ifdef USE_OPENGL
- naclResizeBuffers(mActualWidth, mActualHeight);
- glViewport(0, 0, mActualWidth, mActualHeight);
-#endif // USE_OPENGL
- }
- else
-#endif // __native_client__
- {
- success = setVideoMode(width, height,
- mScale,
- mBpp,
- mFullscreen,
- mHWAccel,
- mEnableResize,
- mNoFrame,
- mAllowHighDPI);
-
- // If it didn't work, try to restore the previous size. If that didn't
- // work either, bail out (but then we're in deep trouble).
- if (!success)
- {
- if (!setVideoMode(prevWidth, prevHeight,
- mScale,
- mBpp,
- mFullscreen,
- mHWAccel,
- mEnableResize,
- mNoFrame,
- mAllowHighDPI))
- {
- return false;
- }
- }
- }
-
- screenResized();
- beginDraw();
-
- return success;
-#endif // USE_SDL2
-}
-
-int Graphics::getWidth() const restrict2
-{
- return mWidth;
-}
-
-int Graphics::getHeight() const restrict2
-{
- return mHeight;
-}
-
-void Graphics::drawNet(const int x1, const int y1,
- const int x2, const int y2,
- const int width, const int height) restrict2
-{
- for (int y = y1; y < y2; y += height)
- drawLine(x1, y, x2, y);
-
- for (int x = x1; x < x2; x += width)
- drawLine(x, y1, x, y2);
-}
-
-#ifdef USE_SDL2
-void Graphics::setWindowSize(const int width,
- const int height) restrict2
-{
- SDL_SetWindowSize(mWindow, width, height);
-}
-#else // USE_SDL2
-void Graphics::setWindowSize(const int width A_UNUSED,
- const int height A_UNUSED) restrict2
-{
-}
-#endif // USE_SDL2
-
-void Graphics::pushClipArea(const Rect &restrict area) restrict2
-{
- // Ignore area with a negate width or height
- // by simple pushing an empty clip area
- // to the stack.
- if (area.width < 0 || area.height < 0)
- {
- ClipRect &carea = mClipStack.push();
- carea.x = 0;
- carea.y = 0;
- carea.width = 0;
- carea.height = 0;
- carea.xOffset = 0;
- carea.yOffset = 0;
- return;
- }
-
- if (mClipStack.empty())
- {
- ClipRect &carea = mClipStack.push();
- carea.x = area.x;
- carea.y = area.y;
- carea.width = area.width;
- carea.height = area.height;
- carea.xOffset = area.x;
- carea.yOffset = area.y;
- return;
- }
-
- const ClipRect &top = mClipStack.top();
- ClipRect &carea = mClipStack.push();
- carea.x = area.x + top.xOffset;
- carea.y = area.y + top.yOffset;
- carea.width = area.width;
- carea.height = area.height;
- carea.xOffset = top.xOffset + area.x;
- carea.yOffset = top.yOffset + area.y;
-
- // Clamp the pushed clip rectangle.
- if (carea.x < top.x)
- carea.x = top.x;
-
- if (carea.y < top.y)
- carea.y = top.y;
-
- if (carea.x + carea.width > top.x + top.width)
- {
- carea.width = top.x + top.width - carea.x;
-
- if (carea.width < 0)
- carea.width = 0;
- }
-
- if (carea.y + carea.height > top.y + top.height)
- {
- carea.height = top.y + top.height - carea.y;
-
- if (carea.height < 0)
- carea.height = 0;
- }
-}
-
-void Graphics::popClipArea() restrict2
-{
- if (mClipStack.empty())
- return;
-
- mClipStack.pop();
-}
-
-#ifdef USE_OPENGL
-void Graphics::setOpenGLFlags() restrict2
-{
- // here disable/enable probably need convert to mgl
-
- glEnable(GL_SCISSOR_TEST);
-
- glDisable(GL_MULTISAMPLE);
- glDisable(GL_DITHER);
- glDisable(GL_DEPTH_TEST);
- glDisable(GL_LINE_SMOOTH);
- glDisable(GL_POLYGON_SMOOTH);
- glDisable(GL_STENCIL_TEST);
- glDisable(GL_COLOR_LOGIC_OP);
- glDisable(GL_DEPTH_BOUNDS_TEST_EXT);
- glDisable(GL_DEPTH_CLAMP);
- glDisable(GL_RASTERIZER_DISCARD);
- glDisable(GL_SAMPLE_MASK);
-
-#ifndef ANDROID
-#ifndef __MINGW32__
- glHint(GL_TEXTURE_COMPRESSION_HINT, GL_FASTEST);
-#endif // __MINGW32__
-#endif // ANDROID
-
- glHint(GL_TEXTURE_COMPRESSION_HINT_ARB, GL_FASTEST);
-
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-}
-#endif // USE_OPENGL
diff --git a/src/render/graphics.h b/src/render/graphics.h
deleted file mode 100644
index 87f2f1429..000000000
--- a/src/render/graphics.h
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-/* _______ __ __ __ ______ __ __ _______ __ __
- * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\
- * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / /
- * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / /
- * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / /
- * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ /
- * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/
- *
- * Copyright (c) 2004 - 2008 Olof Naessén and Per Larsson
- *
- *
- * Per Larsson a.k.a finalman
- * Olof Naessén a.k.a jansem/yakslem
- *
- * Visit: http://guichan.sourceforge.net
- *
- * License: (BSD)
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name of Guichan nor the names of its contributors may
- * be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef RENDER_GRAPHICS_H
-#define RENDER_GRAPHICS_H
-
-#include "sdlshared.h"
-
-#include "enums/render/rendertype.h"
-
-#include "gui/color.h"
-#include "gui/cliprect.h"
-
-#include "resources/mstack.h"
-
-PRAGMA48(GCC diagnostic push)
-PRAGMA48(GCC diagnostic ignored "-Wshadow")
-#ifdef USE_SDL2
-#include <SDL_render.h>
-#else // USE_SDL2
-#include <SDL_video.h>
-#endif // USE_SDL2
-PRAGMA48(GCC diagnostic pop)
-
-#include "localconsts.h"
-
-#ifdef USE_SDL2
-#define RectPos int32_t
-#define RectSize int32_t
-#else // USE_SDL2
-#define RectPos int16_t
-#define RectSize uint16_t
-#endif // USE_SDL2
-
-class Image;
-class ImageCollection;
-class ImageRect;
-class ImageVertexes;
-
-struct SDL_Window;
-
-/**
- * A central point of control for graphics.
- */
-class Graphics notfinal
-{
- public:
-#ifdef USE_OPENGL
- friend class OpenGLScreenshotHelper;
-#endif // USE_SDL2
-
- friend class SdlScreenshotHelper;
-
- A_DELETE_COPY(Graphics)
-
- /**
- * Destructor.
- */
- virtual ~Graphics();
-
- static void cleanUp();
-
- /**
- * Alignments for text drawing.
- */
- enum Alignment
- {
- LEFT = 0,
- CENTER,
- RIGHT
- };
-
- void setWindow(SDL_Window *restrict const window,
- const int width, const int height) restrict2 noexcept2
- {
- mWindow = window;
- mRect.w = static_cast<RectSize>(width);
- mRect.h = static_cast<RectSize>(height);
- }
-
- SDL_Window *getWindow() const restrict2 noexcept2
- { return mWindow; }
-
- /**
- * Sets whether vertical refresh syncing is enabled. Takes effect after
- * the next call to setVideoMode(). Only implemented on MacOS for now.
- */
- void setSync(const bool sync) restrict2;
-
- bool getSync() const restrict2 noexcept2 A_WARN_UNUSED
- { return mSync; }
-
- /**
- * Try to create a window with the given settings.
- */
- virtual bool setVideoMode(const int w, const int h,
- const int scale,
- const int bpp,
- const bool fs,
- const bool hwaccel,
- const bool resize,
- const bool noFrame,
- const bool allowHighDPI) restrict2 = 0;
-
- /**
- * Set fullscreen mode.
- */
- bool setFullscreen(const bool fs) restrict2;
-
- /**
- * Resize the window to the specified size.
- */
- virtual bool resizeScreen(const int width,
- const int height) restrict2;
-
- virtual void restoreContext() restrict2
- { }
-
- /**
- * Draws a resclaled version of the image
- */
- virtual void drawRescaledImage(const Image *restrict const image,
- int dstX, int dstY,
- const int desiredWidth,
- const int desiredHeight) restrict2 = 0;
-
- virtual void drawPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2 = 0;
-
- /**
- * Draw a pattern based on a rescaled version of the given image...
- */
- virtual void drawRescaledPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h,
- const int scaledWidth,
- const int scaledHeight) restrict2 = 0;
-
- virtual void drawImageRect(const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2 = 0;
-
- virtual void calcPattern(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) const restrict2 = 0;
-
- virtual void calcPattern(ImageCollection *restrict const vert,
- const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) const restrict2 = 0;
-
- virtual void calcTileVertexes(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- int x,
- int y) const restrict2 A_NONNULL(2, 3)
- = 0;
-
- virtual void calcTileSDL(ImageVertexes *restrict const vert A_UNUSED,
- int x A_UNUSED,
- int y A_UNUSED) const restrict2
- {
- }
-
- virtual void drawTileVertexes(const ImageVertexes *restrict const vert)
- restrict2 = 0;
-
- virtual void drawTileCollection(const ImageCollection
- *restrict const vertCol) restrict2
- A_NONNULL(2) = 0;
-
- virtual void calcTileCollection(ImageCollection *restrict const
- vertCol,
- const Image *restrict const image,
- int x,
- int y) restrict2 = 0;
-
- virtual void calcWindow(ImageCollection *restrict const vertCol,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2 A_NONNULL(2) = 0;
-
- virtual void fillRectangle(const Rect &restrict rectangle)
- restrict2 = 0;
-
- /**
- * Updates the screen. This is done by either copying the buffer to the
- * screen or swapping pages.
- */
- virtual void updateScreen() restrict2 = 0;
-
- void setWindowSize(const int width,
-#ifdef USE_SDL2
- const int height) restrict2;
-#else // USE_SDL2
- const int height) restrict2 A_CONST;
-#endif // USE_SDL2
-
- /**
- * Returns the width of the screen.
- */
- int getWidth() const restrict2 A_WARN_UNUSED;
-
- /**
- * Returns the height of the screen.
- */
- int getHeight() const restrict2 A_WARN_UNUSED;
-
- int getMemoryUsage() const restrict2 A_WARN_UNUSED;
-
- virtual void drawNet(const int x1, const int y1,
- const int x2, const int y2,
- const int width, const int height) restrict2;
-
- ClipRect &getTopClip() const restrict2 A_WARN_UNUSED
- { return mClipStack.top(); }
-
- void setRedraw(const bool n) restrict2 noexcept2
- { mRedraw = n; }
-
- bool getRedraw() const restrict2 noexcept2 A_WARN_UNUSED
- { return mRedraw; }
-
- void setSecure(const bool n) restrict2 noexcept2
- { mSecure = n; }
-
- bool getSecure() const restrict2 noexcept2 A_WARN_UNUSED
- { return mSecure; }
-
- int getBpp() const restrict2 noexcept2 A_WARN_UNUSED
- { return mBpp; }
-
- bool getFullScreen() const restrict2 noexcept2 A_WARN_UNUSED
- { return mFullscreen; }
-
- bool getHWAccel() const restrict2 noexcept2 A_WARN_UNUSED
- { return mHWAccel; }
-
- bool getDoubleBuffer() const restrict2 noexcept2 A_WARN_UNUSED
- { return mDoubleBuffer; }
-
- RenderType getOpenGL() const restrict2 noexcept2 A_WARN_UNUSED
- { return mOpenGL; }
-
- void setNoFrame(const bool n) restrict2 noexcept2
- { mNoFrame = n; }
-
- const std::string &getName() const restrict2 noexcept2 A_WARN_UNUSED
- { return mName; }
-
- virtual void initArrays(const int vertCount A_UNUSED) restrict2
- { }
-
- virtual void setColor(const Color &restrict color) restrict2
- {
- mColor = color;
- mAlpha = (color.a != 255);
- }
-
- const Color &getColor() const restrict2 noexcept2
- { return mColor; }
-
-#ifdef DEBUG_DRAW_CALLS
- virtual unsigned int getDrawCalls() const restrict2
- { return 0; }
-#endif // DEBUG_DRAW_CALLS
-#ifdef DEBUG_BIND_TEXTURE
- virtual unsigned int getBinds() const restrict2
- { return 0; }
-#endif // DEBUG_BIND_TEXTURE
-#ifdef USE_SDL2
- void dumpRendererInfo(const char *restrict const str,
- const SDL_RendererInfo &restrict info) restrict2;
-
- virtual void setRendererFlags(const uint32_t flags A_UNUSED) restrict2
- { }
-#endif // USE_SDL2
-
- /**
- * Blits an image onto the screen.
- *
- * @return <code>true</code> if the image was blitted properly
- * <code>false</code> otherwise.
- */
- virtual void drawImage(const Image *restrict const image,
- int dstX, int dstY) restrict2 = 0;
-
- virtual void copyImage(const Image *restrict const image,
- int dstX, int dstY) restrict2 = 0;
-
- virtual void drawImageCached(const Image *restrict const image,
- int srcX, int srcY) restrict2 = 0;
-
- virtual void drawPatternCached(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2 = 0;
-
- virtual void completeCache() restrict2 = 0;
-
- int getScale() const restrict2 noexcept2
- { return mScale; }
-
- virtual bool isAllowScale() const restrict2 noexcept2
- { return false; }
-
- void setScale(int scale) restrict2;
-
- /**
- * Pushes a clip area onto the stack. The x and y coordinates in the
- * rectangle is relative to the last pushed clip area.
- * If the new area falls outside the current clip area, it will be
- * clipped as necessary.
- *
- * If a clip area is outside of the top clip area a clip area with
- * zero width and height will be pushed.
- *
- * @param area The clip area to be pushed onto the stack.
- */
- virtual void pushClipArea(const Rect &restrict area) restrict2;
-
- /**
- * Removes the top most clip area from the stack.
- *
- * @throws Exception if the stack is empty.
- */
- virtual void popClipArea() restrict2;
-
- /**
- * Ddraws a line.
- *
- * @param x1 The first x coordinate.
- * @param y1 The first y coordinate.
- * @param x2 The second x coordinate.
- * @param y2 The second y coordinate.
- */
- virtual void drawLine(int x1, int y1,
- int x2, int y2) restrict2 = 0;
-
- /**
- * Draws a simple, non-filled, rectangle with a one pixel width.
- *
- * @param rectangle The rectangle to draw.
- */
- virtual void drawRectangle(const Rect &restrict rectangle)
- restrict2 = 0;
-
-#ifdef USE_OPENGL
-#ifdef USE_SDL2
- virtual void createGLContext(const bool custom) restrict2;
-#else // USE_SDL2
-
- virtual void createGLContext(const bool custom) restrict2 A_CONST;
-#endif // USE_SDL2
-#endif // USE_OPENGL
-
- /**
- * Draws a single point/pixel.
- *
- * @param x The x coordinate.
- * @param y The y coordinate.
- */
- virtual void drawPoint(int x, int y) restrict2 = 0;
-
- /**
- * Initializes drawing. Called by the Gui when Gui::draw() is called.
- * It is needed by some implementations of Graphics to perform
- * preparations before drawing. An example of such an implementation
- * is the OpenGLGraphics.
- *
- * NOTE: You will never need to call this function yourself, unless
- * you use a Graphics object outside of Guichan.
- *
- * @see endDraw, Gui::draw
- */
- virtual void beginDraw() restrict2
- { }
-
- /**
- * Deinitializes drawing. Called by the Gui when a Gui::draw() is done.
- * done. It should reset any state changes made by beginDraw().
- *
- * NOTE: You will never need to call this function yourself, unless
- * you use a Graphics object outside of Guichan.
- *
- * @see beginDraw, Gui::draw
- */
- virtual void endDraw() restrict2
- { }
-
- virtual void clearScreen() const restrict2
- { }
-
- virtual void deleteArrays() restrict2
- { }
-
- virtual void postInit() restrict2
- { }
-
- virtual void finalize(ImageCollection *restrict const col A_UNUSED)
- restrict2
- { }
-
- virtual void finalize(ImageVertexes *restrict const vert A_UNUSED)
- restrict2
- { }
-
- virtual void testDraw() restrict2
- { }
-
- virtual void removeArray(const uint32_t sz A_UNUSED,
- uint32_t *restrict const arr A_UNUSED)
- restrict2
- { }
-
- virtual void screenResized() restrict2
- { }
-
- int mWidth;
- int mHeight;
- int mActualWidth;
- int mActualHeight;
-
- protected:
- /**
- * Constructor.
- */
- Graphics();
-
- void setMainFlags(const int w, const int h,
- const int scale,
- const int bpp,
- const bool fs,
- const bool hwaccel,
- const bool resize,
- const bool noFrame,
- const bool allowHighDPI) restrict2;
-
- int getOpenGLFlags() const restrict2 A_WARN_UNUSED;
-
- int getSoftwareFlags() const restrict2 A_WARN_UNUSED;
-
- bool setOpenGLMode() restrict2;
-
- void updateMemoryInfo() restrict2;
-
- bool videoInfo() restrict2;
-
-#ifdef USE_OPENGL
- void setOpenGLFlags() restrict2;
-#endif // USE_OPENGL
-
- /**
- * Holds the clip area stack.
- */
- MStack<ClipRect> mClipStack;
-
- SDL_Window *restrict mWindow;
-
-#ifdef USE_SDL2
- static SDL_Renderer *restrict mRenderer;
-#endif // USE_SDL2
-#ifdef USE_OPENGL
-#ifdef USE_SDL2
- static SDL_GLContext mGLContext;
-#else // USE_SDL2
-
- static void *restrict mGLContext;
-#endif // USE_SDL2
-#endif // USE_OPENGL
-
- int mBpp;
- bool mAlpha;
- bool mFullscreen;
- bool mHWAccel;
- bool mRedraw;
- bool mDoubleBuffer;
- SDL_Rect mRect;
- bool mSecure;
- RenderType mOpenGL;
- bool mEnableResize;
- bool mNoFrame;
- bool mAllowHighDPI;
- std::string mName;
- int mStartFreeMem;
- bool mSync;
- int mScale;
- Color mColor;
-};
-
-extern Graphics *mainGraphics A_NONNULLPOINTER;
-
-#endif // RENDER_GRAPHICS_H
diff --git a/src/render/graphics_calcImageRect.hpp b/src/render/graphics_calcImageRect.hpp
deleted file mode 100644
index ea04a95cc..000000000
--- a/src/render/graphics_calcImageRect.hpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-
-// bool GraphicsX::calcImageRect(ImageVertexes *const vert,
-// const int x, const int y,
-// const int w, const int h,
-// const ImageRect &imgRect)
-
-if (!vert)
- return;
-
-BLOCK_START("Graphics::calcImageRect")
-
-const Image *restrict const *restrict const grid = imgRect.grid;
-const Image *restrict const topLeft = grid[0];
-const Image *restrict const topRight = grid[2];
-const Image *restrict const bottomLeft = grid[6];
-const Image *restrict const bottomRight = grid[8];
-const Image *restrict const top = grid[1];
-const Image *restrict const right = grid[5];
-const Image *restrict const bottom = grid[7];
-const Image *restrict const left = grid[3];
-const Image *restrict const center = grid[4];
-
-const bool drawMain = center && topLeft && topRight
- && bottomLeft && bottomRight;
-
-// Draw the center area
-if (center && drawMain)
-{
- const int tlw = topLeft->getWidth();
- const int tlh = topLeft->getHeight();
- calcPatternInline(vert, center, tlw + x, tlh + y,
- w - tlw - topRight->getWidth(),
- h - tlh - bottomLeft->getHeight());
-}
-// Draw the sides
-if (top && left && bottom && right)
-{
- const int lw = left->getWidth();
- const int rw = right->getWidth();
- const int th = top->getHeight();
- const int bh = bottom->getHeight();
- calcPatternInline(vert, top, x + lw, y, w - lw - rw, th);
- calcPatternInline(vert, bottom, x + lw, y + h - bh, w - lw - rw, bh);
- calcPatternInline(vert, left, x, y + th, lw, h - th - bh);
- if (w > rw)
- calcPatternInline(vert, right, x + w - rw, y + th, rw, h - th - bh);
-}
-
-if (topLeft)
- calcTileVertexesInline(vert, topLeft, x, y);
-if (topRight)
-{
- const int trw = topRight->getWidth();
- if (w > trw)
- calcTileVertexesInline(vert, topRight, x + w - trw, y);
-}
-if (bottomLeft)
-{
- calcTileVertexesInline(vert, bottomLeft,
- x, y + h - bottomLeft->getHeight());
-}
-if (bottomRight)
-{
- const int brw = bottomRight->getWidth();
- if (w > brw)
- {
- calcTileVertexesInline(vert, bottomRight, x + w - brw,
- y + h - bottomRight->getHeight());
- }
-}
-
-BLOCK_END("Graphics::calcImageRect")
diff --git a/src/render/graphics_drawImageRect.hpp b/src/render/graphics_drawImageRect.hpp
deleted file mode 100644
index 1f3c5a38d..000000000
--- a/src/render/graphics_drawImageRect.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-
-// void GraphicsX::drawImageRect(const int x, const int y,
-// const int w, const int h,
-// const ImageRect &imgRect)
-
-BLOCK_START("Graphics::drawImageRect")
-
-const Image *restrict const *restrict const grid = imgRect.grid;
-const Image *restrict const topLeft = grid[0];
-const Image *restrict const topRight = grid[2];
-const Image *restrict const bottomLeft = grid[6];
-const Image *restrict const bottomRight = grid[8];
-const Image *restrict const top = grid[1];
-const Image *restrict const right = grid[5];
-const Image *restrict const bottom = grid[7];
-const Image *restrict const left = grid[3];
-const Image *restrict const center = grid[4];
-
-const bool drawMain = center && topLeft && topRight
- && bottomLeft && bottomRight;
-
-// Draw the center area
-if (center && drawMain)
-{
- const int tlw = topLeft->getWidth();
- const int tlh = topLeft->getHeight();
- drawPatternInline(center, tlw + x, tlh + y,
- w - tlw - topRight->getWidth(),
- h - tlh - bottomLeft->getHeight());
-}
-
-// Draw the sides
-if (top && left && bottom && right)
-{
- const int lw = left->getWidth();
- const int rw = right->getWidth();
- const int th = top->getHeight();
- const int bh = bottom->getHeight();
- drawPatternInline(top, x + lw, y, w - lw - rw, th);
- drawPatternInline(bottom, x + lw, h - bh + y, w - lw - rw, bh);
- drawPatternInline(left, x, y + th, lw, h - th - bh);
- if (w > rw)
- drawPatternInline(right, x + w - rw, th + y, rw, h - th - bh);
-}
-// Draw the corners
-if (drawMain)
-{
- drawImageInline(topLeft, x, y);
- const int trw = topRight->getWidth();
- if (w > trw)
- drawImageInline(topRight, x + w - trw, y);
- drawImageInline(bottomLeft, x, h - bottomLeft->getHeight() + y);
- const int brw = bottomRight->getWidth();
- if (w > brw)
- {
- drawImageInline(bottomRight,
- x + w - brw,
- y + h - bottomRight->getHeight());
- }
-}
-BLOCK_END("Graphics::drawImageRect")
diff --git a/src/render/graphicsdef.hpp b/src/render/graphicsdef.hpp
deleted file mode 100644
index 8f8cf93ed..000000000
--- a/src/render/graphicsdef.hpp
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-#define RENDER_GRAPHICSDEF_HPP
-
-public:
- /**
- * Draws a rectangle using images. 4 corner images, 4 side images and 1
- * image for the inside.
- */
- void drawImageRect(int x, int y,
- int w, int h,
- const ImageRect &restrict imgRect)
- restrict2 override final;
-
- void beginDraw() restrict2 override final;
-
- void endDraw() restrict2 override final;
-
- void pushClipArea(const Rect &restrict area) restrict2 override final;
-
- void popClipArea() restrict2 override final;
-
- /**
- * Draws a resclaled version of the image
- */
- void drawRescaledImage(const Image *restrict const image,
- int dstX, int dstY,
- const int desiredWidth,
- const int desiredHeight) restrict2 override final;
-
- void drawPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2 override final;
-
- void inline drawPatternInline(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2 A_INLINE;
-
- void drawRescaledPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h,
- const int scaledWidth,
- const int scaledHeight) restrict2 override final;
-
- void calcPattern(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) const restrict2 override final;
-
- void calcPattern(ImageCollection *restrict const vert,
- const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) const restrict2 override final;
-
- void calcTileVertexes(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- int x, int y) const restrict2 override final
- A_NONNULL(2, 3);
-
- void calcTileCollection(ImageCollection *restrict const vertCol,
- const Image *restrict const image,
- int x, int y) restrict2 override final;
-
- void drawTileVertexes(const ImageVertexes *restrict const vert)
- restrict2 override final;
-
- void drawTileCollection(const ImageCollection
- *restrict const vertCol) restrict2 override final
- A_NONNULL(2);
-
- void updateScreen() restrict2 override final;
-
- void calcWindow(ImageCollection *restrict const vertCol,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2 override final A_NONNULL(2);
-
- void drawRectangle(const Rect &restrict rect) restrict2 override final;
-
- void fillRectangle(const Rect &restrict rect) restrict2 override final;
-
- void drawPoint(int x, int y) restrict2 override final;
-
- void drawLine(int x1, int y1,
- int x2, int y2) restrict2 override final;
-
- bool setVideoMode(const int w, const int h,
- const int scalle,
- const int bpp,
- const bool fs,
- const bool hwaccel,
- const bool resize,
- const bool noFrame,
- const bool allowHighDPI) restrict2 override final;
-
- void drawImage(const Image *restrict const image,
- int dstX, int dstY) restrict2 override final;
-
- void copyImage(const Image *restrict const image,
- int dstX, int dstY) restrict2 override final;
-
- void drawImageCached(const Image *restrict const image,
- int x, int y) restrict2 override final;
-
- void drawPatternCached(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2 override final;
-
- void completeCache() restrict2 override final;
-
-private:
- void inline calcImageRect(ImageVertexes *restrict const vert,
- int x, int y,
- int w, int h,
- const ImageRect &restrict imgRect)
- restrict2 A_INLINE;
-
- void inline calcPatternInline(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2 A_INLINE;
-
- void inline calcTileVertexesInline(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- int x,
- int y) const restrict2
- A_INLINE A_NONNULL(2, 3);
-
- void inline drawImageInline(const Image *restrict const image,
- int dstX,
- int dstY) restrict2 A_INLINE;
diff --git a/src/render/imagegraphics.cpp b/src/render/imagegraphics.cpp
deleted file mode 100644
index 02a1f460d..000000000
--- a/src/render/imagegraphics.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-#ifdef USE_OPENGL
-
-#include "render/imagegraphics.h"
-
-#include "debug.h"
-
-ImegeGraphics::ImegeGraphics() :
- Graphics(),
- mTarget(nullptr)
-{
- mOpenGL = RENDER_SOFTWARE;
- mName = "Image";
-}
-
-ImegeGraphics::~ImegeGraphics()
-{
-}
-
-void ImegeGraphics::drawImage(const Image *restrict const image A_UNUSED,
- int dstX A_UNUSED, int dstY A_UNUSED) restrict2
-{
- // for now not implemented
-}
-
-void ImegeGraphics::copyImage(const Image *restrict const image,
- int dstX A_UNUSED, int dstY A_UNUSED) restrict2
-{
- if ((mTarget == nullptr) || (image == nullptr))
- return;
-}
-
-void ImegeGraphics::drawImageCached(const Image *restrict const image,
- int x, int y) restrict2
-{
- drawImage(image, x, y);
-}
-
-void ImegeGraphics::completeCache() restrict2
-{
-}
-
-#endif // USE_OPENGL
diff --git a/src/render/imagegraphics.h b/src/render/imagegraphics.h
deleted file mode 100644
index 2b3e5bd71..000000000
--- a/src/render/imagegraphics.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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 RENDER_IMAGEGRAPHICS_H
-#define RENDER_IMAGEGRAPHICS_H
-
-#ifdef USE_OPENGL
-
-#include "render/graphics.h"
-
-#include "localconsts.h"
-
-class Image;
-class ImageCollection;
-class ImageVertexes;
-
-/**
- * A central point of control for graphics.
- */
-class ImegeGraphics final : public Graphics
-{
- public:
- ImegeGraphics();
-
- A_DELETE_COPY(ImegeGraphics)
-
- ~ImegeGraphics();
-
- void setTarget(Image *const target) restrict2 noexcept2
- { mTarget = target; }
-
- Image *getTarget() const restrict2 noexcept2
- { return mTarget; }
-
- void beginDraw() restrict2 override final
- { }
-
- void endDraw() restrict2 override final
- { }
-
- void pushClipArea(const Rect &restrict rect A_UNUSED)
- restrict2 override final
- { }
-
- void popClipArea() restrict2 override final
- { }
-
- void drawRescaledImage(const Image *restrict const image A_UNUSED,
- int dstX A_UNUSED, int dstY A_UNUSED,
- const int desiredWidth A_UNUSED,
- const int desiredHeight A_UNUSED)
- restrict2 override final
- { }
-
- void drawPattern(const Image *restrict const image A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED) restrict2 override final
- { }
-
- void drawRescaledPattern(const Image *const image A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED,
- const int scaledWidth A_UNUSED,
- const int scaledHeight A_UNUSED)
- override final
- { }
-
- void calcPattern(ImageVertexes *restrict const vert A_UNUSED,
- const Image *restrict const image A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED) const restrict2 override final
- { }
-
- void calcPattern(ImageCollection *restrict const vert A_UNUSED,
- const Image *restrict const image A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED) const restrict2 override final
- { }
-
- void calcTileVertexes(ImageVertexes *restrict const vert A_UNUSED,
- const Image *restrict const image A_UNUSED,
- int x A_UNUSED,
- int y A_UNUSED) const restrict2 override final
- A_NONNULL(2, 3)
- { }
-
- void calcTileSDL(ImageVertexes *restrict const vert A_UNUSED,
- int x A_UNUSED,
- int y A_UNUSED) const restrict2 override final
- { }
-
- void calcTileCollection(ImageCollection *restrict const
- vertCol A_UNUSED,
- const Image *restrict const image A_UNUSED,
- int x A_UNUSED,
- int y A_UNUSED) restrict2 override final
- { }
-
- void drawTileVertexes(const ImageVertexes *const
- vert A_UNUSED) override final
- { }
-
- void drawTileCollection(const ImageCollection *const vertCol A_UNUSED)
- override final A_NONNULL(2)
- { }
-
- void updateScreen() override final
- { }
-
- void drawNet(const int x1 A_UNUSED,
- const int y1 A_UNUSED,
- const int x2 A_UNUSED,
- const int y2 A_UNUSED,
- const int width A_UNUSED,
- const int height A_UNUSED) override final
- { }
-
- void calcWindow(ImageCollection *restrict const vertCol A_UNUSED,
- const int x A_UNUSED, const int y A_UNUSED,
- const int w A_UNUSED, const int h A_UNUSED,
- const ImageRect &restrict imgRect A_UNUSED)
- restrict2 override final A_NONNULL(2)
- { }
-
- void fillRectangle(const Rect &rect A_UNUSED) override final
- { }
-
- void drawRectangle(const Rect &rect A_UNUSED) restrict2 override final
- { }
-
- void drawPoint(int x A_UNUSED, int y A_UNUSED) override final
- { }
-
- void drawLine(int x1 A_UNUSED, int y1 A_UNUSED,
- int x2 A_UNUSED, int y2 A_UNUSED)
- restrict2 override final
- { }
-
- bool setVideoMode(const int w A_UNUSED, const int h A_UNUSED,
- const int scale A_UNUSED,
- const int bpp A_UNUSED,
- const bool fs A_UNUSED, const bool hwaccel A_UNUSED,
- const bool resize A_UNUSED,
- const bool noFrame A_UNUSED,
- const bool allowHighDPI A_UNUSED)
- restrict2 override final
- { return false; }
-
- void drawImage(const Image *const image,
- int dstX, int dstY) override final;
-
- void copyImage(const Image *const image,
- int dstX, int dstY) restrict2 override final;
-
- void drawImageCached(const Image *const image,
- int x, int y) override final;
-
- void drawPatternCached(const Image *restrict const image A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED) restrict2 override final
- { }
-
- void completeCache() restrict2 override final;
-
- /**
- * Draws a rectangle using images. 4 corner images, 4 side images and 1
- * image for the inside.
- */
- void drawImageRect(const int x A_UNUSED, const int y A_UNUSED,
- const int w A_UNUSED, const int h A_UNUSED,
- const ImageRect &imgRect A_UNUSED) override final
- { }
-
- protected:
- Image *mTarget;
-};
-
-#endif // USE_OPENGL
-#endif // RENDER_IMAGEGRAPHICS_H
diff --git a/src/render/mobileopengl2graphics.cpp b/src/render/mobileopengl2graphics.cpp
deleted file mode 100644
index 03fe5d016..000000000
--- a/src/render/mobileopengl2graphics.cpp
+++ /dev/null
@@ -1,1389 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-#if defined USE_OPENGL && !defined ANDROID
-
-#include "render/mobileopengl2graphics.h"
-
-#include "graphicsmanager.h"
-
-#include "render/opengl/mgl.h"
-#ifdef __native_client__
-#include "render/opengl/naclglfunctions.h"
-#endif // __native_client__
-
-#include "render/shaders/shaderprogram.h"
-#include "render/shaders/shadersmanager.h"
-
-#include "render/vertexes/imagecollection.h"
-
-#include "resources/imagerect.h"
-
-#include "resources/image/image.h"
-
-#include "utils/delete2.h"
-#include "utils/foreach.h"
-#include "utils/sdlcheckutils.h"
-
-#include "debug.h"
-
-#define vertFill2D(var, x1, y1, x2, y2, dstX, dstY, w, h) \
- var[vp + 0] = dstX; \
- var[vp + 1] = dstY; \
- var[vp + 2] = x1; \
- var[vp + 3] = y1; \
- \
- var[vp + 4] = dstX + w; \
- var[vp + 5] = dstY; \
- var[vp + 6] = x2; \
- var[vp + 7] = y1; \
- \
- var[vp + 8] = dstX + w; \
- var[vp + 9] = dstY + h; \
- var[vp + 10] = x2; \
- var[vp + 11] = y2; \
- \
- var[vp + 12] = dstX; \
- var[vp + 13] = dstY; \
- var[vp + 14] = x1; \
- var[vp + 15] = y1; \
- \
- var[vp + 16] = dstX; \
- var[vp + 17] = dstY + h; \
- var[vp + 18] = x1; \
- var[vp + 19] = y2; \
- \
- var[vp + 20] = dstX + w; \
- var[vp + 21] = dstY + h; \
- var[vp + 22] = x2; \
- var[vp + 23] = y2;
-
-#define toGL static_cast<GLfloat>
-
-GLuint MobileOpenGL2Graphics::mTextureBinded = 0U;
-GLuint MobileOpenGL2Graphics::mTextureSizeUniform = 0U;
-int MobileOpenGL2Graphics::mTextureWidth = 1;
-int MobileOpenGL2Graphics::mTextureHeight = 1;
-#ifdef DEBUG_DRAW_CALLS
-unsigned int MobileOpenGL2Graphics::mDrawCalls = 0U;
-unsigned int MobileOpenGL2Graphics::mLastDrawCalls = 0U;
-#endif // DEBUG_DRAW_CALLS
-
-MobileOpenGL2Graphics::MobileOpenGL2Graphics() :
- mFloatArray(nullptr),
- mFloatArrayCached(nullptr),
- mProgram(nullptr),
- mAlphaCached(1.0F),
- mVpCached(0),
- mFloatColor(1.0F),
- mMaxVertices(500),
- mProgramId(0U),
- mSimpleColorUniform(0U),
- mPosAttrib(0),
- mTextureColorUniform(0U),
- mScreenUniform(0U),
- mDrawTypeUniform(0U),
-#ifndef __native_client__
- mVao(0U),
-#endif // __native_client__
- mVbo(0U),
- mVboBinded(0U),
- mAttributesBinded(0U),
- mColorAlpha(false),
- mTextureDraw(false),
-#ifdef DEBUG_BIND_TEXTURE
- mOldTexture(),
- mOldTextureId(0),
-#endif // DEBUG_BIND_TEXTURE
- mFbo()
-{
- mOpenGL = RENDER_GLES2_OPENGL;
- mName = "mobile OpenGL ES 2";
-}
-
-MobileOpenGL2Graphics::~MobileOpenGL2Graphics()
-{
- deleteArraysInternal();
- deleteGLObjects();
-}
-
-void MobileOpenGL2Graphics::deleteGLObjects() restrict2
-{
- delete2(mProgram);
- if (mVbo != 0u)
- mglDeleteBuffers(1, &mVbo);
-#ifndef __native_client__
- if (mVao != 0u)
- mglDeleteVertexArrays(1, &mVao);
-#endif // __native_client__
-}
-
-void MobileOpenGL2Graphics::initArrays(const int vertCount) restrict2
-{
- mMaxVertices = vertCount;
- if (mMaxVertices < 500)
- mMaxVertices = 500;
- else if (mMaxVertices > 1024)
- mMaxVertices = 1024;
-
- // need alocate small size, after if limit reached reallocate to double size
- const size_t sz = mMaxVertices * 4 + 30;
- vertexBufSize = mMaxVertices;
- if (mFloatArray == nullptr)
- mFloatArray = new GLfloat[sz];
- if (mFloatArrayCached == nullptr)
- mFloatArrayCached = new GLfloat[sz];
-}
-
-void MobileOpenGL2Graphics::postInit() restrict2
-{
-#ifndef __native_client__
- mglGenVertexArrays(1, &mVao);
- mglBindVertexArray(mVao);
-#endif // __native_client__
- mglGenBuffers(1, &mVbo);
-// logger->log("gen vbo buffer: %u", mVbo);
- bindArrayBuffer(mVbo);
-
- logger->log("Compiling shaders");
- mProgram = shaders.getGles2Program();
- if (mProgram == nullptr)
- {
- graphicsManager.logError();
- logger->safeError("Shader creation error. See manaplus.log.");
- }
- mProgramId = mProgram->getProgramId();
- if (mProgramId == 0u)
- logger->safeError("Shaders compilation error.");
-
- logger->log("Shaders compilation done.");
- mglUseProgram(mProgramId);
-
- mPosAttrib = 0;
-
- mSimpleColorUniform = mglGetUniformLocation(mProgramId, "color");
- mScreenUniform = mglGetUniformLocation(mProgramId, "screen");
- mDrawTypeUniform = mglGetUniformLocation(mProgramId, "drawType");
- mTextureColorUniform = mglGetUniformLocation(mProgramId, "alpha");
- mTextureSizeUniform = mglGetUniformLocation(mProgramId, "textureSize");
-
- mglUniform1f(mTextureColorUniform, 1.0f);
-
- mglVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, nullptr);
- mglEnableVertexAttribArray(0);
- mAttributesBinded = mVbo;
-
- mglUniform2f(mScreenUniform,
- static_cast<float>(mWidth) / 2.0f,
- static_cast<float>(mHeight) / 2.0f);
- // for safty init texture size to 1x1
- mglUniform2f(mTextureSizeUniform,
- 1.0f,
- 1.0f);
- mglUniform4f(mSimpleColorUniform,
- 0.0F,
- 0.0F,
- 0.0F,
- 0.0F);
-
- mglActiveTexture(GL_TEXTURE0);
-}
-
-void MobileOpenGL2Graphics::screenResized() restrict2
-{
- deleteGLObjects();
- mVboBinded = 0U;
- mAttributesBinded = 0U;
- mColor = Color(0, 0, 0, 0);
- postInit();
-}
-
-void MobileOpenGL2Graphics::deleteArrays() restrict2
-{
- deleteArraysInternal();
-}
-
-void MobileOpenGL2Graphics::deleteArraysInternal() restrict2
-{
- delete [] mFloatArray;
- mFloatArray = nullptr;
- delete [] mFloatArrayCached;
- mFloatArrayCached = nullptr;
-}
-
-bool MobileOpenGL2Graphics::setVideoMode(const int w, const int h,
- const int scale,
- const int bpp,
- const bool fs,
- const bool hwaccel,
- const bool resize,
- const bool noFrame,
- const bool allowHighDPI) restrict2
-{
- setMainFlags(w, h,
- scale,
- bpp,
- fs,
- hwaccel,
- resize,
- noFrame,
- allowHighDPI);
-
- return setOpenGLMode();
-}
-
-void MobileOpenGL2Graphics::setColor(const Color &restrict color) restrict2
-{
- mColorAlpha = (color.a != 255);
- if (mColor != color)
- {
- mColor = color;
- mglUniform4f(mSimpleColorUniform,
- static_cast<float>(color.r) / 255.0F,
- static_cast<float>(color.g) / 255.0F,
- static_cast<float>(color.b) / 255.0F,
- static_cast<float>(color.a) / 255.0F);
- }
-}
-
-void MobileOpenGL2Graphics::setColorAlpha(const float alpha) restrict2
-{
- if (mAlphaCached != alpha)
- {
- mAlphaCached = alpha;
- mglUniform1f(mTextureColorUniform, alpha);
- }
-}
-
-void MobileOpenGL2Graphics::drawQuad(const int srcX,
- const int srcY,
- const int dstX,
- const int dstY,
- const int width,
- const int height) restrict2
-{
- const GLfloat texX2 = static_cast<GLfloat>(srcX + width);
- const GLfloat texY2 = static_cast<GLfloat>(srcY + height);
- const GLfloat x2 = static_cast<GLfloat>(dstX + width);
- const GLfloat y2 = static_cast<GLfloat>(dstY + height);
- const GLfloat srcX2 = toGL(srcX);
- const GLfloat srcY2 = toGL(srcY);
- const GLfloat dstX2 = toGL(dstX);
- const GLfloat dstY2 = toGL(dstY);
-
- GLfloat vertices[] =
- {
- dstX2, dstY2, srcX2, srcY2,
- x2, dstY2, texX2, srcY2,
- dstX2, y2, srcX2, texY2,
- x2, y2, texX2, texY2
- };
-
- mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
- vertices, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void MobileOpenGL2Graphics::drawRescaledQuad(const int srcX, const int srcY,
- const int dstX, const int dstY,
- const int width, const int height,
- const int desiredWidth,
- const int desiredHeight) restrict2
-{
- const GLfloat texX2 = static_cast<GLfloat>(srcX + width);
- const GLfloat texY2 = static_cast<GLfloat>(srcY + height);
- const GLfloat x2 = static_cast<GLfloat>(dstX + desiredWidth);
- const GLfloat y2 = static_cast<GLfloat>(dstY + desiredHeight);
- const GLfloat srcX2 = toGL(srcX);
- const GLfloat srcY2 = toGL(srcY);
- const GLfloat dstX2 = toGL(dstX);
- const GLfloat dstY2 = toGL(dstY);
-
- GLfloat vertices[] =
- {
- dstX2, dstY2, srcX2, srcY2,
- x2, dstY2, texX2, srcY2,
- dstX2, y2, srcX2, texY2,
- x2, y2, texX2, texY2
- };
-
- mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
- vertices, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void MobileOpenGL2Graphics::drawImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void MobileOpenGL2Graphics::drawImageInline(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- FUNC_BLOCK("Graphics::drawImage", 1)
- if (image == nullptr)
- return;
-
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture2(GL_TEXTURE_2D, image);
- enableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- setColorAlpha(image->mAlpha);
-
- const ClipRect &clipArea = mClipStack.top();
- const SDL_Rect &imageRect = image->mBounds;
- drawQuad(imageRect.x,
- imageRect.y,
- dstX + clipArea.xOffset,
- dstY + clipArea.yOffset,
- imageRect.w,
- imageRect.h);
-}
-
-void MobileOpenGL2Graphics::copyImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void MobileOpenGL2Graphics::testDraw() restrict2
-{
-/*
- GLfloat vertices[] =
- {
- 0, 0, 0, 0,
- 800, 0, 800, 0,
- 0, 600, 0, 600,
- 800, 600, 800, 600
- };
-*/
-// logger->log("allocate: %d, %ld", mVboBinded, sizeof(vertices));
-// mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
-// vertices, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-// glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_INT, 0);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void MobileOpenGL2Graphics::drawImageCached(const Image *restrict const image
- A_UNUSED,
- int A_UNUSED x,
- int y A_UNUSED) restrict2
-{
-}
-
-void MobileOpenGL2Graphics::drawPatternCached(const Image *restrict const image
- A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED) restrict2
-{
-}
-
-void MobileOpenGL2Graphics::completeCache() restrict2
-{
-}
-
-void MobileOpenGL2Graphics::drawRescaledImage(const Image *
- restrict const image,
- int dstX, int dstY,
- const int desiredWidth,
- const int desiredHeight)
- restrict2
-{
- if (image == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
-
- // Just draw the image normally when no resizing is necessary,
- if (imageRect.w == desiredWidth && imageRect.h == desiredHeight)
- {
- drawImageInline(image, dstX, dstY);
- return;
- }
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture2(GL_TEXTURE_2D, image);
- enableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
-
- const ClipRect &clipArea = mClipStack.top();
- // Draw a textured quad.
- drawRescaledQuad(imageRect.x,
- imageRect.y,
- dstX + clipArea.xOffset,
- dstY + clipArea.yOffset,
- imageRect.w,
- imageRect.h,
- desiredWidth,
- desiredHeight);
-}
-
-void MobileOpenGL2Graphics::drawPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- drawPatternInline(image, x, y, w, h);
-}
-
-void MobileOpenGL2Graphics::drawPatternInline(const Image *
- restrict const image,
- const int x, const int y,
- const int w, const int h)
- restrict2
-{
- if (image == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
-
- if (iw == 0 || ih == 0)
- return;
-
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const GLfloat srcX2 = toGL(srcX);
- const GLfloat srcY2 = toGL(srcY);
- const ClipRect &clipArea = mClipStack.top();
- const int x2 = x + clipArea.xOffset;
- const int y2 = y + clipArea.yOffset;
-
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture2(GL_TEXTURE_2D, image);
-
- enableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- setColorAlpha(image->mAlpha);
-
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const GLfloat texY2 = static_cast<GLfloat>(srcY + height);
- const GLfloat dstY = static_cast<GLfloat>(y2 + py);
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const GLfloat dstX = static_cast<GLfloat>(x2 + px);
- const GLfloat texX2 = static_cast<GLfloat>(srcX + width);
-
- vertFill2D(mFloatArray,
- srcX2, srcY2, texX2, texY2,
- dstX, dstY, width, height);
-
- vp += 24;
- if (vp >= vLimit)
- {
- drawTriangleArray(vp);
- vp = 0;
- }
- }
- }
- if (vp > 0)
- drawTriangleArray(vp);
-}
-
-void MobileOpenGL2Graphics::drawRescaledPattern(const Image *
- restrict const image,
- const int x, const int y,
- const int w, const int h,
- const int scaledWidth,
- const int scaledHeight)
- restrict2
-{
- if (image == nullptr)
- return;
-
- if (scaledWidth == 0 || scaledHeight == 0)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
- if (iw == 0 || ih == 0)
- return;
-
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const GLfloat srcX2 = toGL(srcX);
- const GLfloat srcY2 = toGL(srcY);
-
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture2(GL_TEXTURE_2D, image);
-
- enableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- setColorAlpha(image->mAlpha);
-
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
-
- const ClipRect &clipArea = mClipStack.top();
- const int x2 = x + clipArea.xOffset;
- const int y2 = y + clipArea.yOffset;
-
- const float scaleFactorW = static_cast<float>(scaledWidth) / iw;
- const float scaleFactorH = static_cast<float>(scaledHeight) / ih;
-
- for (int py = 0; py < h; py += scaledHeight)
- {
- const int height = (py + scaledHeight >= h)
- ? h - py : scaledHeight;
- const GLfloat dstY = static_cast<GLfloat>(y2 + py);
- const GLfloat scaledY = srcY + height / scaleFactorH;
- for (int px = 0; px < w; px += scaledWidth)
- {
- const int width = (px + scaledWidth >= w)
- ? w - px : scaledWidth;
- const GLfloat dstX = static_cast<GLfloat>(x2 + px);
- const GLfloat scaledX = srcX + width / scaleFactorW;
-
- vertFill2D(mFloatArray,
- srcX2, srcY2,
- scaledX, scaledY,
- dstX, dstY,
- static_cast<GLfloat>(width), static_cast<GLfloat>(height));
-
- vp += 24;
- if (vp >= vLimit)
- {
- drawTriangleArray(vp);
- vp = 0;
- }
- }
- }
- if (vp > 0)
- drawTriangleArray(vp);
-}
-
-inline void MobileOpenGL2Graphics::drawVertexes(const
- OpenGLGraphicsVertexes &
- restrict ogl) restrict2
-{
- const STD_VECTOR<int> &vp = ogl.mVp;
- const STD_VECTOR<GLuint> &vbos = ogl.mVbo;
- STD_VECTOR<int>::const_iterator ivp;
- STD_VECTOR<GLuint>::const_iterator ivbo;
- const STD_VECTOR<int>::const_iterator ivp_end = vp.end();
-
- for (ivp = vp.begin(), ivbo = vbos.begin();
- ivp != ivp_end;
- ++ ivp, ++ ivbo)
- {
- bindArrayBufferAndAttributes(*ivbo);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLES, 0, *ivp / 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
- }
-}
-
-void MobileOpenGL2Graphics::calcPattern(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void MobileOpenGL2Graphics::calcPatternInline(ImageVertexes *
- restrict const vert,
- const Image *
- restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- if (image == nullptr || vert == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
-
- if (iw == 0 || ih == 0)
- return;
-
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const GLfloat srcX2 = toGL(srcX);
- const GLfloat srcY2 = toGL(srcY);
-
- const ClipRect &clipArea = mClipStack.top();
- const int x2 = x + clipArea.xOffset;
- const int y2 = y + clipArea.yOffset;
-
- const unsigned int vLimit = mMaxVertices * 4;
-
- OpenGLGraphicsVertexes &ogl = vert->ogl;
- unsigned int vp = ogl.continueVp();
-
- GLfloat *floatArray = ogl.continueFloatTexArray();
-
- for (int py = 0; py < h; py += ih)
- {
- const GLfloat height = static_cast<GLfloat>(
- (py + ih >= h) ? h - py : ih);
- const GLfloat dstY = static_cast<GLfloat>(y2 + py);
- const GLfloat texY2 = srcY + height;
- for (int px = 0; px < w; px += iw)
- {
- const GLfloat width = static_cast<GLfloat>(
- (px + iw >= w) ? w - px : iw);
- const GLfloat dstX = static_cast<GLfloat>(x2 + px);
- const GLfloat texX2 = srcX2 + width;
-
- vertFill2D(floatArray,
- srcX2, srcY2, texX2, texY2,
- dstX, dstY, width, height);
-
- vp += 24;
- if (vp >= vLimit)
- {
- floatArray = ogl.switchFloatTexArray();
- ogl.switchVp(vp);
- vp = 0;
- }
- }
- }
- ogl.switchVp(vp);
-}
-
-void MobileOpenGL2Graphics::calcTileCollection(ImageCollection *
- restrict const vertCol,
- const Image *
- restrict const image,
- int x, int y) restrict2
-{
- if (vertCol == nullptr || image == nullptr)
- return;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- ImageVertexes *const vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- calcTileVertexesInline(vert, image, x, y);
- }
- else
- {
- calcTileVertexesInline(vertCol->currentVert, image, x, y);
- }
-}
-
-void MobileOpenGL2Graphics::drawTileCollection(const ImageCollection
- *restrict const vertCol)
- restrict2
-{
- enableTexturingAndBlending();
- const ImageVertexesVector &draws = vertCol->draws;
- const ImageCollectionCIter it_end = draws.end();
- for (ImageCollectionCIter it = draws.begin(); it != it_end; ++ it)
- {
- const ImageVertexes *const vert = *it;
- const Image *const image = vert->image;
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture2(GL_TEXTURE_2D, image);
- drawVertexes(vert->ogl);
- }
-}
-
-void MobileOpenGL2Graphics::calcPattern(ImageCollection *restrict const
- vertCol,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- if (vertCol == nullptr || image == nullptr)
- return;
- ImageVertexes *vert = nullptr;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
-
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void MobileOpenGL2Graphics::calcTileVertexes(ImageVertexes *
- restrict const vert,
- const Image *restrict const image,
- int dstX,
- int dstY) const restrict2
-{
- calcTileVertexesInline(vert, image, dstX, dstY);
-}
-
-void MobileOpenGL2Graphics::calcTileVertexesInline(ImageVertexes *
- restrict const vert,
- const Image *
- restrict const image,
- int dstX,
- int dstY) const restrict2
-{
- const SDL_Rect &imageRect = image->mBounds;
- const int w = imageRect.w;
- const int h = imageRect.h;
-
- if (w == 0 || h == 0)
- return;
-
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const GLfloat srcX2 = toGL(srcX);
- const GLfloat srcY2 = toGL(srcY);
-
- const ClipRect &clipArea = mClipStack.top();
- const GLfloat x2 = static_cast<GLfloat>(dstX + clipArea.xOffset);
- const GLfloat y2 = static_cast<GLfloat>(dstY + clipArea.yOffset);
-
- const unsigned int vLimit = mMaxVertices * 4;
-
- OpenGLGraphicsVertexes &ogl = vert->ogl;
-
- unsigned int vp = ogl.continueVp();
-
- GLfloat texX2 = static_cast<GLfloat>(srcX + w);
- GLfloat texY2 = static_cast<GLfloat>(srcY + h);
-
- GLfloat *const floatArray = ogl.continueFloatTexArray();
-
- vertFill2D(floatArray,
- srcX2, srcY2, texX2, texY2,
- x2, y2, w, h);
-
- vp += 24;
- if (vp >= vLimit)
- {
- ogl.switchFloatTexArray();
- ogl.switchVp(vp);
- vp = 0;
- }
-
- ogl.switchVp(vp);
-}
-
-void MobileOpenGL2Graphics::drawTileVertexes(const ImageVertexes *
- restrict const vert) restrict2
-{
- if (vert == nullptr)
- return;
- const Image *const image = vert->image;
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture2(GL_TEXTURE_2D, image);
- enableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
-
- drawVertexes(vert->ogl);
-}
-
-void MobileOpenGL2Graphics::calcWindow(ImageCollection *restrict const vertCol,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- ImageVertexes *vert = nullptr;
- const Image *const image = imgRect.grid[4];
- if (image == nullptr)
- return;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
- calcImageRect(vert, x, y, w, h, imgRect);
-}
-
-void MobileOpenGL2Graphics::updateScreen() restrict2
-{
- BLOCK_START("Graphics::updateScreen")
-#ifdef DEBUG_DRAW_CALLS
- mLastDrawCalls = mDrawCalls;
- mDrawCalls = 0;
-#endif // DEBUG_DRAW_CALLS
-#ifdef USE_SDL2
- SDL_GL_SwapWindow(mWindow);
-#else // USE_SDL2
- SDL_GL_SwapBuffers();
-#endif // USE_SDL2
-#ifdef DEBUG_OPENGL
- if (isGLNotNull(mglFrameTerminator))
- mglFrameTerminator();
-#endif // DEBUG_OPENGL
- BLOCK_END("Graphics::updateScreen")
-}
-
-void MobileOpenGL2Graphics::beginDraw() restrict2
-{
- setOpenGLFlags();
-#ifndef __native_client__
- mglDisable(GL_VERTEX_PROGRAM_POINT_SIZE_ARB);
- mglHint(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB, GL_FASTEST);
-#endif // __native_client__
- pushClipArea(Rect(0, 0, mRect.w, mRect.h));
-}
-
-void MobileOpenGL2Graphics::endDraw() restrict2
-{
- popClipArea();
-}
-
-void MobileOpenGL2Graphics::pushClipArea(const Rect &restrict area) restrict2
-{
- Graphics::pushClipArea(area);
- const ClipRect &clipArea = mClipStack.top();
-
- mglScissor(clipArea.x * mScale,
- (mRect.h - clipArea.y - clipArea.height) * mScale,
- clipArea.width * mScale,
- clipArea.height * mScale);
-}
-
-void MobileOpenGL2Graphics::popClipArea() restrict2
-{
- if (mClipStack.empty())
- return;
- Graphics::popClipArea();
- if (mClipStack.empty())
- return;
-
- const ClipRect &clipArea = mClipStack.top();
- mglScissor(clipArea.x * mScale,
- (mRect.h - clipArea.y - clipArea.height) * mScale,
- clipArea.width * mScale,
- clipArea.height * mScale);
-}
-
-void MobileOpenGL2Graphics::drawPoint(int x, int y) restrict2
-{
- disableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- const ClipRect &clipArea = mClipStack.top();
- GLfloat vertices[] =
- {
- toGL(x + clipArea.xOffset), toGL(y + clipArea.yOffset), 0.0f, 0.0f
- };
- mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
- vertices, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_POINTS, 0, 1);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void MobileOpenGL2Graphics::drawLine(int x1, int y1,
- int x2, int y2) restrict2
-{
- disableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- const ClipRect &clipArea = mClipStack.top();
- GLfloat vertices[] =
- {
- toGL(x1 + clipArea.xOffset), toGL(y1 + clipArea.yOffset), 0.0f, 0.0f,
- toGL(x2 + clipArea.xOffset), toGL(y2 + clipArea.yOffset), 0.0f, 0.0f
- };
- mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
- vertices, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_LINES, 0, 2);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void MobileOpenGL2Graphics::drawRectangle(const Rect &restrict rect) restrict2
-{
- disableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- const ClipRect &clipArea = mClipStack.top();
- const GLfloat x1 = static_cast<GLfloat>(rect.x + clipArea.xOffset);
- const GLfloat y1 = static_cast<GLfloat>(rect.y + clipArea.yOffset);
- const GLfloat x2 = x1 + static_cast<GLfloat>(rect.width);
- const GLfloat y2 = y1 + static_cast<GLfloat>(rect.height);
- GLfloat vertices[] =
- {
- x1, y1, 0.0f, 0.0f,
- x1, y2, 0.0f, 0.0f,
- x2, y2, 0.0f, 0.0f,
- x2, y1, 0.0f, 0.0f
- };
-
- mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
- vertices, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_LINE_LOOP, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void MobileOpenGL2Graphics::fillRectangle(const Rect &restrict rect) restrict2
-{
- disableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- const ClipRect &clipArea = mClipStack.top();
- const GLfloat x1 = static_cast<GLfloat>(rect.x + clipArea.xOffset);
- const GLfloat y1 = static_cast<GLfloat>(rect.y + clipArea.yOffset);
- const GLfloat x2 = x1 + static_cast<GLfloat>(rect.width);
- const GLfloat y2 = y1 + static_cast<GLfloat>(rect.height);
- GLfloat vertices[] =
- {
- x1, y1, 0.0f, 0.0f,
- x2, y1, 0.0f, 0.0f,
- x1, y2, 0.0f, 0.0f,
- x2, y2, 0.0f, 0.0f
- };
-
- mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
- vertices, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void MobileOpenGL2Graphics::enableTexturingAndBlending() restrict2
-{
- if (!mTextureDraw)
- {
- mTextureDraw = true;
- mglUniform1f(mDrawTypeUniform, 1.0f);
- }
- if (!mAlpha)
- {
- mglEnable(GL_BLEND);
- mAlpha = true;
- }
-}
-
-void MobileOpenGL2Graphics::disableTexturingAndBlending() restrict2
-{
- if (mTextureDraw)
- {
- mTextureDraw = false;
- mglUniform1f(mDrawTypeUniform, 0.0f);
- }
- if (mAlpha && !mColorAlpha)
- {
- mglDisable(GL_BLEND);
- mAlpha = false;
- }
- else if (!mAlpha && mColorAlpha)
- {
- mglEnable(GL_BLEND);
- mAlpha = true;
- }
-}
-
-void MobileOpenGL2Graphics::drawRectangle(const Rect &restrict rect A_UNUSED,
- const bool filled A_UNUSED) restrict2
-{
-}
-
-void MobileOpenGL2Graphics::drawNet(const int x1,
- const int y1,
- const int x2,
- const int y2,
- const int width,
- const int height) restrict2
-{
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
-
- disableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- const ClipRect &clipArea = mClipStack.top();
- const GLfloat dx = static_cast<GLfloat>(clipArea.xOffset);
- const GLfloat dy = static_cast<GLfloat>(clipArea.yOffset);
-
- const GLfloat xs1 = x1 + dx;
- const GLfloat xs2 = x2 + dx;
- const GLfloat ys1 = y1 + dy;
- const GLfloat ys2 = y2 + dy;
-
- for (int y = y1; y < y2; y += height)
- {
- mFloatArray[vp + 0] = xs1;
- mFloatArray[vp + 1] = toGL(y);
- mFloatArray[vp + 2] = 0.0f;
- mFloatArray[vp + 3] = 0.0f;
-
- mFloatArray[vp + 4] = xs2;
- mFloatArray[vp + 5] = toGL(y);
- mFloatArray[vp + 6] = 0.0f;
- mFloatArray[vp + 7] = 0.0f;
-
- vp += 8;
- if (vp >= vLimit)
- {
- drawLineArrays(vp);
- vp = 0;
- }
- }
-
- for (int x = x1; x < x2; x += width)
- {
- mFloatArray[vp + 0] = toGL(x);
- mFloatArray[vp + 1] = ys1;
- mFloatArray[vp + 2] = 0.0f;
- mFloatArray[vp + 3] = 0.0f;
-
- mFloatArray[vp + 4] = toGL(x);
- mFloatArray[vp + 5] = ys2;
- mFloatArray[vp + 6] = 0.0f;
- mFloatArray[vp + 7] = 0.0f;
-
- vp += 8;
- if (vp >= vLimit)
- {
- drawLineArrays(vp);
- vp = 0;
- }
- }
-
- if (vp > 0)
- drawLineArrays(vp);
-}
-
-void MobileOpenGL2Graphics::bindTexture2(const GLenum target,
- const Image *restrict const image)
-{
- const GLuint texture = image->mGLImage;
- if (mTextureBinded != texture)
- {
- mTextureBinded = texture;
- mglBindTexture(target, texture);
- if (mTextureWidth != image->mTexWidth ||
- mTextureHeight != image->mTexHeight)
- {
- mTextureWidth = image->mTexWidth;
- mTextureHeight = image->mTexHeight;
- mglUniform2f(mTextureSizeUniform,
- static_cast<GLfloat>(image->mTexWidth),
- static_cast<GLfloat>(image->mTexHeight));
- }
- }
-}
-
-void MobileOpenGL2Graphics::bindTexture(const GLenum target,
- const GLuint texture)
-{
- if (mTextureBinded != texture)
- {
- // for safty not storing textures because cant update size uniform
- mTextureBinded = 0;
- mglBindTexture(target, texture);
- }
-}
-
-void MobileOpenGL2Graphics::removeArray(const uint32_t sz,
- uint32_t *restrict const arr) restrict2
-{
- mglDeleteBuffers(sz, arr);
- for (size_t f = 0; f < sz; f ++)
- {
- if (arr[f] == mVboBinded)
- mVboBinded = 0;
- }
-}
-
-void MobileOpenGL2Graphics::bindArrayBuffer(const GLuint vbo) restrict2
-{
- if (mVboBinded != vbo)
- {
- mVboBinded = vbo;
- mglBindBuffer(GL_ARRAY_BUFFER, vbo);
- mAttributesBinded = 0U;
- }
-}
-
-void MobileOpenGL2Graphics::bindArrayBufferAndAttributes(const GLuint vbo)
- restrict2
-{
- if (mVboBinded != vbo)
- {
- mVboBinded = vbo;
- mglBindBuffer(GL_ARRAY_BUFFER, vbo);
-
- mAttributesBinded = mVboBinded;
- mglVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, nullptr);
- }
- else if (mAttributesBinded != mVboBinded)
- {
- mAttributesBinded = mVboBinded;
- mglVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, nullptr);
- }
-}
-
-void MobileOpenGL2Graphics::bindAttributes() restrict2
-{
- if (mAttributesBinded != mVboBinded)
- {
- mAttributesBinded = mVboBinded;
- mglVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, nullptr);
- }
-}
-
-void MobileOpenGL2Graphics::dumpSettings()
-{
- GLint test[1000];
- logger->log("\n\n");
- logger->log("start opengl dump");
- for (int f = 0; f < 65535; f ++)
- {
- test[0] = 0;
- test[1] = 0;
- test[2] = 0;
- test[3] = 0;
- mglGetIntegerv(f, &test[0]);
- if (test[0] != 0 || test[1] != 0 || test[2] != 0 || test[3] != 0)
- {
- logger->log("\n%d = %d, %d, %d, %d", f,
- test[0], test[1], test[2], test[3]);
- }
- }
-}
-
-void MobileOpenGL2Graphics::drawImageRect(const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- #include "render/graphics_drawImageRect.hpp"
-}
-
-void MobileOpenGL2Graphics::calcImageRect(ImageVertexes *restrict const vert,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- #include "render/graphics_calcImageRect.hpp"
-}
-
-void MobileOpenGL2Graphics::clearScreen() const restrict2
-{
- mglClear(GL_COLOR_BUFFER_BIT |
- GL_DEPTH_BUFFER_BIT |
- GL_STENCIL_BUFFER_BIT);
-}
-
-void MobileOpenGL2Graphics::createGLContext(const bool custom) restrict2
-{
- Graphics::createGLContext(custom);
-/*
- if (mGLContext)
- SDL::makeCurrentContext(mGLContext);
- else
- mGLContext = SDL::createGLContext(mWindow, 2, 0, 0x04);
-*/
-}
-
-void MobileOpenGL2Graphics::finalize(ImageCollection *restrict const col)
- restrict2
-{
- if (col == nullptr)
- return;
- FOR_EACH (ImageCollectionIter, it, col->draws)
- finalize(*it);
-}
-
-void MobileOpenGL2Graphics::finalize(ImageVertexes *restrict const vert)
- restrict2
-{
- // in future need convert in each switchVp/continueVp
-
- if (vert == nullptr)
- return;
- OpenGLGraphicsVertexes &ogl = vert->ogl;
- const STD_VECTOR<int> &vp = ogl.mVp;
- STD_VECTOR<int>::const_iterator ivp;
- const STD_VECTOR<int>::const_iterator ivp_end = vp.end();
- STD_VECTOR<GLfloat*> &floatTexPool = ogl.mFloatTexPool;
- STD_VECTOR<GLfloat*>::const_iterator ft;
- const STD_VECTOR<GLfloat*>::const_iterator ft_end = floatTexPool.end();
- STD_VECTOR<GLuint> &vbos = ogl.mVbo;
- STD_VECTOR<GLuint>::const_iterator ivbo;
-
- const int sz = CAST_S32(floatTexPool.size());
- vbos.resize(sz);
- mglGenBuffers(sz, &vbos[0]);
-
- for (ft = floatTexPool.begin(), ivp = vp.begin(), ivbo = vbos.begin();
- ft != ft_end && ivp != ivp_end;
- ++ ft, ++ ivp, ++ ivbo)
- {
- bindArrayBuffer(*ivbo);
- mglBufferData(GL_ARRAY_BUFFER, (*ivp) * sizeof(GLfloat),
- *ft, GL_STATIC_DRAW);
- }
-
- for (STD_VECTOR<GLfloat*>::iterator it = floatTexPool.begin();
- it != floatTexPool.end(); ++ it)
- {
- delete [] (*it);
- }
- floatTexPool.clear();
-}
-
-void MobileOpenGL2Graphics::drawTriangleArray(const int size) restrict2
-{
- mglBufferData(GL_ARRAY_BUFFER, size * sizeof(GLfloat),
- mFloatArray, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLES, 0, size / 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void MobileOpenGL2Graphics::drawTriangleArray(const GLfloat *restrict const
- array,
- const int size) restrict2
-{
- mglBufferData(GL_ARRAY_BUFFER, size * sizeof(GLfloat),
- array, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLES, 0, size / 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void MobileOpenGL2Graphics::drawLineArrays(const int size) restrict2
-{
- mglBufferData(GL_ARRAY_BUFFER, size * sizeof(GLfloat),
- mFloatArray, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_LINES, 0, size / 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-#ifdef DEBUG_BIND_TEXTURE
-void MobileOpenGL2Graphics::debugBindTexture(const Image *restrict const image)
- restrict2
-{
- const std::string texture = image->mIdPath;
- if (mOldTexture != texture)
- {
- if ((!mOldTexture.empty() || !texture.empty())
- && mOldTextureId != image->mGLImage)
- {
- logger->log("bind: %s (%d) to %s (%d)", mOldTexture.c_str(),
- mOldTextureId, texture.c_str(), image->mGLImage);
- }
- mOldTextureId = image->mGLImage;
- mOldTexture = texture;
- }
-}
-#else // DEBUG_BIND_TEXTURE
-void MobileOpenGL2Graphics::debugBindTexture(const Image *restrict const
- image A_UNUSED) restrict2
-{
-}
-#endif // DEBUG_BIND_TEXTURE
-
-#endif // USE_OPENGL
diff --git a/src/render/mobileopengl2graphics.h b/src/render/mobileopengl2graphics.h
deleted file mode 100644
index 3148c5fd7..000000000
--- a/src/render/mobileopengl2graphics.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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 RENDER_MOBILEOPENGL2GRAPHICS_H
-#define RENDER_MOBILEOPENGL2GRAPHICS_H
-
-#if defined(USE_OPENGL) && !defined(ANDROID)
-
-#include "localconsts.h"
-
-#include "render/graphics.h"
-
-#include "resources/fboinfo.h"
-
-#ifdef ANDROID
-#include <GLES/gl.h>
-#include <GLES/glext.h>
-#include <GLES2/gl2.h>
-#else // ANDROID
-#ifndef USE_SDL2
-#define GL_GLEXT_PROTOTYPES 1
-#endif // USE_SDL2
-PRAGMA48(GCC diagnostic push)
-PRAGMA48(GCC diagnostic ignored "-Wshadow")
-#include <SDL_opengl.h>
-PRAGMA48(GCC diagnostic pop)
-#if defined(__APPLE__)
-#include <OpenGL/glext.h>
-#elif !defined(__native_client__)
-#include <GL/glext.h>
-#endif // defined(__APPLE__)
-#endif // ANDROID
-
-class OpenGLGraphicsVertexes;
-class ShaderProgram;
-
-class MobileOpenGL2Graphics final : public Graphics
-{
- public:
- MobileOpenGL2Graphics();
-
- A_DELETE_COPY(MobileOpenGL2Graphics)
-
- ~MobileOpenGL2Graphics();
-
- void postInit() restrict2 override final;
-
- void setColor(const Color &restrict color) restrict2 override final;
-
- void screenResized() restrict2 override final;
-
- void finalize(ImageCollection *restrict const col)
- restrict2 override final;
-
- void finalize(ImageVertexes *restrict const vert)
- restrict2 override final;
-
- void testDraw() restrict2 override final;
-
- void removeArray(const uint32_t id,
- uint32_t *restrict const arr)
- restrict2 override final A_NONNULL(3);
-
- void createGLContext(const bool custom) restrict2 override final;
-
- #include "render/graphicsdef.hpp"
- RENDER_GRAPHICSDEF_HPP
-
- #include "render/openglgraphicsdef.hpp"
- RENDER_OPENGLGRAPHICSDEF_HPP
-
- #include "render/openglgraphicsdefadvanced.hpp"
- RENDER_OPENGLGRAPHICSDEFADVANCED_HPP
-
- private:
- void deleteGLObjects() restrict2;
-
- inline void drawQuad(const int srcX,
- const int srcY,
- const int dstX,
- const int dstY,
- const int width,
- const int height) restrict2 A_INLINE;
-
- inline void drawRescaledQuad(const int srcX, const int srcY,
- const int dstX, const int dstY,
- const int width, const int height,
- const int desiredWidth,
- const int desiredHeight)
- restrict2 A_INLINE;
-
- inline void drawTriangleArray(const int size) restrict2 A_INLINE;
-
- inline void drawTriangleArray(const GLfloat *restrict const array,
- const int size) restrict2 A_INLINE;
-
- inline void drawLineArrays(const int size) restrict2 A_INLINE;
-
- inline void bindArrayBuffer(const GLuint vbo) restrict2 A_INLINE;
-
- inline void bindArrayBufferAndAttributes(const GLuint vbo)
- restrict2 A_INLINE;
-
- inline void bindAttributes() restrict2 A_INLINE;
-
- static void bindTexture2(const GLenum target,
- const Image *restrict const image);
-
- static GLuint mTextureSizeUniform;
- static int mTextureWidth;
- static int mTextureHeight;
-
- GLfloat *mFloatArray A_NONNULLPOINTER;
- GLfloat *mFloatArrayCached A_NONNULLPOINTER;
- ShaderProgram *mProgram;
- float mAlphaCached;
- int mVpCached;
-
- float mFloatColor;
- int mMaxVertices;
- GLuint mProgramId;
- GLuint mSimpleColorUniform;
- GLint mPosAttrib;
- GLint mTextureColorUniform;
- GLuint mScreenUniform;
- GLuint mDrawTypeUniform;
-#ifndef __native_client__
- GLuint mVao;
-#endif // __native_client__
-
- GLuint mVbo;
- GLuint mVboBinded;
- GLuint mAttributesBinded;
- bool mColorAlpha;
- bool mTextureDraw;
-#ifdef DEBUG_BIND_TEXTURE
- std::string mOldTexture;
- unsigned mOldTextureId;
-#endif // DEBUG_BIND_TEXTURE
-
- FBOInfo mFbo;
-};
-#endif // defined(USE_OPENGL) && !defined(ANDROID)
-
-#endif // RENDER_MOBILEOPENGL2GRAPHICS_H
diff --git a/src/render/mobileopenglgraphics.cpp b/src/render/mobileopenglgraphics.cpp
deleted file mode 100644
index 0f3ce09ea..000000000
--- a/src/render/mobileopenglgraphics.cpp
+++ /dev/null
@@ -1,1385 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-#if defined(USE_OPENGL) && !defined(__native_client__)
-
-#include "render/mobileopenglgraphics.h"
-
-#ifdef OPENGLERRORS
-#include "graphicsmanager.h"
-#endif // OPENGLERRORS
-
-#include "render/opengl/mgl.h"
-#ifdef __native_client__
-#include "render/opengl/naclglfunctions.h"
-#endif // __native_client__
-
-#include "render/vertexes/imagecollection.h"
-
-#include "resources/imagerect.h"
-#include "resources/openglimagehelper.h"
-
-#include "resources/image/image.h"
-
-#include "utils/sdlcheckutils.h"
-
-#include "debug.h"
-
-#define vertFill2D(tVar, vVar, x1, y1, x2, y2, dstX, dstY, w, h) \
- tVar[vp + 0] = x1; \
- tVar[vp + 1] = y1; \
- tVar[vp + 2] = x2; \
- tVar[vp + 3] = y1; \
- tVar[vp + 4] = x2; \
- tVar[vp + 5] = y2; \
- tVar[vp + 6] = x1; \
- tVar[vp + 7] = y1; \
- tVar[vp + 8] = x1; \
- tVar[vp + 9] = y2; \
- tVar[vp + 10] = x2; \
- tVar[vp + 11] = y2; \
- vVar[vp + 0] = static_cast<GLshort>(dstX); \
- vVar[vp + 1] = static_cast<GLshort>(dstY); \
- vVar[vp + 2] = static_cast<GLshort>(dstX + w); \
- vVar[vp + 3] = static_cast<GLshort>(dstY); \
- vVar[vp + 4] = static_cast<GLshort>(dstX + w); \
- vVar[vp + 5] = static_cast<GLshort>(dstY + h); \
- vVar[vp + 6] = static_cast<GLshort>(dstX); \
- vVar[vp + 7] = static_cast<GLshort>(dstY); \
- vVar[vp + 8] = static_cast<GLshort>(dstX); \
- vVar[vp + 9] = static_cast<GLshort>(dstY + h); \
- vVar[vp + 10] = static_cast<GLshort>(dstX + w); \
- vVar[vp + 11] = static_cast<GLshort>(dstY + h);
-
-GLuint MobileOpenGLGraphics::mTextureBinded = 0;
-#ifdef DEBUG_DRAW_CALLS
-unsigned int MobileOpenGLGraphics::mDrawCalls = 0;
-unsigned int MobileOpenGLGraphics::mLastDrawCalls = 0;
-#endif // DEBUG_DRAW_CALLS
-
-MobileOpenGLGraphics::MobileOpenGLGraphics() :
- mFloatTexArray(nullptr),
- mShortVertArray(nullptr),
- mFloatTexArrayCached(nullptr),
- mShortVertArrayCached(nullptr),
- mAlphaCached(1.0F),
- mVpCached(0),
- mTexture(false),
- mIsByteColor(false),
- mByteColor(),
- mImageCached(0),
- mFloatColor(1.0F),
- mMaxVertices(500),
- mColorAlpha(false),
-#ifdef DEBUG_BIND_TEXTURE
- mOldTexture(),
- mOldTextureId(0),
-#endif // DEBUG_BIND_TEXTURE
- mFbo()
-{
- mOpenGL = RENDER_GLES_OPENGL;
- mName = "mobile OpenGL ES";
-}
-
-MobileOpenGLGraphics::~MobileOpenGLGraphics()
-{
- deleteArraysInternal();
-}
-
-void MobileOpenGLGraphics::postInit() restrict2
-{
-// glesTest();
-}
-
-void MobileOpenGLGraphics::initArrays(const int vertCount) restrict2
-{
- mMaxVertices = vertCount;
- if (mMaxVertices < 500)
- mMaxVertices = 500;
- else if (mMaxVertices > 1024)
- mMaxVertices = 1024;
-
- // need alocate small size, after if limit reached reallocate to double size
- const size_t sz = mMaxVertices * 4 + 30;
- vertexBufSize = mMaxVertices;
- if (mFloatTexArray == nullptr)
- mFloatTexArray = new GLfloat[sz];
- if (mShortVertArray == nullptr)
- mShortVertArray = new GLshort[sz];
- if (mFloatTexArrayCached == nullptr)
- mFloatTexArrayCached = new GLfloat[sz];
- if (mShortVertArrayCached == nullptr)
- mShortVertArrayCached = new GLshort[sz];
-}
-
-void MobileOpenGLGraphics::deleteArrays() restrict2
-{
- deleteArraysInternal();
-}
-
-void MobileOpenGLGraphics::deleteArraysInternal() restrict2
-{
- delete [] mFloatTexArray;
- mFloatTexArray = nullptr;
- delete [] mShortVertArray;
- mShortVertArray = nullptr;
- delete [] mFloatTexArrayCached;
- mFloatTexArrayCached = nullptr;
- delete [] mShortVertArrayCached;
- mShortVertArrayCached = nullptr;
-}
-
-bool MobileOpenGLGraphics::setVideoMode(const int w, const int h,
- const int scale,
- const int bpp,
- const bool fs,
- const bool hwaccel,
- const bool resize,
- const bool noFrame,
- const bool allowHighDPI) restrict2
-{
- setMainFlags(w, h,
- scale,
- bpp,
- fs,
- hwaccel,
- resize,
- noFrame,
- allowHighDPI);
-
- return setOpenGLMode();
-}
-
-static inline void drawQuad(const Image *restrict const image,
- const int srcX,
- const int srcY,
- const int dstX,
- const int dstY,
- const int width,
- const int height) A_NONNULL(1) A_INLINE;
-
-static inline void drawQuad(const Image *restrict const image,
- const int srcX,
- const int srcY,
- const int dstX,
- const int dstY,
- const int width,
- const int height)
-{
-// if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
- // Find OpenGL normalized texture coordinates.
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
- const float texX2 = static_cast<float>(srcX + width) / tw;
- const float texY2 = static_cast<float>(srcY + height) / th;
-
- GLfloat tex[] =
- {
- texX1, texY1,
- texX2, texY1,
- texX1, texY2,
- texX2, texY2
- };
-
- GLshort vert[] =
- {
- static_cast<GLshort>(dstX), static_cast<GLshort>(dstY),
- static_cast<GLshort>(dstX + width), static_cast<GLshort>(dstY),
- static_cast<GLshort>(dstX), static_cast<GLshort>(dstY + height),
- static_cast<GLshort>(dstX + width),
- static_cast<GLshort>(dstY + height)
- };
-
- glVertexPointer(2, GL_SHORT, 0, &vert);
- glTexCoordPointer(2, GL_FLOAT, 0, &tex);
-
-#ifdef DEBUG_DRAW_CALLS
- MobileOpenGLGraphics::mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
- }
-}
-
-static inline void drawRescaledQuad(const Image *restrict const image,
- const int srcX, const int srcY,
- const int dstX, const int dstY,
- const int width, const int height,
- const int desiredWidth,
- const int desiredHeight)
- A_NONNULL(1) A_INLINE;
-
-static inline void drawRescaledQuad(const Image *restrict const image,
- const int srcX, const int srcY,
- const int dstX, const int dstY,
- const int width, const int height,
- const int desiredWidth,
- const int desiredHeight)
-{
-// if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
- // Find OpenGL normalized texture coordinates.
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
- const float texX2 = static_cast<float>(srcX + width) / tw;
- const float texY2 = static_cast<float>(srcY + height) / th;
-
- GLfloat tex[] =
- {
- texX1, texY1,
- texX2, texY1,
- texX1, texY2,
- texX2, texY2
- };
-
- GLshort vert[] =
- {
- static_cast<GLshort>(dstX), static_cast<GLshort>(dstY),
- static_cast<GLshort>(dstX + desiredWidth),
- static_cast<GLshort>(dstY),
- static_cast<GLshort>(dstX), static_cast<GLshort>(
- dstY + desiredHeight),
- static_cast<GLshort>(dstX + desiredWidth),
- static_cast<GLshort>(dstY + desiredHeight)
- };
- glVertexPointer(2, GL_SHORT, 0, &vert);
- glTexCoordPointer(2, GL_FLOAT, 0, &tex);
-
-#ifdef DEBUG_DRAW_CALLS
- MobileOpenGLGraphics::mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
- }
-}
-
-void MobileOpenGLGraphics::drawImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void MobileOpenGLGraphics::drawImageInline(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- FUNC_BLOCK("Graphics::drawImage", 1)
- if (image == nullptr)
- return;
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
-
- const SDL_Rect &imageRect = image->mBounds;
- drawQuad(image, imageRect.x, imageRect.y,
- dstX, dstY, imageRect.w, imageRect.h);
-}
-
-void MobileOpenGLGraphics::copyImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void MobileOpenGLGraphics::drawImageCached(const Image *restrict const image,
- int x, int y) restrict2
-{
- if (image == nullptr)
- return;
-
- if (image->mGLImage != mImageCached)
- {
- completeCache();
- mImageCached = image->mGLImage;
- mAlphaCached = image->mAlpha;
- }
-
- const SDL_Rect &imageRect = image->mBounds;
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const int w = imageRect.w;
- const int h = imageRect.h;
-
- if (w == 0 || h == 0)
- return;
-
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- const unsigned int vLimit = mMaxVertices * 4;
-
- unsigned int vp = mVpCached;
-
- // Draw a set of textured rectangles
-// if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- float texX1 = static_cast<float>(srcX) / tw;
- float texY1 = static_cast<float>(srcY) / th;
- float texX2 = static_cast<float>(srcX + w) / tw;
- float texY2 = static_cast<float>(srcY + h) / th;
-
- vertFill2D(mFloatTexArrayCached, mShortVertArrayCached,
- texX1, texY1, texX2, texY2,
- x, y, w, h);
-
- vp += 12;
- if (vp >= vLimit)
- {
- completeCache();
- vp = 0;
- }
- else
- {
- mVpCached = vp;
- }
- }
-}
-
-void MobileOpenGLGraphics::drawPatternCached(const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) restrict2
-{
- if (image == nullptr)
- return;
-
- if (image->mGLImage != mImageCached)
- {
- completeCache();
- mImageCached = image->mGLImage;
- }
-
- const SDL_Rect &imageRect = image->mBounds;
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
-
- if (iw == 0 || ih == 0)
- return;
-
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- unsigned int vp = mVpCached;
- const unsigned int vLimit = mMaxVertices * 4;
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const float texY2 = static_cast<float>(srcY + height) / th;
- const int dstY = y + py;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x + px;
-
- const float texX2 = static_cast<float>(srcX + width) / tw;
-
- vertFill2D(mFloatTexArrayCached, mShortVertArrayCached,
- texX1, texY1, texX2, texY2,
- dstX, dstY, width, height);
-
- vp += 12;
- if (vp >= vLimit)
- {
- completeCache();
- vp = 0;
- }
- }
- }
- mVpCached = vp;
-}
-
-void MobileOpenGLGraphics::completeCache() restrict2
-{
- if (mImageCached == 0u)
- return;
-
- setColorAlpha(mAlphaCached);
-#ifdef DEBUG_BIND_TEXTURE
-// debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture(OpenGLImageHelper::mTextureType, mImageCached);
- enableTexturingAndBlending();
-
- drawTriangleArrayfsCached(mVpCached);
- mImageCached = 0;
- mVpCached = 0;
-}
-
-void MobileOpenGLGraphics::drawRescaledImage(const Image *restrict const image,
- int dstX, int dstY,
- const int desiredWidth,
- const int desiredHeight) restrict2
-{
- FUNC_BLOCK("Graphics::drawRescaledImage", 1)
- if (image == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
-
- // Just draw the image normally when no resizing is necessary,
- if (imageRect.w == desiredWidth && imageRect.h == desiredHeight)
- {
- drawImageInline(image, dstX, dstY);
- return;
- }
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
-
- // Draw a textured quad.
- drawRescaledQuad(image, imageRect.x, imageRect.y, dstX, dstY,
- imageRect.w, imageRect.h, desiredWidth, desiredHeight);
-}
-
-void MobileOpenGLGraphics::drawPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- drawPatternInline(image, x, y, w, h);
-}
-
-void MobileOpenGLGraphics::drawPatternInline(const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) restrict2
-{
- FUNC_BLOCK("Graphics::drawPattern", 1)
- if (image == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
-
- if (iw == 0 || ih == 0)
- return;
-
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- setColorAlpha(image->mAlpha);
-
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
-
- enableTexturingAndBlending();
-
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
- // Draw a set of textured rectangles
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const float texY2 = static_cast<float>(srcY + height) / th;
- const int dstY = y + py;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x + px;
-
- const float texX2 = static_cast<float>(srcX + width) / tw;
-
- vertFill2D(mFloatTexArray, mShortVertArray,
- texX1, texY1, texX2, texY2,
- dstX, dstY, width, height);
-
- vp += 12;
- if (vp >= vLimit)
- {
- drawTriangleArrayfs(vp);
- vp = 0;
- }
- }
- }
- if (vp > 0)
- drawTriangleArrayfs(vp);
-}
-
-void MobileOpenGLGraphics::drawRescaledPattern(const Image *
- restrict const image,
- const int x, const int y,
- const int w, const int h,
- const int scaledWidth,
- const int scaledHeight)
- restrict2
-{
- if (image == nullptr)
- return;
-
- if (scaledWidth == 0 || scaledHeight == 0)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
- if (iw == 0 || ih == 0)
- return;
-
- setColorAlpha(image->mAlpha);
-
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
-
- enableTexturingAndBlending();
-
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
-
- // Draw a set of textured rectangles
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
-
- const float tFractionW = iw / tw;
- const float tFractionH = ih / th;
-
- for (int py = 0; py < h; py += scaledHeight)
- {
- const int height = (py + scaledHeight >= h)
- ? h - py : scaledHeight;
- const int dstY = y + py;
- const float visibleFractionH = static_cast<float>(height)
- / scaledHeight;
- const float texY2 = texY1 + tFractionH * visibleFractionH;
- for (int px = 0; px < w; px += scaledWidth)
- {
- const int width = (px + scaledWidth >= w)
- ? w - px : scaledWidth;
- const int dstX = x + px;
- const float visibleFractionW = static_cast<float>(width)
- / scaledWidth;
- const float texX2 = texX1 + tFractionW * visibleFractionW;
-
- vertFill2D(mFloatTexArray, mShortVertArray,
- texX1, texY1, texX2, texY2,
- dstX, dstY, width, height);
-
- vp += 12;
- if (vp >= vLimit)
- {
- drawTriangleArrayfs(vp);
- vp = 0;
- }
- }
- }
- if (vp > 0)
- drawTriangleArrayfs(vp);
-}
-
-inline void MobileOpenGLGraphics::drawVertexes(const
- OpenGLGraphicsVertexes
- &restrict ogl) restrict2
-{
- const STD_VECTOR<GLshort*> &shortVertPool = ogl.mShortVertPool;
- STD_VECTOR<GLshort*>::const_iterator iv;
- const STD_VECTOR<GLshort*>::const_iterator iv_end = shortVertPool.end();
- const STD_VECTOR<int> &vp = ogl.mVp;
- STD_VECTOR<int>::const_iterator ivp;
- const STD_VECTOR<int>::const_iterator ivp_end = vp.end();
-
- // Draw a set of textured rectangles
-// if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const STD_VECTOR<GLfloat*> &floatTexPool = ogl.mFloatTexPool;
- STD_VECTOR<GLfloat*>::const_iterator ft;
- const STD_VECTOR<GLfloat*>::const_iterator
- ft_end = floatTexPool.end();
-
- for (iv = shortVertPool.begin(), ft = floatTexPool.begin(),
- ivp = vp.begin();
- iv != iv_end && ft != ft_end && ivp != ivp_end;
- ++ iv, ++ ft, ++ ivp)
- {
- drawTriangleArrayfs(*iv, *ft, *ivp);
- }
- }
-}
-
-void MobileOpenGLGraphics::calcPattern(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void MobileOpenGLGraphics::calcPatternInline(ImageVertexes *
- restrict const vert,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- if (image == nullptr || vert == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
-
- if (iw == 0 || ih == 0)
- return;
-
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- const unsigned int vLimit = mMaxVertices * 4;
-
- OpenGLGraphicsVertexes &ogl = vert->ogl;
- unsigned int vp = ogl.continueVp();
-
- // Draw a set of textured rectangles
-// if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
-
- GLfloat *floatTexArray = ogl.continueFloatTexArray();
- GLshort *shortVertArray = ogl.continueShortVertArray();
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y + py;
- const float texY2 = static_cast<float>(srcY + height) / th;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x + px;
- const float texX2 = static_cast<float>(srcX + width) / tw;
-
- vertFill2D(floatTexArray, shortVertArray,
- texX1, texY1, texX2, texY2,
- dstX, dstY, width, height);
-
- vp += 12;
- if (vp >= vLimit)
- {
- floatTexArray = ogl.switchFloatTexArray();
- shortVertArray = ogl.switchShortVertArray();
- ogl.switchVp(vp);
- vp = 0;
- }
- }
- }
- }
- ogl.switchVp(vp);
-}
-
-void MobileOpenGLGraphics::calcTileCollection(ImageCollection *
- restrict const vertCol,
- const Image *
- restrict const image,
- int x, int y) restrict2
-{
- if (vertCol == nullptr || image == nullptr)
- return;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- ImageVertexes *const vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- calcTileVertexesInline(vert, image, x, y);
- }
- else
- {
- calcTileVertexesInline(vertCol->currentVert, image, x, y);
- }
-}
-
-void MobileOpenGLGraphics::drawTileCollection(const ImageCollection *
- restrict const vertCol)
- restrict2
-{
- const ImageVertexesVector &draws = vertCol->draws;
- const ImageCollectionCIter it_end = draws.end();
- for (ImageCollectionCIter it = draws.begin(); it != it_end; ++ it)
- {
- const ImageVertexes *const vert = *it;
- const Image *const image = vert->image;
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
- drawVertexes(vert->ogl);
- }
-}
-
-void MobileOpenGLGraphics::calcPattern(ImageCollection *restrict const vertCol,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- if (vertCol == nullptr || image == nullptr)
- return;
- ImageVertexes *vert = nullptr;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
-
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void MobileOpenGLGraphics::calcTileVertexes(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- int dstX, int dstY) const restrict2
-{
- calcTileVertexesInline(vert, image, dstX, dstY);
-}
-
-void MobileOpenGLGraphics::calcTileVertexesInline(ImageVertexes *
- restrict const vert,
- const Image *
- restrict const image,
- int dstX,
- int dstY) const restrict2
-{
- const SDL_Rect &imageRect = image->mBounds;
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const int w = imageRect.w;
- const int h = imageRect.h;
-
- if (w == 0 || h == 0)
- return;
-
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- const unsigned int vLimit = mMaxVertices * 4;
-
- OpenGLGraphicsVertexes &ogl = vert->ogl;
-
-// STD_VECTOR<int> *vps = ogl.getVp();
- unsigned int vp = ogl.continueVp();
-
- // Draw a set of textured rectangles
-// if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- float texX1 = static_cast<float>(srcX) / tw;
- float texY1 = static_cast<float>(srcY) / th;
- float texX2 = static_cast<float>(srcX + w) / tw;
- float texY2 = static_cast<float>(srcY + h) / th;
-
- GLfloat *const floatTexArray = ogl.continueFloatTexArray();
- GLshort *const shortVertArray = ogl.continueShortVertArray();
-
- vertFill2D(floatTexArray, shortVertArray,
- texX1, texY1, texX2, texY2,
- dstX, dstY, w, h);
-
- vp += 12;
- if (vp >= vLimit)
- {
- ogl.switchFloatTexArray();
- ogl.switchShortVertArray();
- ogl.switchVp(vp);
- vp = 0;
- }
- }
- ogl.switchVp(vp);
-}
-
-void MobileOpenGLGraphics::drawTileVertexes(const ImageVertexes *
- restrict const vert) restrict2
-{
- if (vert == nullptr)
- return;
- const Image *const image = vert->image;
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
- drawVertexes(vert->ogl);
-}
-
-void MobileOpenGLGraphics::calcWindow(ImageCollection *restrict const vertCol,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- ImageVertexes *vert = nullptr;
- const Image *const image = imgRect.grid[4];
- if (image == nullptr)
- return;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
- calcImageRect(vert, x, y, w, h, imgRect);
-}
-
-
-void MobileOpenGLGraphics::updateScreen() restrict2
-{
- BLOCK_START("Graphics::updateScreen")
-// glFlush();
-// glFinish();
-#ifdef DEBUG_DRAW_CALLS
- mLastDrawCalls = mDrawCalls;
- mDrawCalls = 0;
-#endif // DEBUG_DRAW_CALLS
-#ifdef USE_SDL2
- SDL_GL_SwapWindow(mWindow);
-#else // USE_SDL2
-
- SDL_GL_SwapBuffers();
-#endif // USE_SDL2
-#ifdef DEBUG_OPENGL
- if (isGLNotNull(mglFrameTerminator))
- mglFrameTerminator();
-#endif // DEBUG_OPENGL
-
- BLOCK_END("Graphics::updateScreen")
-}
-
-void MobileOpenGLGraphics::beginDraw() restrict2
-{
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-
-#ifdef ANDROID
- glOrthof(0.0, static_cast<float>(mRect.w),
- static_cast<float>(mRect.h),
- 0.0, -1.0, 1.0);
-#else // ANDROID
-
- glOrtho(0.0, static_cast<double>(mRect.w),
- static_cast<double>(mRect.h),
- 0.0, -1.0, 1.0);
-#endif // ANDROID
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
- setOpenGLFlags();
- mglDisable(GL_LIGHTING);
- mglDisable(GL_FOG);
- mglDisable(GL_COLOR_MATERIAL);
-
- glShadeModel(GL_FLAT);
-
- glEnableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
-
-#ifndef ANDROID
- mglHint(GL_LINE_SMOOTH_HINT, GL_FASTEST);
- mglHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
- mglHint(GL_POINT_SMOOTH_HINT, GL_FASTEST);
- mglHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST);
-#endif // ANDROID
-
- pushClipArea(Rect(0, 0, mRect.w, mRect.h));
-}
-
-void MobileOpenGLGraphics::endDraw() restrict2
-{
- popClipArea();
-}
-
-void MobileOpenGLGraphics::pushClipArea(const Rect &restrict area) restrict2
-{
- int transX = 0;
- int transY = 0;
-
- if (!mClipStack.empty())
- {
- const ClipRect &clipArea = mClipStack.top();
- transX = -clipArea.xOffset;
- transY = -clipArea.yOffset;
- }
-
- Graphics::pushClipArea(area);
-
- const ClipRect &clipArea = mClipStack.top();
- transX += clipArea.xOffset;
- transY += clipArea.yOffset;
-
- if (transX != 0 || transY != 0)
- {
- glTranslatef(static_cast<GLfloat>(transX),
- static_cast<GLfloat>(transY), 0);
- }
- mglScissor(clipArea.x * mScale,
- (mRect.h - clipArea.y - clipArea.height) * mScale,
- clipArea.width * mScale,
- clipArea.height * mScale);
-}
-
-void MobileOpenGLGraphics::popClipArea() restrict2
-{
- if (mClipStack.empty())
- return;
-
- const ClipRect &clipArea1 = mClipStack.top();
- int transX = -clipArea1.xOffset;
- int transY = -clipArea1.yOffset;
-
- Graphics::popClipArea();
-
- if (mClipStack.empty())
- return;
-
- const ClipRect &clipArea = mClipStack.top();
- transX += clipArea.xOffset;
- transY += clipArea.yOffset;
- if (transX != 0 || transY != 0)
- {
- glTranslatef(static_cast<GLfloat>(transX),
- static_cast<GLfloat>(transY), 0);
- }
- mglScissor(clipArea.x * mScale,
- (mRect.h - clipArea.y - clipArea.height) * mScale,
- clipArea.width * mScale,
- clipArea.height * mScale);
-}
-
-#ifdef ANDROID
-void MobileOpenGLGraphics::drawPoint(int x A_UNUSED, int y A_UNUSED) restrict2
-#else // ANDROID
-void MobileOpenGLGraphics::drawPoint(int x, int y) restrict2
-#endif // ANDROID
-{
- disableTexturingAndBlending();
- restoreColor();
-
-#ifdef ANDROID
- // TODO need fix
-#else // ANDROID
-
- glBegin(GL_POINTS);
- glVertex2i(x, y);
- glEnd();
-#endif // ANDROID
-}
-
-void MobileOpenGLGraphics::drawLine(int x1, int y1,
- int x2, int y2) restrict2
-{
- disableTexturingAndBlending();
- restoreColor();
-
- mShortVertArray[0] = static_cast<GLshort>(x1);
- mShortVertArray[1] = static_cast<GLshort>(y1);
- mShortVertArray[2] = static_cast<GLshort>(x2);
- mShortVertArray[3] = static_cast<GLshort>(y2);
-
- drawLineArrays(4);
-}
-
-void MobileOpenGLGraphics::drawRectangle(const Rect &restrict rect) restrict2
-{
- drawRectangle(rect, false);
-}
-
-void MobileOpenGLGraphics::fillRectangle(const Rect &restrict rect) restrict2
-{
- drawRectangle(rect, true);
-}
-
-void MobileOpenGLGraphics::enableTexturingAndBlending() restrict2
-{
- if (!mTexture)
- {
- mglEnable(OpenGLImageHelper::mTextureType);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- mTexture = true;
- }
-
- if (!mAlpha)
- {
- mglEnable(GL_BLEND);
- mAlpha = true;
- }
-}
-
-void MobileOpenGLGraphics::disableTexturingAndBlending() restrict2
-{
- mTextureBinded = 0;
- if (mAlpha && !mColorAlpha)
- {
- mglDisable(GL_BLEND);
- mAlpha = false;
- }
- else if (!mAlpha && mColorAlpha)
- {
- mglEnable(GL_BLEND);
- mAlpha = true;
- }
-
- if (mTexture)
- {
- mglDisable(OpenGLImageHelper::mTextureType);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- mTexture = false;
- }
-}
-
-void MobileOpenGLGraphics::drawRectangle(const Rect &restrict rect,
- const bool filled) restrict2
-{
- BLOCK_START("Graphics::drawRectangle")
- disableTexturingAndBlending();
- restoreColor();
-
- const GLshort x = static_cast<GLshort>(rect.x);
- const GLshort y = static_cast<GLshort>(rect.y);
- const GLshort width = static_cast<GLshort>(rect.width);
- const GLshort height = static_cast<GLshort>(rect.height);
- const GLshort xw = static_cast<GLshort>(rect.x + width);
- const GLshort yh = static_cast<GLshort>(rect.y + height);
-
- if (filled)
- {
- GLshort vert[] =
- {
- x, y,
- xw, y,
- x, yh,
- xw, yh
- };
-
- glVertexPointer(2, GL_SHORT, 0, &vert);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- mglDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
- }
- else
- {
- GLshort vert[] =
- {
- x, y,
- xw, y,
- xw, yh,
- x, yh
- };
-
- glVertexPointer(2, GL_SHORT, 0, &vert);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- mglDrawArrays(GL_LINE_LOOP, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
- }
- BLOCK_END("Graphics::drawRectangle")
-}
-
-void MobileOpenGLGraphics::drawNet(const int x1, const int y1,
- const int x2, const int y2,
- const int width, const int height) restrict2
-{
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
-
- disableTexturingAndBlending();
- restoreColor();
-
- const GLshort xs1 = static_cast<GLshort>(x1);
- const GLshort xs2 = static_cast<GLshort>(x2);
- const GLshort ys1 = static_cast<GLshort>(y1);
- const GLshort ys2 = static_cast<GLshort>(y2);
- const int16_t width1 = CAST_S16(width);
- const int16_t height1 = CAST_S16(height);
-
- for (int16_t y = CAST_S16(y1); y < y2; y += height1)
- {
- mShortVertArray[vp + 0] = xs1;
- mShortVertArray[vp + 1] = y;
-
- mShortVertArray[vp + 2] = xs2;
- mShortVertArray[vp + 3] = y;
-
- vp += 4;
- if (vp >= vLimit)
- {
- drawLineArrays(vp);
- vp = 0;
- }
- }
-
- for (int16_t x = CAST_S16(x1); x < x2; x += width1)
- {
- mShortVertArray[vp + 0] = x;
- mShortVertArray[vp + 1] = ys1;
-
- mShortVertArray[vp + 2] = x;
- mShortVertArray[vp + 3] = ys2;
-
- vp += 4;
- if (vp >= vLimit)
- {
- drawLineArrays(vp);
- vp = 0;
- }
- }
-
- if (vp > 0)
- drawLineArrays(vp);
-}
-
-void MobileOpenGLGraphics::bindTexture(const GLenum target,
- const GLuint texture)
-{
- if (mTextureBinded != texture)
- {
- mTextureBinded = texture;
- mglBindTexture(target, texture);
- }
-}
-
-inline void MobileOpenGLGraphics::drawTriangleArrayfs(const int size) restrict2
-{
- glVertexPointer(2, GL_SHORT, 0, mShortVertArray);
- glTexCoordPointer(2, GL_FLOAT, 0, mFloatTexArray);
-
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- mglDrawArrays(GL_TRIANGLES, 0, size / 2);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-inline void MobileOpenGLGraphics::drawTriangleArrayfsCached(const int size)
- restrict2
-{
- glVertexPointer(2, GL_SHORT, 0, mShortVertArrayCached);
- glTexCoordPointer(2, GL_FLOAT, 0, mFloatTexArrayCached);
-
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- mglDrawArrays(GL_TRIANGLES, 0, size / 2);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-inline void MobileOpenGLGraphics::drawTriangleArrayfs(const GLshort *restrict
- const shortVertArray,
- const GLfloat *restrict
- const floatTexArray,
- const int size) restrict2
-{
- glVertexPointer(2, GL_SHORT, 0, shortVertArray);
- glTexCoordPointer(2, GL_FLOAT, 0, floatTexArray);
-
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- mglDrawArrays(GL_TRIANGLES, 0, size / 2);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-inline void MobileOpenGLGraphics::drawLineArrays(const int size) restrict2
-{
- glVertexPointer(2, GL_SHORT, 0, mShortVertArray);
-
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- mglDrawArrays(GL_LINES, 0, size / 2);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void MobileOpenGLGraphics::dumpSettings()
-{
- GLint test[1000];
- logger->log("\n\n");
- logger->log("start opengl dump");
- for (int f = 0; f < 65535; f ++)
- {
- test[0] = 0;
- test[1] = 0;
- test[2] = 0;
- test[3] = 0;
- mglGetIntegerv(f, &test[0]);
- if (test[0] != 0 || test[1] != 0 || test[2] != 0 || test[3] != 0)
- {
- logger->log("\n%d = %d, %d, %d, %d", f,
- test[0], test[1], test[2], test[3]);
- }
- }
-}
-
-void MobileOpenGLGraphics::setColorAlpha(const float alpha) restrict2
-{
- if (!mIsByteColor && mFloatColor == alpha)
- return;
-
- glColor4f(1.0F, 1.0F, 1.0F, alpha);
- mIsByteColor = false;
- mFloatColor = alpha;
-}
-
-void MobileOpenGLGraphics::restoreColor() restrict2
-{
- if (mIsByteColor && mByteColor == mColor)
- return;
-
- glColor4ub(static_cast<GLubyte>(mColor.r),
- static_cast<GLubyte>(mColor.g),
- static_cast<GLubyte>(mColor.b),
- static_cast<GLubyte>(mColor.a));
- mIsByteColor = true;
- mByteColor = mColor;
-}
-
-void MobileOpenGLGraphics::drawImageRect(const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- #include "render/graphics_drawImageRect.hpp"
-}
-
-void MobileOpenGLGraphics::calcImageRect(ImageVertexes *restrict const vert,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- #include "render/graphics_calcImageRect.hpp"
-}
-
-void MobileOpenGLGraphics::clearScreen() const restrict2
-{
- mglClear(GL_COLOR_BUFFER_BIT |
- GL_DEPTH_BUFFER_BIT |
- GL_STENCIL_BUFFER_BIT);
-}
-
-#ifdef DEBUG_BIND_TEXTURE
-void MobileOpenGLGraphics::debugBindTexture(const Image *restrict const image)
- restrict2
-{
- const std::string texture = image->mIdPath;
- if (mOldTexture != texture)
- {
- if ((!mOldTexture.empty() || !texture.empty())
- && mOldTextureId != image->mGLImage)
- {
- logger->log("bind: %s (%d) to %s (%d)", mOldTexture.c_str(),
- mOldTextureId, texture.c_str(), image->mGLImage);
- }
- mOldTextureId = image->mGLImage;
- mOldTexture = texture;
- }
-}
-#else // DEBUG_BIND_TEXTURE
-
-void MobileOpenGLGraphics::debugBindTexture(const Image *restrict const
- image A_UNUSED) restrict2
-{
-}
-#endif // DEBUG_BIND_TEXTURE
-
-#endif // defined(USE_OPENGL) && !defined(__native_client__)
diff --git a/src/render/mobileopenglgraphics.h b/src/render/mobileopenglgraphics.h
deleted file mode 100644
index 7f4da86da..000000000
--- a/src/render/mobileopenglgraphics.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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 RENDER_MOBILEOPENGLGRAPHICS_H
-#define RENDER_MOBILEOPENGLGRAPHICS_H
-
-#if defined(USE_OPENGL) && !defined(__native_client__)
-
-#include "localconsts.h"
-
-#include "render/graphics.h"
-
-#include "resources/fboinfo.h"
-
-#ifdef ANDROID
-#include <GLES/gl.h>
-#include <GLES/glext.h>
-#include <GLES2/gl2.h>
-#else // ANDROID
-#ifndef USE_SDL2
-#define GL_GLEXT_PROTOTYPES 1
-#endif // USE_SDL2
-PRAGMA48(GCC diagnostic push)
-PRAGMA48(GCC diagnostic ignored "-Wshadow")
-#include <SDL_opengl.h>
-PRAGMA48(GCC diagnostic pop)
-#if defined(__APPLE__)
-#include <OpenGL/glext.h>
-#elif !defined(__native_client__)
-#include <GL/glext.h>
-#endif // defined(__APPLE__)
-#endif // ANDROID
-
-class OpenGLGraphicsVertexes;
-
-class MobileOpenGLGraphics final : public Graphics
-{
- public:
- MobileOpenGLGraphics();
-
- A_DELETE_COPY(MobileOpenGLGraphics)
-
- ~MobileOpenGLGraphics();
-
- void postInit() restrict2 override final;
-
- inline void drawTriangleArrayfs(const GLshort *restrict const
- shortVertArray,
- const GLfloat *restrict const
- floatTexArray,
- const int size) restrict2 A_INLINE;
-
- inline void drawTriangleArrayfs(const int size) restrict2 A_INLINE;
-
- inline void drawTriangleArrayfsCached(const int size)
- restrict2 A_INLINE;
-
- inline void drawLineArrays(const int size) restrict2 A_INLINE;
-
- #include "render/graphicsdef.hpp"
- RENDER_GRAPHICSDEF_HPP
-
- #include "render/openglgraphicsdef1.hpp"
- RENDER_OPENGLGRAPHICSDEF1_HPP
-
- #include "render/openglgraphicsdef.hpp"
- RENDER_OPENGLGRAPHICSDEF_HPP
-
- #include "render/openglgraphicsdefadvanced.hpp"
- RENDER_OPENGLGRAPHICSDEFADVANCED_HPP
-
- private:
- GLfloat *mFloatTexArray;
- GLshort *mShortVertArray;
- GLfloat *mFloatTexArrayCached;
- GLshort *mShortVertArrayCached;
- float mAlphaCached;
- int mVpCached;
- bool mTexture;
-
- bool mIsByteColor;
- Color mByteColor;
- GLuint mImageCached;
- float mFloatColor;
- int mMaxVertices;
- bool mColorAlpha;
-#ifdef DEBUG_BIND_TEXTURE
- std::string mOldTexture;
- unsigned mOldTextureId;
-#endif // DEBUG_BIND_TEXTURE
-
- FBOInfo mFbo;
-};
-#endif // defined(USE_OPENGL) && !defined(__native_client__)
-
-#endif // RENDER_MOBILEOPENGLGRAPHICS_H
diff --git a/src/render/modernopenglgraphics.cpp b/src/render/modernopenglgraphics.cpp
deleted file mode 100644
index be1ec4f73..000000000
--- a/src/render/modernopenglgraphics.cpp
+++ /dev/null
@@ -1,1403 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-#if defined(USE_OPENGL) && !defined(ANDROID) && !defined(__native_client__)
-
-#include "render/modernopenglgraphics.h"
-
-#include "graphicsmanager.h"
-
-#include "render/opengl/mgl.h"
-#ifdef __native_client__
-#include "render/opengl/naclglfunctions.h"
-#endif // __native_client__
-
-#include "render/shaders/shaderprogram.h"
-#include "render/shaders/shadersmanager.h"
-
-#include "render/vertexes/imagecollection.h"
-
-#include "resources/imagerect.h"
-#include "resources/openglimagehelper.h"
-
-#include "resources/image/image.h"
-
-#include "utils/delete2.h"
-#include "utils/foreach.h"
-#include "utils/sdlcheckutils.h"
-#include "utils/sdlhelper.h"
-
-#include "debug.h"
-
-#define vertFill2D(var, x1, y1, x2, y2, dstX, dstY, w, h) \
- var[vp + 0] = dstX; \
- var[vp + 1] = dstY; \
- var[vp + 2] = x1; \
- var[vp + 3] = y1; \
- \
- var[vp + 4] = dstX + w; \
- var[vp + 5] = dstY; \
- var[vp + 6] = x2; \
- var[vp + 7] = y1; \
- \
- var[vp + 8] = dstX + w; \
- var[vp + 9] = dstY + h; \
- var[vp + 10] = x2; \
- var[vp + 11] = y2; \
- \
- var[vp + 12] = dstX; \
- var[vp + 13] = dstY; \
- var[vp + 14] = x1; \
- var[vp + 15] = y1; \
- \
- var[vp + 16] = dstX; \
- var[vp + 17] = dstY + h; \
- var[vp + 18] = x1; \
- var[vp + 19] = y2; \
- \
- var[vp + 20] = dstX + w; \
- var[vp + 21] = dstY + h; \
- var[vp + 22] = x2; \
- var[vp + 23] = y2;
-
-GLuint ModernOpenGLGraphics::mTextureBinded = 0;
-#ifdef DEBUG_DRAW_CALLS
-unsigned int ModernOpenGLGraphics::mDrawCalls = 0;
-unsigned int ModernOpenGLGraphics::mLastDrawCalls = 0;
-#endif // DEBUG_DRAW_CALLS
-
-ModernOpenGLGraphics::ModernOpenGLGraphics() :
- mIntArray(nullptr),
- mIntArrayCached(nullptr),
- mProgram(nullptr),
- mAlphaCached(1.0F),
- mVpCached(0),
- mFloatColor(1.0F),
- mMaxVertices(500),
- mProgramId(0U),
- mSimpleColorUniform(0U),
- mPosAttrib(0),
- mTextureColorUniform(0U),
- mScreenUniform(0U),
- mDrawTypeUniform(0U),
- mVao(0U),
- mVbo(0U),
- mEbo(0U),
- mVboBinded(0U),
- mEboBinded(0U),
- mAttributesBinded(0U),
- mColorAlpha(false),
- mTextureDraw(false),
-#ifdef DEBUG_BIND_TEXTURE
- mOldTexture(),
- mOldTextureId(0),
-#endif // DEBUG_BIND_TEXTURE
- mFbo()
-{
- mOpenGL = RENDER_MODERN_OPENGL;
- mName = "modern OpenGL";
-}
-
-ModernOpenGLGraphics::~ModernOpenGLGraphics()
-{
- deleteArraysInternal();
- deleteGLObjects();
-}
-
-void ModernOpenGLGraphics::deleteGLObjects() restrict2
-{
- delete2(mProgram);
- if (mVbo != 0u)
- {
-// logger->log("delete buffer vbo: %u", mVbo);
- mglDeleteBuffers(1, &mVbo);
- }
- if (mEbo != 0u)
- {
-// logger->log("delete buffer ebo: %u", mEbo);
- mglDeleteBuffers(1, &mEbo);
- }
- if (mVao != 0u)
- mglDeleteVertexArrays(1, &mVao);
-}
-
-void ModernOpenGLGraphics::initArrays(const int vertCount) restrict2
-{
- mMaxVertices = vertCount;
- if (mMaxVertices < 500)
- mMaxVertices = 500;
- else if (mMaxVertices > 1024)
- mMaxVertices = 1024;
-
- // need alocate small size, after if limit reached reallocate to double size
- const size_t sz = mMaxVertices * 4 + 30;
- vertexBufSize = mMaxVertices;
- if (mIntArray == nullptr)
- mIntArray = new GLint[sz];
- if (mIntArrayCached == nullptr)
- mIntArrayCached = new GLint[sz];
-}
-
-void ModernOpenGLGraphics::postInit() restrict2
-{
- mglGenVertexArrays(1, &mVao);
- mglBindVertexArray(mVao);
- mglGenBuffers(1, &mVbo);
-// logger->log("gen vbo buffer: %u", mVbo);
- bindArrayBuffer(mVbo);
- mglGenBuffers(1, &mEbo);
-// logger->log("gen ebo buffer: %u", mEbo);
- bindElementBuffer(mEbo);
-
- logger->log("Compiling shaders");
- mProgram = shaders.getSimpleProgram();
- if (mProgram == nullptr)
- {
- graphicsManager.logError();
- logger->safeError("Shader creation error. See manaplus.log.");
- }
- mProgramId = mProgram->getProgramId();
- if (mProgramId == 0u)
- logger->error("Shaders compilation error.");
-
- logger->log("Shaders compilation done.");
- mglUseProgram(mProgramId);
-
- mPosAttrib = mglGetAttribLocation(mProgramId, "position");
- mglEnableVertexAttribArray(mPosAttrib);
- mglVertexAttribIFormat(mPosAttrib, 4, GL_INT, 0);
-
- mSimpleColorUniform = mglGetUniformLocation(mProgramId, "color");
- mScreenUniform = mglGetUniformLocation(mProgramId, "screen");
- mDrawTypeUniform = mglGetUniformLocation(mProgramId, "drawType");
- mTextureColorUniform = mglGetUniformLocation(mProgramId, "alpha");
-
- mglUniform1f(mTextureColorUniform, 1.0f);
-
- mglBindVertexBuffer(0, mVbo, 0, 4 * sizeof(GLint));
- mglVertexAttribBinding(mPosAttrib, 0);
-// mglVertexAttribIPointer(mPosAttrib, 4, GL_INT, 4 * sizeof(GLint), 0);
- mAttributesBinded = mVbo;
-
- mglUniform2f(mScreenUniform,
- static_cast<float>(mWidth) / 2.0f,
- static_cast<float>(mHeight) / 2.0f);
- mglUniform4f(mSimpleColorUniform,
- 0.0F,
- 0.0F,
- 0.0F,
- 0.0F);
-}
-
-void ModernOpenGLGraphics::screenResized() restrict2
-{
- deleteGLObjects();
- mVboBinded = 0U;
- mEboBinded = 0U;
- mAttributesBinded = 0U;
- mColor = Color(0, 0, 0, 0);
- postInit();
-}
-
-void ModernOpenGLGraphics::deleteArrays() restrict2
-{
- deleteArraysInternal();
-}
-
-void ModernOpenGLGraphics::deleteArraysInternal() restrict2
-{
- delete [] mIntArray;
- mIntArray = nullptr;
- delete [] mIntArrayCached;
- mIntArrayCached = nullptr;
-}
-
-bool ModernOpenGLGraphics::setVideoMode(const int w, const int h,
- const int scale,
- const int bpp,
- const bool fs,
- const bool hwaccel,
- const bool resize,
- const bool noFrame,
- const bool allowHighDPI) restrict2
-{
- setMainFlags(w, h,
- scale,
- bpp,
- fs,
- hwaccel,
- resize,
- noFrame,
- allowHighDPI);
-
- return setOpenGLMode();
-}
-
-void ModernOpenGLGraphics::setColor(const Color &restrict color) restrict2
-{
- mColorAlpha = (color.a != 255);
- if (mColor != color)
- {
- mColor = color;
- mglUniform4f(mSimpleColorUniform,
- static_cast<float>(color.r) / 255.0F,
- static_cast<float>(color.g) / 255.0F,
- static_cast<float>(color.b) / 255.0F,
- static_cast<float>(color.a) / 255.0F);
- }
-}
-
-void ModernOpenGLGraphics::setColorAlpha(const float alpha) restrict2
-{
- if (mAlphaCached != alpha)
- {
- mAlphaCached = alpha;
- mglUniform1f(mTextureColorUniform, alpha);
- }
-}
-
-void ModernOpenGLGraphics::drawQuad(const int srcX,
- const int srcY,
- const int dstX,
- const int dstY,
- const int width,
- const int height) restrict2
-{
- const int texX2 = srcX + width;
- const int texY2 = srcY + height;
- const int x2 = dstX + width;
- const int y2 = dstY + height;
-
- GLint vertices[] =
- {
- dstX, dstY, srcX, srcY,
- x2, dstY, texX2, srcY,
- dstX, y2, srcX, texY2,
- x2, y2, texX2, texY2
- };
-
-// logger->log("allocate: %d, %ld", mVboBinded, sizeof(vertices));
- mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
- vertices, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void ModernOpenGLGraphics::drawRescaledQuad(const int srcX, const int srcY,
- const int dstX, const int dstY,
- const int width, const int height,
- const int desiredWidth,
- const int desiredHeight) restrict2
-{
- const int texX2 = srcX + width;
- const int texY2 = srcY + height;
- const int x2 = dstX + desiredWidth;
- const int y2 = dstY + desiredHeight;
-
- GLint vertices[] =
- {
- dstX, dstY, srcX, srcY,
- x2, dstY, texX2, srcY,
- dstX, y2, srcX, texY2,
- x2, y2, texX2, texY2
- };
-
-// logger->log("allocate: %d, %ld", mVboBinded, sizeof(vertices));
- mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
- vertices, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void ModernOpenGLGraphics::drawImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void ModernOpenGLGraphics::drawImageInline(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- FUNC_BLOCK("Graphics::drawImage", 1)
- if (image == nullptr)
- return;
-
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture(GL_TEXTURE_2D, image->mGLImage);
- enableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- setColorAlpha(image->mAlpha);
-
- const ClipRect &clipArea = mClipStack.top();
- const SDL_Rect &imageRect = image->mBounds;
- drawQuad(imageRect.x, imageRect.y,
- dstX + clipArea.xOffset, dstY + clipArea.yOffset,
- imageRect.w, imageRect.h);
-}
-
-void ModernOpenGLGraphics::copyImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void ModernOpenGLGraphics::testDraw() restrict2
-{
-/*
- GLint vertices[] =
- {
- 0, 0, 0, 0,
- 800, 0, 800, 0,
- 0, 600, 0, 600,
- 800, 600, 800, 600
- };
-*/
-// logger->log("allocate: %d, %ld", mVboBinded, sizeof(vertices));
-// logger->log("allocate ebo: %d, %ld", mEboBinded, sizeof(elements));
-// mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
-// vertices, GL_STREAM_DRAW);
-// mglBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elements),
-// elements, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-// glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_INT, 0);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void ModernOpenGLGraphics::drawImageCached(const Image *restrict const image
- A_UNUSED,
- int A_UNUSED x,
- int y A_UNUSED) restrict2
-{
-}
-
-void ModernOpenGLGraphics::drawPatternCached(const Image *restrict const image
- A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED) restrict2
-{
-}
-
-void ModernOpenGLGraphics::completeCache() restrict2
-{
-}
-
-void ModernOpenGLGraphics::drawRescaledImage(const Image *restrict const image,
- int dstX, int dstY,
- const int desiredWidth,
- const int desiredHeight) restrict2
-{
- if (image == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
-
- // Just draw the image normally when no resizing is necessary,
- if (imageRect.w == desiredWidth && imageRect.h == desiredHeight)
- {
- drawImageInline(image, dstX, dstY);
- return;
- }
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
-
- const ClipRect &clipArea = mClipStack.top();
- // Draw a textured quad.
- drawRescaledQuad(imageRect.x, imageRect.y,
- dstX + clipArea.xOffset, dstY + clipArea.yOffset,
- imageRect.w, imageRect.h,
- desiredWidth, desiredHeight);
-}
-
-void ModernOpenGLGraphics::drawPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- drawPatternInline(image, x, y, w, h);
-}
-
-void ModernOpenGLGraphics::drawPatternInline(const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) restrict2
-{
- if (image == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
-
- if (iw == 0 || ih == 0)
- return;
-
- const ClipRect &clipArea = mClipStack.top();
- const int x2 = x + clipArea.xOffset;
- const int y2 = y + clipArea.yOffset;
-
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
-
- enableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- setColorAlpha(image->mAlpha);
-
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int texY2 = srcY + height;
- const int dstY = y2 + py;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x2 + px;
-
- const int texX2 = srcX + width;
-
- vertFill2D(mIntArray,
- srcX, srcY, texX2, texY2,
- dstX, dstY, width, height);
-
- vp += 24;
- if (vp >= vLimit)
- {
- drawTriangleArray(vp);
- vp = 0;
- }
- }
- }
- if (vp > 0)
- drawTriangleArray(vp);
-}
-
-void ModernOpenGLGraphics::drawRescaledPattern(const Image *
- restrict const image,
- const int x, const int y,
- const int w, const int h,
- const int scaledWidth,
- const int scaledHeight)
- restrict2
-{
- if (image == nullptr)
- return;
-
- if (scaledWidth == 0 || scaledHeight == 0)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
- if (iw == 0 || ih == 0)
- return;
-
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
-
- enableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- setColorAlpha(image->mAlpha);
-
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
-
- const ClipRect &clipArea = mClipStack.top();
- const int x2 = x + clipArea.xOffset;
- const int y2 = y + clipArea.yOffset;
-
- const float scaleFactorW = static_cast<float>(scaledWidth) / iw;
- const float scaleFactorH = static_cast<float>(scaledHeight) / ih;
-
- for (int py = 0; py < h; py += scaledHeight)
- {
- const int height = (py + scaledHeight >= h)
- ? h - py : scaledHeight;
- const int dstY = y2 + py;
- const int scaledY = srcY + height / scaleFactorH;
- for (int px = 0; px < w; px += scaledWidth)
- {
- const int width = (px + scaledWidth >= w)
- ? w - px : scaledWidth;
- const int dstX = x2 + px;
- const int scaledX = srcX + width / scaleFactorW;
-
- vertFill2D(mIntArray,
- srcX, srcY, scaledX, scaledY,
- dstX, dstY, width, height);
-
- vp += 24;
- if (vp >= vLimit)
- {
- drawTriangleArray(vp);
- vp = 0;
- }
- }
- }
- if (vp > 0)
- drawTriangleArray(vp);
-}
-
-inline void ModernOpenGLGraphics::drawVertexes(const
- OpenGLGraphicsVertexes &
- restrict ogl) restrict2
-{
- const STD_VECTOR<int> &vp = ogl.mVp;
- const STD_VECTOR<GLuint> &vbos = ogl.mVbo;
- STD_VECTOR<int>::const_iterator ivp;
- STD_VECTOR<GLuint>::const_iterator ivbo;
- const STD_VECTOR<int>::const_iterator ivp_end = vp.end();
-
-/*
- if (vp.size() != vbos.size())
- logger->log("different size in vp and vbos");
-*/
-
- for (ivp = vp.begin(), ivbo = vbos.begin();
- ivp != ivp_end;
- ++ ivp, ++ ivbo)
- {
- bindArrayBufferAndAttributes(*ivbo);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-// logger->log("draw from array: %u", *ivbo);
- mglDrawArrays(GL_TRIANGLES, 0, *ivp / 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
- }
-}
-
-void ModernOpenGLGraphics::calcPattern(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void ModernOpenGLGraphics::calcPatternInline(ImageVertexes *
- restrict const vert,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- if (image == nullptr || vert == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
-
- if (iw == 0 || ih == 0)
- return;
-
- const ClipRect &clipArea = mClipStack.top();
- const int x2 = x + clipArea.xOffset;
- const int y2 = y + clipArea.yOffset;
-
- const unsigned int vLimit = mMaxVertices * 4;
-
- OpenGLGraphicsVertexes &ogl = vert->ogl;
- unsigned int vp = ogl.continueVp();
-
- GLint *intArray = ogl.continueIntTexArray();
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y2 + py;
- const int texY2 = srcY + height;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x2 + px;
- const int texX2 = srcX + width;
-
- vertFill2D(intArray,
- srcX, srcY, texX2, texY2,
- dstX, dstY, width, height);
-
- vp += 24;
- if (vp >= vLimit)
- {
- intArray = ogl.switchIntTexArray();
- ogl.switchVp(vp);
- vp = 0;
- }
- }
- }
- ogl.switchVp(vp);
-}
-
-void ModernOpenGLGraphics::calcTileCollection(ImageCollection *
- restrict const vertCol,
- const Image *
- restrict const image,
- int x, int y) restrict2
-{
- if (vertCol == nullptr || image == nullptr)
- return;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- ImageVertexes *const vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- calcTileVertexesInline(vert, image, x, y);
- }
- else
- {
- calcTileVertexesInline(vertCol->currentVert, image, x, y);
- }
-}
-
-void ModernOpenGLGraphics::drawTileCollection(const ImageCollection
- *restrict const vertCol)
- restrict2
-{
- enableTexturingAndBlending();
-/*
- if (!vertCol)
- {
- logger->log("ModernOpenGLGraphics::drawTileCollection"
- " vertCol is nullptr");
- }
-*/
- const ImageVertexesVector &draws = vertCol->draws;
- const ImageCollectionCIter it_end = draws.end();
- for (ImageCollectionCIter it = draws.begin(); it != it_end; ++ it)
- {
- const ImageVertexes *const vert = *it;
- const Image *const image = vert->image;
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- drawVertexes(vert->ogl);
- }
-}
-
-void ModernOpenGLGraphics::calcPattern(ImageCollection *restrict const vertCol,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- if (vertCol == nullptr || image == nullptr)
- return;
- ImageVertexes *vert = nullptr;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
-
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void ModernOpenGLGraphics::calcTileVertexes(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- int dstX, int dstY) const restrict2
-{
- calcTileVertexesInline(vert, image, dstX, dstY);
-}
-
-void ModernOpenGLGraphics::calcTileVertexesInline(ImageVertexes *
- restrict const vert,
- const Image *
- restrict const image,
- int dstX,
- int dstY) const restrict2
-{
- const SDL_Rect &imageRect = image->mBounds;
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const int w = imageRect.w;
- const int h = imageRect.h;
-
- if (w == 0 || h == 0)
- return;
-
- const ClipRect &clipArea = mClipStack.top();
- const int x2 = dstX + clipArea.xOffset;
- const int y2 = dstY + clipArea.yOffset;
-
- const unsigned int vLimit = mMaxVertices * 4;
-
- OpenGLGraphicsVertexes &ogl = vert->ogl;
-
- unsigned int vp = ogl.continueVp();
-
- int texX2 = srcX + w;
- int texY2 = srcY + h;
-
- GLint *const intArray = ogl.continueIntTexArray();
-
- vertFill2D(intArray,
- srcX, srcY, texX2, texY2,
- x2, y2, w, h);
-
- vp += 24;
- if (vp >= vLimit)
- {
- ogl.switchIntTexArray();
- ogl.switchVp(vp);
- vp = 0;
- }
-
- ogl.switchVp(vp);
-}
-
-void ModernOpenGLGraphics::drawTileVertexes(const ImageVertexes *
- restrict const vert) restrict2
-{
- if (vert == nullptr)
- return;
- const Image *const image = vert->image;
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
-
- drawVertexes(vert->ogl);
-}
-
-void ModernOpenGLGraphics::calcWindow(ImageCollection *restrict const vertCol,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- ImageVertexes *vert = nullptr;
- const Image *const image = imgRect.grid[4];
- if (image == nullptr)
- return;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
- calcImageRect(vert, x, y, w, h, imgRect);
-}
-
-void ModernOpenGLGraphics::updateScreen() restrict2
-{
- BLOCK_START("Graphics::updateScreen")
-#ifdef DEBUG_DRAW_CALLS
- mLastDrawCalls = mDrawCalls;
- mDrawCalls = 0;
-#endif // DEBUG_DRAW_CALLS
-#ifdef USE_SDL2
- SDL_GL_SwapWindow(mWindow);
-#else // USE_SDL2
- SDL_GL_SwapBuffers();
-#endif // USE_SDL2
-#ifdef DEBUG_OPENGL
- if (isGLNotNull(mglFrameTerminator))
- mglFrameTerminator();
-#endif // DEBUG_OPENGL
- BLOCK_END("Graphics::updateScreen")
-}
-
-void ModernOpenGLGraphics::beginDraw() restrict2
-{
- setOpenGLFlags();
- mglDisable(GL_VERTEX_PROGRAM_POINT_SIZE_ARB);
- mglHint(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB, GL_FASTEST);
- pushClipArea(Rect(0, 0, mRect.w, mRect.h));
-}
-
-void ModernOpenGLGraphics::endDraw() restrict2
-{
- popClipArea();
-}
-
-void ModernOpenGLGraphics::pushClipArea(const Rect &restrict area) restrict2
-{
- Graphics::pushClipArea(area);
- const ClipRect &clipArea = mClipStack.top();
-
- mglScissor(clipArea.x * mScale,
- (mRect.h - clipArea.y - clipArea.height) * mScale,
- clipArea.width * mScale,
- clipArea.height * mScale);
-}
-
-void ModernOpenGLGraphics::popClipArea() restrict2
-{
- if (mClipStack.empty())
- return;
- Graphics::popClipArea();
- if (mClipStack.empty())
- return;
-
- const ClipRect &clipArea = mClipStack.top();
- mglScissor(clipArea.x * mScale,
- (mRect.h - clipArea.y - clipArea.height) * mScale,
- clipArea.width * mScale,
- clipArea.height * mScale);
-}
-
-void ModernOpenGLGraphics::drawPoint(int x, int y) restrict2
-{
- disableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- const ClipRect &clipArea = mClipStack.top();
- GLint vertices[] =
- {
- x + clipArea.xOffset, y + clipArea.yOffset, 0, 0
- };
-// logger->log("allocate: %d, %ld", mVboBinded, sizeof(vertices));
- mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
- vertices, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_POINTS, 0, 1);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void ModernOpenGLGraphics::drawLine(int x1, int y1,
- int x2, int y2) restrict2
-{
- disableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- const ClipRect &clipArea = mClipStack.top();
- GLint vertices[] =
- {
- x1 + clipArea.xOffset, y1 + clipArea.yOffset, 0, 0,
- x2 + clipArea.xOffset, y2 + clipArea.yOffset, 0, 0
- };
-// logger->log("allocate: %d, %ld", mVboBinded, sizeof(vertices));
- mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
- vertices, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_LINES, 0, 2);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void ModernOpenGLGraphics::drawRectangle(const Rect &restrict rect) restrict2
-{
- disableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- const ClipRect &clipArea = mClipStack.top();
- const int x1 = rect.x + clipArea.xOffset;
- const int y1 = rect.y + clipArea.yOffset;
- const int x2 = x1 + rect.width;
- const int y2 = y1 + rect.height;
- GLint vertices[] =
- {
- x1, y1, 0, 0,
- x1, y2, 0, 0,
- x2, y2, 0, 0,
- x2, y1, 0, 0
- };
-
-// logger->log("allocate: %d, %ld", mVboBinded, sizeof(vertices));
- mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
- vertices, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_LINE_LOOP, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void ModernOpenGLGraphics::fillRectangle(const Rect &restrict rect) restrict2
-{
- disableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- const ClipRect &clipArea = mClipStack.top();
- const int x1 = rect.x + clipArea.xOffset;
- const int y1 = rect.y + clipArea.yOffset;
- const int x2 = x1 + rect.width;
- const int y2 = y1 + rect.height;
- GLint vertices[] =
- {
- x1, y1, 0, 0,
- x2, y1, 0, 0,
- x1, y2, 0, 0,
- x2, y2, 0, 0
- };
-
-// logger->log("allocate: %d, %ld", mVboBinded, sizeof(vertices));
- mglBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
- vertices, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void ModernOpenGLGraphics::enableTexturingAndBlending() restrict2
-{
- if (!mTextureDraw)
- {
- mTextureDraw = true;
- mglUniform1f(mDrawTypeUniform, 1.0f);
- }
- if (!mAlpha)
- {
- mglEnable(GL_BLEND);
- mAlpha = true;
- }
-}
-
-void ModernOpenGLGraphics::disableTexturingAndBlending() restrict2
-{
- if (mTextureDraw)
- {
- mTextureDraw = false;
- mglUniform1f(mDrawTypeUniform, 0.0f);
- }
- if (mAlpha && !mColorAlpha)
- {
- mglDisable(GL_BLEND);
- mAlpha = false;
- }
- else if (!mAlpha && mColorAlpha)
- {
- mglEnable(GL_BLEND);
- mAlpha = true;
- }
-}
-
-void ModernOpenGLGraphics::drawRectangle(const Rect &restrict rect A_UNUSED,
- const bool filled A_UNUSED) restrict2
-{
-}
-
-void ModernOpenGLGraphics::drawNet(const int x1, const int y1,
- const int x2, const int y2,
- const int width, const int height) restrict2
-{
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
-
- disableTexturingAndBlending();
- bindArrayBufferAndAttributes(mVbo);
- const ClipRect &clipArea = mClipStack.top();
- const GLint dx = clipArea.xOffset;
- const GLint dy = clipArea.yOffset;
-
- const GLint xs1 = x1 + dx;
- const GLint xs2 = x2 + dx;
- const GLint ys1 = y1 + dy;
- const GLint ys2 = y2 + dy;
-
- for (int y = y1; y < y2; y += height)
- {
- mIntArray[vp + 0] = xs1;
- mIntArray[vp + 1] = y;
- mIntArray[vp + 2] = 0;
- mIntArray[vp + 3] = 0;
-
- mIntArray[vp + 4] = xs2;
- mIntArray[vp + 5] = y;
- mIntArray[vp + 6] = 0;
- mIntArray[vp + 7] = 0;
-
- vp += 8;
- if (vp >= vLimit)
- {
- drawLineArrays(vp);
- vp = 0;
- }
- }
-
- for (int x = x1; x < x2; x += width)
- {
- mIntArray[vp + 0] = x;
- mIntArray[vp + 1] = ys1;
- mIntArray[vp + 2] = 0.0f;
- mIntArray[vp + 3] = 0.0f;
-
- mIntArray[vp + 4] = x;
- mIntArray[vp + 5] = ys2;
- mIntArray[vp + 6] = 0.0f;
- mIntArray[vp + 7] = 0.0f;
-
- vp += 8;
- if (vp >= vLimit)
- {
- drawLineArrays(vp);
- vp = 0;
- }
- }
-
- if (vp > 0)
- drawLineArrays(vp);
-}
-
-void ModernOpenGLGraphics::bindTexture(const GLenum target,
- const GLuint texture)
-{
- if (mTextureBinded != texture)
- {
- mTextureBinded = texture;
- mglBindTexture(target, texture);
- }
-}
-
-void ModernOpenGLGraphics::removeArray(const uint32_t sz,
- uint32_t *restrict const arr) restrict2
-{
- mglDeleteBuffers(sz, arr);
- for (size_t f = 0; f < sz; f ++)
- {
- if (arr[f] == mVboBinded)
- mVboBinded = 0;
-// logger->log("delete buffers: %u", arr[f]);
- }
-}
-
-void ModernOpenGLGraphics::bindArrayBuffer(const GLuint vbo) restrict2
-{
- if (mVboBinded != vbo)
- {
- mVboBinded = vbo;
-// logger->log("bind array: %u", vbo);
- mglBindBuffer(GL_ARRAY_BUFFER, vbo);
-/*
- if (mglIsBuffer(vbo) != GL_TRUE)
- logger->log("bind wrong buffer: %u", vbo);
-*/
- mAttributesBinded = 0U;
- }
-}
-
-void ModernOpenGLGraphics::bindElementBuffer(const GLuint ebo) restrict2
-{
- if (mEboBinded != ebo)
- {
- mEboBinded = ebo;
- logger->log("bind element: %u", ebo);
- mglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
-/*
- if (mglIsBuffer(ebo) != GL_TRUE)
- logger->log("bind wrong buffer: %u", vbo);
-*/
- }
-}
-
-void ModernOpenGLGraphics::bindArrayBufferAndAttributes(const GLuint vbo)
- restrict2
-{
- if (mVboBinded != vbo)
- {
- mVboBinded = vbo;
-// logger->log("bind array: %u", vbo);
- mglBindBuffer(GL_ARRAY_BUFFER, vbo);
-/*
- if (mglIsBuffer(vbo) != GL_TRUE)
- logger->log("bind wrong buffer: %u", vbo);
-*/
-
- mAttributesBinded = mVboBinded;
-// logger->log("bind vertex buffer: %u", mVboBinded);
- mglBindVertexBuffer(0, mVboBinded, 0, 4 * sizeof(GLint));
-// mglVertexAttribIPointer(mPosAttrib, 4, GL_INT, 4 * sizeof(GLint), 0);
-// mglVertexAttribBinding(mPosAttrib, 0);
- }
- else if (mAttributesBinded != mVboBinded)
- {
- mAttributesBinded = mVboBinded;
-// logger->log("bind vertex buffer: %u", mVboBinded);
- mglBindVertexBuffer(0, mVboBinded, 0, 4 * sizeof(GLint));
-// mglVertexAttribIPointer(mPosAttrib, 4, GL_INT, 4 * sizeof(GLint), 0);
-// mglVertexAttribBinding(mPosAttrib, 0);
- }
-}
-
-void ModernOpenGLGraphics::bindAttributes() restrict2
-{
- if (mAttributesBinded != mVboBinded)
- {
- mAttributesBinded = mVboBinded;
- mglBindVertexBuffer(0, mVboBinded, 0, 4 * sizeof(GLint));
-// mglVertexAttribIPointer(mPosAttrib, 4, GL_INT, 4 * sizeof(GLint), 0);
-// mglVertexAttribBinding(mPosAttrib, 0);
- }
-}
-
-void ModernOpenGLGraphics::dumpSettings()
-{
- GLint test[1000];
- logger->log("\n\n");
- logger->log("start opengl dump");
- for (int f = 0; f < 65535; f ++)
- {
- test[0] = 0;
- test[1] = 0;
- test[2] = 0;
- test[3] = 0;
- mglGetIntegerv(f, &test[0]);
- if (test[0] != 0 || test[1] != 0 || test[2] != 0 || test[3] != 0)
- {
- logger->log("\n%d = %d, %d, %d, %d", f,
- test[0], test[1], test[2], test[3]);
- }
- }
-}
-
-void ModernOpenGLGraphics::drawImageRect(const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- #include "render/graphics_drawImageRect.hpp"
-}
-
-void ModernOpenGLGraphics::calcImageRect(ImageVertexes *restrict const vert,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- #include "render/graphics_calcImageRect.hpp"
-}
-
-void ModernOpenGLGraphics::clearScreen() const restrict2
-{
- mglClear(GL_COLOR_BUFFER_BIT |
- GL_DEPTH_BUFFER_BIT |
- GL_STENCIL_BUFFER_BIT);
-}
-
-void ModernOpenGLGraphics::createGLContext(const bool custom) restrict2
-{
- if (custom)
- {
- if (mGLContext != nullptr)
- SDL::makeCurrentContext(mGLContext);
- else
- mGLContext = SDL::createGLContext(mWindow, 3, 3, 0x01);
- }
- else
- {
- Graphics::createGLContext(false);
- }
-}
-
-void ModernOpenGLGraphics::finalize(ImageCollection *restrict const col)
- restrict2
-{
- if (col == nullptr)
- return;
- FOR_EACH (ImageCollectionIter, it, col->draws)
- finalize(*it);
-}
-
-void ModernOpenGLGraphics::finalize(ImageVertexes *restrict const vert)
- restrict2
-{
- // in future need convert in each switchVp/continueVp
-
- if (vert == nullptr)
- return;
- OpenGLGraphicsVertexes &ogl = vert->ogl;
- const STD_VECTOR<int> &vp = ogl.mVp;
- STD_VECTOR<int>::const_iterator ivp;
- const STD_VECTOR<int>::const_iterator ivp_end = vp.end();
- STD_VECTOR<GLint*> &intTexPool = ogl.mIntTexPool;
- STD_VECTOR<GLint*>::const_iterator ft;
- const STD_VECTOR<GLint*>::const_iterator ft_end = intTexPool.end();
- STD_VECTOR<GLuint> &vbos = ogl.mVbo;
- STD_VECTOR<GLuint>::const_iterator ivbo;
-
- const int sz = CAST_S32(intTexPool.size());
- vbos.resize(sz);
- mglGenBuffers(sz, &vbos[0]);
-/*
- for (int f = 0; f < sz; f ++)
- logger->log("gen buffers: %u", vbos[f]);
-*/
-
- for (ft = intTexPool.begin(), ivp = vp.begin(), ivbo = vbos.begin();
- ft != ft_end && ivp != ivp_end;
- ++ ft, ++ ivp, ++ ivbo)
- {
- bindArrayBuffer(*ivbo);
-/*
- logger->log("allocate: %d, %ld", mVboBinded,
- (*ivp) * sizeof(GLint));
-*/
- mglBufferData(GL_ARRAY_BUFFER, (*ivp) * sizeof(GLint),
- *ft, GL_STATIC_DRAW);
- }
-
- for (STD_VECTOR<GLint*>::iterator it = intTexPool.begin();
- it != intTexPool.end(); ++ it)
- {
- delete [] (*it);
- }
- intTexPool.clear();
-}
-
-void ModernOpenGLGraphics::drawTriangleArray(const int size) restrict2
-{
-// logger->log("allocate: %d, %ld", mVboBinded, size * sizeof(GLint));
- mglBufferData(GL_ARRAY_BUFFER, size * sizeof(GLint),
- mIntArray, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLES, 0, size / 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void ModernOpenGLGraphics::drawTriangleArray(const GLint *restrict const array,
- const int size) restrict2
-{
-// logger->log("allocate: %d, %ld", mVboBinded, size * sizeof(GLint));
- mglBufferData(GL_ARRAY_BUFFER, size * sizeof(GLint),
- array, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_TRIANGLES, 0, size / 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void ModernOpenGLGraphics::drawLineArrays(const int size)
-{
-// logger->log("allocate: %d, %ld", mVboBinded, size * sizeof(GLint));
- mglBufferData(GL_ARRAY_BUFFER, size * sizeof(GLint),
- mIntArray, GL_STREAM_DRAW);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- mglDrawArrays(GL_LINES, 0, size / 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-#ifdef DEBUG_BIND_TEXTURE
-void ModernOpenGLGraphics::debugBindTexture(const Image *restrict const image)
- restrict2
-{
- const std::string texture = image->mIdPath;
- if (mOldTexture != texture)
- {
- if ((!mOldTexture.empty() || !texture.empty())
- && mOldTextureId != image->mGLImage)
- {
- logger->log("bind: %s (%d) to %s (%d)", mOldTexture.c_str(),
- mOldTextureId, texture.c_str(), image->mGLImage);
- }
- mOldTextureId = image->mGLImage;
- mOldTexture = texture;
- }
-}
-#else // DEBUG_BIND_TEXTURE
-void ModernOpenGLGraphics::debugBindTexture(const Image *restrict const
- image A_UNUSED) restrict2
-{
-}
-#endif // DEBUG_BIND_TEXTURE
-
-#endif // defined(USE_OPENGL) && !defined(ANDROID) &&
- // !defined(__native_client__)
diff --git a/src/render/modernopenglgraphics.h b/src/render/modernopenglgraphics.h
deleted file mode 100644
index f20acab1b..000000000
--- a/src/render/modernopenglgraphics.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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 RENDER_MODERNOPENGLGRAPHICS_H
-#define RENDER_MODERNOPENGLGRAPHICS_H
-
-#if defined(USE_OPENGL) && !defined(ANDROID) && !defined(__native_client__)
-
-#include "localconsts.h"
-
-#include "render/graphics.h"
-
-#include "resources/fboinfo.h"
-
-#ifdef ANDROID
-#include <GLES/gl.h>
-#include <GLES/glext.h>
-#include <GLES2/gl2.h>
-#else // ANDROID
-#ifndef USE_SDL2
-#define GL_GLEXT_PROTOTYPES 1
-#endif // USE_SDL2
-PRAGMA48(GCC diagnostic push)
-PRAGMA48(GCC diagnostic ignored "-Wshadow")
-#include <SDL_opengl.h>
-PRAGMA48(GCC diagnostic pop)
-#if defined(__APPLE__)
-#include <OpenGL/glext.h>
-#elif !defined(__native_client__)
-#include <GL/glext.h>
-#endif // defined(__APPLE__)
-#endif // ANDROID
-
-class OpenGLGraphicsVertexes;
-class ShaderProgram;
-
-class ModernOpenGLGraphics final : public Graphics
-{
- public:
- ModernOpenGLGraphics();
-
- A_DELETE_COPY(ModernOpenGLGraphics)
-
- ~ModernOpenGLGraphics();
-
- void postInit() restrict2 override final;
-
- void setColor(const Color &restrict color) restrict2 override final;
-
- void screenResized() restrict2 override final;
-
- void finalize(ImageCollection *restrict const col)
- restrict2 override final;
-
- void finalize(ImageVertexes *restrict const vert)
- restrict2 override final;
-
- void testDraw() restrict2 override final;
-
- void removeArray(const uint32_t id,
- uint32_t *restrict const arr)
- restrict2 override final A_NONNULL(3);
-
- void createGLContext(const bool custom) restrict2 override final;
-
- #include "render/graphicsdef.hpp"
- RENDER_GRAPHICSDEF_HPP
-
- #include "render/openglgraphicsdef.hpp"
- RENDER_OPENGLGRAPHICSDEF_HPP
-
- #include "render/openglgraphicsdefadvanced.hpp"
- RENDER_OPENGLGRAPHICSDEFADVANCED_HPP
-
- private:
- void deleteGLObjects() restrict2;
-
- inline void drawQuad(const int srcX,
- const int srcY,
- const int dstX,
- const int dstY,
- const int width,
- const int height) restrict2 A_INLINE;
-
- inline void drawRescaledQuad(const int srcX, const int srcY,
- const int dstX, const int dstY,
- const int width, const int height,
- const int desiredWidth,
- const int desiredHeight)
- restrict2 A_INLINE;
-
- inline void drawTriangleArray(const int size) restrict2 A_INLINE;
-
- inline void drawTriangleArray(const GLint *restrict const array,
- const int size) restrict2 A_INLINE;
-
- inline void drawLineArrays(const int size) restrict2 A_INLINE;
-
- inline void bindArrayBuffer(const GLuint vbo) restrict2 A_INLINE;
-
- inline void bindArrayBufferAndAttributes(const GLuint vbo)
- restrict2 A_INLINE;
-
- inline void bindAttributes() restrict2 A_INLINE;
-
- inline void bindElementBuffer(const GLuint ebo) restrict2 A_INLINE;
-
- GLint *mIntArray A_NONNULLPOINTER;
- GLint *mIntArrayCached A_NONNULLPOINTER;
- ShaderProgram *mProgram;
- float mAlphaCached;
- int mVpCached;
-
- float mFloatColor;
- int mMaxVertices;
- GLuint mProgramId;
- GLuint mSimpleColorUniform;
- GLint mPosAttrib;
- GLint mTextureColorUniform;
- GLuint mScreenUniform;
- GLuint mDrawTypeUniform;
- GLuint mVao;
- GLuint mVbo;
- GLuint mEbo;
- GLuint mVboBinded;
- GLuint mEboBinded;
- GLuint mAttributesBinded;
- bool mColorAlpha;
- bool mTextureDraw;
-#ifdef DEBUG_BIND_TEXTURE
- std::string mOldTexture;
- unsigned mOldTextureId;
-#endif // DEBUG_BIND_TEXTURE
-
- FBOInfo mFbo;
-};
-#endif // defined(USE_OPENGL) && !defined(ANDROID) &&
- // !defined(__native_client__)
-
-#endif // RENDER_MODERNOPENGLGRAPHICS_H
diff --git a/src/render/nacl/naclfunctions.h b/src/render/nacl/naclfunctions.h
deleted file mode 100644
index c7b24f10d..000000000
--- a/src/render/nacl/naclfunctions.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2015-2017 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 RENDER_NACL_NACLFUNCTIONS_H
-#define RENDER_NACL_NACLFUNCTIONS_H
-
-#if defined(__native_client__) && defined(USE_OPENGL)
-
-#include <ppapi/c/ppb_graphics_3d.h>
-
-extern const struct PPB_Graphics3D_1_0 *graphics3dInterface;
-extern PP_Resource gles2Context;
-
-#define naclResizeBuffers(...) \
- graphics3dInterface->ResizeBuffers(gles2Context, __VA_ARGS__)
-
-#endif // defined(__native_client__) && defined(USE_OPENGL)
-#endif // RENDER_NACL_NACLFUNCTIONS_H
diff --git a/src/render/nacl/naclgles.cpp b/src/render/nacl/naclgles.cpp
deleted file mode 100644
index 98e863594..000000000
--- a/src/render/nacl/naclgles.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2015-2017 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/>.
- */
-
-#if defined(__native_client__) && defined(USE_OPENGL)
-
-#include "render/nacl/naclgles.h"
-
-#include "logger.h"
-
-#include "render/opengl/mglfunctions.h"
-
-#include <ppapi_simple/ps.h>
-
-#include <ppapi/c/ppb_graphics_3d.h>
-#include <ppapi/c/ppb_opengles2.h>
-
-#include <ppapi/gles2/gl2ext_ppapi.h>
-
-#include "debug.h"
-
-const struct PPB_OpenGLES2* gles2Interface = nullptr;
-PP_Resource gles2Context = 0;
-const struct PPB_Graphics3D_1_0 *graphics3dInterface = nullptr;
-
-void NaclGles::initGles()
-{
- gles2Interface = static_cast<const PPB_OpenGLES2*>(
- PSGetInterface(PPB_OPENGLES2_INTERFACE));
- graphics3dInterface = static_cast<const PPB_Graphics3D_1_0*>(
- PSGetInterface(PPB_GRAPHICS_3D_INTERFACE_1_0));
- gles2Context = glGetCurrentContextPPAPI();
-
- logger->log("InitGles: %p, %d",
- reinterpret_cast<const void*>(gles2Interface),
- gles2Context);
-}
-
-#endif // defined(__native_client__) && defined(USE_OPENGL)
diff --git a/src/render/nacl/naclgles.h b/src/render/nacl/naclgles.h
deleted file mode 100644
index 6d7683190..000000000
--- a/src/render/nacl/naclgles.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2014-2017 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 RENDER_NACL_NACLGLES_H
-#define RENDER_NACL_NACLGLES_H
-
-#if defined(__native_client__) && defined(USE_OPENGL)
-
-namespace NaclGles
-{
- void initGles();
-} // namespace NaclGles
-
-#endif // defined(__native_client__) && defined(USE_OPENGL)
-#endif // RENDER_NACL_NACLGLES_H
diff --git a/src/render/normalopenglgraphics.cpp b/src/render/normalopenglgraphics.cpp
deleted file mode 100644
index 96aca6f15..000000000
--- a/src/render/normalopenglgraphics.cpp
+++ /dev/null
@@ -1,1782 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-#if defined(USE_OPENGL) && !defined(ANDROID) && !defined(__native_client__)
-
-#include "render/normalopenglgraphics.h"
-
-#ifdef OPENGLERRORS
-#include "graphicsmanager.h"
-#endif // OPENGLERRORS
-
-#ifdef DEBUG_OPENGL
-#include "render/opengl/mgl.h"
-#endif // DEBUG_OPENGL
-
-#include "render/vertexes/imagecollection.h"
-
-#include "resources/imagerect.h"
-#include "resources/openglimagehelper.h"
-
-#include "resources/image/image.h"
-
-#include "utils/sdlcheckutils.h"
-
-#include "debug.h"
-
-#define vertFill2D(tVar, vVar, x1, y1, x2, y2, dstX, dstY, w, h) \
- tVar[vp + 0] = x1; \
- tVar[vp + 1] = y1; \
- tVar[vp + 2] = x2; \
- tVar[vp + 3] = y1; \
- tVar[vp + 4] = x2; \
- tVar[vp + 5] = y2; \
- tVar[vp + 6] = x1; \
- tVar[vp + 7] = y2; \
- vVar[vp + 0] = dstX; \
- vVar[vp + 1] = dstY; \
- vVar[vp + 2] = dstX + w; \
- vVar[vp + 3] = dstY; \
- vVar[vp + 4] = dstX + w; \
- vVar[vp + 5] = dstY + h; \
- vVar[vp + 6] = dstX; \
- vVar[vp + 7] = dstY + h;
-
-
-#define vertFillNv(tVar, vVar, srcX, srcY, dstX, dstY, w, h) \
- tVar[vp + 0] = srcX; \
- tVar[vp + 1] = srcY; \
- tVar[vp + 2] = srcX + w; \
- tVar[vp + 3] = srcY; \
- tVar[vp + 4] = srcX + w; \
- tVar[vp + 5] = srcY + h; \
- tVar[vp + 6] = srcX; \
- tVar[vp + 7] = srcY + h; \
- vVar[vp + 0] = dstX; \
- vVar[vp + 1] = dstY; \
- vVar[vp + 2] = dstX + w; \
- vVar[vp + 3] = dstY; \
- vVar[vp + 4] = dstX + w; \
- vVar[vp + 5] = dstY + h; \
- vVar[vp + 6] = dstX; \
- vVar[vp + 7] = dstY + h;
-
-namespace
-{
- const void *vertPtr = nullptr;
-} // namespace
-
-GLuint NormalOpenGLGraphics::mTextureBinded = 0;
-#ifdef DEBUG_DRAW_CALLS
-unsigned int NormalOpenGLGraphics::mDrawCalls = 0;
-unsigned int NormalOpenGLGraphics::mLastDrawCalls = 0;
-#endif // DEBUG_DRAW_CALLS
-#ifdef DEBUG_BIND_TEXTURE
-unsigned int NormalOpenGLGraphics::mBinds = 0;
-unsigned int NormalOpenGLGraphics::mLastBinds = 0;
-#endif // DEBUG_BIND_TEXTURE
-
-NormalOpenGLGraphics::NormalOpenGLGraphics() :
- mFloatTexArray(nullptr),
- mIntTexArray(nullptr),
- mIntVertArray(nullptr),
- mFloatTexArrayCached(nullptr),
- mIntTexArrayCached(nullptr),
- mIntVertArrayCached(nullptr),
- mAlphaCached(1.0F),
- mVpCached(0),
- mTexture(false),
- mIsByteColor(false),
- mByteColor(),
- mImageCached(0),
- mFloatColor(1.0F),
- mMaxVertices(500),
- mColorAlpha(false),
-#ifdef DEBUG_BIND_TEXTURE
- mOldTexture(),
- mOldTextureId(0),
-#endif // DEBUG_BIND_TEXTURE
- mFbo()
-{
- mOpenGL = RENDER_NORMAL_OPENGL;
- mName = "normal OpenGL";
-}
-
-NormalOpenGLGraphics::~NormalOpenGLGraphics()
-{
- deleteArraysInternal();
-}
-
-void NormalOpenGLGraphics::initArrays(const int vertCount) restrict2
-{
- mMaxVertices = vertCount;
- if (mMaxVertices < 500)
- mMaxVertices = 500;
- else if (mMaxVertices > 1024)
- mMaxVertices = 1024;
-
- // need alocate small size, after if limit reached reallocate to double size
- vertexBufSize = mMaxVertices;
- const size_t sz = mMaxVertices * 4 + 30;
- if (mFloatTexArray == nullptr)
- mFloatTexArray = new GLfloat[sz];
- if (mIntTexArray == nullptr)
- mIntTexArray = new GLint[sz];
- if (mIntVertArray == nullptr)
- mIntVertArray = new GLint[sz];
- if (mFloatTexArrayCached == nullptr)
- mFloatTexArrayCached = new GLfloat[sz];
- if (mIntTexArrayCached == nullptr)
- mIntTexArrayCached = new GLint[sz];
- if (mIntVertArrayCached == nullptr)
- mIntVertArrayCached = new GLint[sz];
-}
-
-void NormalOpenGLGraphics::deleteArrays() restrict2
-{
- deleteArraysInternal();
-}
-
-void NormalOpenGLGraphics::deleteArraysInternal() restrict2
-{
- delete [] mFloatTexArray;
- mFloatTexArray = nullptr;
- delete [] mIntTexArray;
- mIntTexArray = nullptr;
- delete [] mIntVertArray;
- mIntVertArray = nullptr;
- delete [] mFloatTexArrayCached;
- mFloatTexArrayCached = nullptr;
- delete [] mIntTexArrayCached;
- mIntTexArrayCached = nullptr;
- delete [] mIntVertArrayCached;
- mIntVertArrayCached = nullptr;
-}
-
-bool NormalOpenGLGraphics::setVideoMode(const int w, const int h,
- const int scale,
- const int bpp,
- const bool fs,
- const bool hwaccel,
- const bool resize,
- const bool noFrame,
- const bool allowHighDPI) restrict2
-{
- setMainFlags(w, h,
- scale,
- bpp,
- fs,
- hwaccel,
- resize,
- noFrame,
- allowHighDPI);
-
- return setOpenGLMode();
-}
-
-static inline void bindPointerIntFloat(const GLint *restrict const vert,
- const GLfloat *restrict const tex)
- A_INLINE;
-
-static inline void bindPointerIntFloat(const GLint *restrict const vert,
- const GLfloat *restrict const tex)
-{
- if (vertPtr != vert)
- {
- vertPtr = vert;
- glVertexPointer(2, GL_INT, 0, vert);
- glTexCoordPointer(2, GL_FLOAT, 0, tex);
- }
-}
-
-static inline void bindPointerInt(const GLint *restrict const vert,
- const GLint *restrict const tex) A_INLINE;
-
-static inline void bindPointerInt(const GLint *restrict const vert,
- const GLint *restrict const tex)
-{
- if (vertPtr != vert)
- {
- vertPtr = vert;
- glVertexPointer(2, GL_INT, 0, vert);
- glTexCoordPointer(2, GL_INT, 0, tex);
- }
-}
-
-static inline void drawQuad(const Image *restrict const image,
- const int srcX, const int srcY,
- const int dstX, const int dstY,
- const int width, const int height)
- A_NONNULL(1) A_INLINE;
-
-static inline void drawQuad(const Image *restrict const image,
- const int srcX, const int srcY,
- const int dstX, const int dstY,
- const int width, const int height)
-{
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
- // Find OpenGL normalized texture coordinates.
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
- const float texX2 = static_cast<float>(srcX + width) / tw;
- const float texY2 = static_cast<float>(srcY + height) / th;
-
- GLfloat tex[] =
- {
- texX1, texY1,
- texX2, texY1,
- texX2, texY2,
- texX1, texY2
- };
-
- GLint vert[] =
- {
- dstX, dstY,
- dstX + width, dstY,
- dstX + width, dstY + height,
- dstX, dstY + height
- };
-
- bindPointerIntFloat(&vert[0], &tex[0]);
-#ifdef DEBUG_DRAW_CALLS
- NormalOpenGLGraphics::mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(GL_QUADS, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
- }
- else
- {
- GLint tex[] =
- {
- srcX, srcY,
- srcX + width, srcY,
- srcX + width, srcY + height,
- srcX, srcY + height
- };
- GLint vert[] =
- {
- dstX, dstY,
- dstX + width, dstY,
- dstX + width, dstY + height,
- dstX, dstY + height
- };
-
- bindPointerInt(&vert[0], &tex[0]);
-#ifdef DEBUG_DRAW_CALLS
- NormalOpenGLGraphics::mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(GL_QUADS, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
- }
-}
-
-static inline void drawRescaledQuad(const Image *restrict const image,
- const int srcX, const int srcY,
- const int dstX, const int dstY,
- const int width, const int height,
- const int desiredWidth,
- const int desiredHeight)
- A_NONNULL(1) A_INLINE;
-
-static inline void drawRescaledQuad(const Image *restrict const image,
- const int srcX, const int srcY,
- const int dstX, const int dstY,
- const int width, const int height,
- const int desiredWidth,
- const int desiredHeight)
-{
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
- // Find OpenGL normalized texture coordinates.
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
- const float texX2 = static_cast<float>(srcX + width) / tw;
- const float texY2 = static_cast<float>(srcY + height) / th;
-
- GLfloat tex[] =
- {
- texX1, texY1,
- texX2, texY1,
- texX2, texY2,
- texX1, texY2
- };
-
- GLint vert[] =
- {
- dstX, dstY,
- dstX + desiredWidth, dstY,
- dstX + desiredWidth, dstY + desiredHeight,
- dstX, dstY + desiredHeight
- };
-
- bindPointerIntFloat(&vert[0], &tex[0]);
-#ifdef DEBUG_DRAW_CALLS
- NormalOpenGLGraphics::mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(GL_QUADS, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
- }
- else
- {
- GLint tex[] =
- {
- srcX, srcY,
- srcX + width, srcY,
- srcX + width, srcY + height,
- srcX, srcY + height
- };
- GLint vert[] =
- {
- dstX, dstY,
- dstX + desiredWidth, dstY,
- dstX + desiredWidth, dstY + desiredHeight,
- dstX, dstY + desiredHeight
- };
-
- bindPointerInt(&vert[0], &tex[0]);
-#ifdef DEBUG_DRAW_CALLS
- NormalOpenGLGraphics::mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(GL_QUADS, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
- }
-}
-
-void NormalOpenGLGraphics::drawImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void NormalOpenGLGraphics::drawImageInline(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- FUNC_BLOCK("Graphics::drawImage", 1)
- if (image == nullptr)
- return;
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
-
- const SDL_Rect &imageRect = image->mBounds;
- drawQuad(image, imageRect.x, imageRect.y,
- dstX, dstY, imageRect.w, imageRect.h);
-}
-
-void NormalOpenGLGraphics::copyImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void NormalOpenGLGraphics::testDraw() restrict2
-{
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- GLfloat tex[] =
- {
- 0.0f, 0.781250f,
- 0.0f, 0.781250f,
- 0.0f, 0.585938f,
- 0.0f, 0.585938f
- };
-
- GLint vert[] =
- {
- 0, 0,
- 800, 0,
- 800, 600,
- 0, 600
- };
-
- bindPointerIntFloat(&vert[0], &tex[0]);
-#ifdef DEBUG_DRAW_CALLS
- NormalOpenGLGraphics::mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(GL_QUADS, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
- }
- else
- {
- GLint tex[] =
- {
- 0, 0,
- 800, 0,
- 800, 600,
- 0, 600
- };
-
- GLint vert[] =
- {
- 0, 0,
- 800, 0,
- 800, 600,
- 0, 600
- };
-
- bindPointerInt(&vert[0], &tex[0]);
-#ifdef DEBUG_DRAW_CALLS
- NormalOpenGLGraphics::mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(GL_QUADS, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
- }
-}
-
-void NormalOpenGLGraphics::drawImageCached(const Image *restrict const image,
- int x, int y) restrict2
-{
- if (image == nullptr)
- return;
-
- if (image->mGLImage != mImageCached)
- {
- completeCache();
- mImageCached = image->mGLImage;
- mAlphaCached = image->mAlpha;
- }
-
- const SDL_Rect &imageRect = image->mBounds;
- const int w = imageRect.w;
- const int h = imageRect.h;
-
- if (w == 0 || h == 0)
- return;
-
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
-
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- const unsigned int vLimit = mMaxVertices * 4;
-
- unsigned int vp = mVpCached;
-
- // Draw a set of textured rectangles
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
-
- const float texX2 = static_cast<float>(srcX + w) / tw;
- const float texY2 = static_cast<float>(srcY + h) / th;
-
- vertFill2D(mFloatTexArrayCached, mIntVertArrayCached,
- texX1, texY1, texX2, texY2,
- x, y, w, h);
-
- vp += 8;
- if (vp >= vLimit)
- {
- completeCache();
- vp = 0;
- }
- else
- {
- mVpCached = vp;
- }
- }
- else
- {
- vertFillNv(mIntTexArrayCached, mIntVertArrayCached,
- srcX, srcY, x, y, w, h);
-
- vp += 8;
- if (vp >= vLimit)
- {
- completeCache();
- vp = 0;
- }
- else
- {
- mVpCached = vp;
- }
- }
-}
-
-void NormalOpenGLGraphics::drawPatternCached(const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) restrict2
-{
- FUNC_BLOCK("Graphics::drawPatternCached", 1)
- if (image == nullptr)
- return;
-
- if (image->mGLImage != mImageCached)
- {
- completeCache();
- mImageCached = image->mGLImage;
- }
-
- const SDL_Rect &imageRect = image->mBounds;
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
-
- if (iw == 0 || ih == 0)
- return;
-
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- unsigned int vp = mVpCached;
- const unsigned int vLimit = mMaxVertices * 4;
- // Draw a set of textured rectangles
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y + py;
- const float texY2 = static_cast<float>(srcY + height) / th;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x + px;
-
- const float texX2 = static_cast<float>(srcX + width) / tw;
-
- vertFill2D(mFloatTexArrayCached, mIntVertArrayCached,
- texX1, texY1, texX2, texY2,
- dstX, dstY, width, height);
-
- vp += 8;
- if (vp >= vLimit)
- {
- completeCache();
- vp = 0;
- }
- }
- }
- }
- else
- {
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y + py;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x + px;
-
- vertFillNv(mIntTexArrayCached, mIntVertArrayCached,
- srcX, srcY, dstX, dstY, width, height);
-
- vp += 8;
- if (vp >= vLimit)
- {
- completeCache();
- vp = 0;
- }
- }
- }
- }
- mVpCached = vp;
-}
-
-void NormalOpenGLGraphics::completeCache() restrict2
-{
- if (mImageCached == 0u)
- return;
-
- setColorAlpha(mAlphaCached);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, mImageCached);
- enableTexturingAndBlending();
-
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- drawQuadArrayfiCached(mVpCached);
- else
- drawQuadArrayiiCached(mVpCached);
-
- mImageCached = 0;
- mVpCached = 0;
-}
-
-void NormalOpenGLGraphics::drawRescaledImage(const Image *restrict const image,
- int dstX, int dstY,
- const int desiredWidth,
- const int desiredHeight) restrict2
-{
- FUNC_BLOCK("Graphics::drawRescaledImage", 1)
- if (image == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
-
- // Just draw the image normally when no resizing is necessary,
- if (imageRect.w == desiredWidth && imageRect.h == desiredHeight)
- {
- drawImageInline(image, dstX, dstY);
- return;
- }
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
-
- // Draw a textured quad.
- drawRescaledQuad(image, imageRect.x, imageRect.y, dstX, dstY,
- imageRect.w, imageRect.h, desiredWidth, desiredHeight);
-}
-
-void NormalOpenGLGraphics::drawPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- drawPatternInline(image, x, y, w, h);
-}
-
-void NormalOpenGLGraphics::drawPatternInline(const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) restrict2
-{
- FUNC_BLOCK("Graphics::drawPattern", 1)
- if (image == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
-
- if (iw == 0 || ih == 0)
- return;
-
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- setColorAlpha(image->mAlpha);
-
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
-
- enableTexturingAndBlending();
-
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
- // Draw a set of textured rectangles
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y + py;
- const float texY2 = static_cast<float>(srcY + height) / th;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x + px;
- const float texX2 = static_cast<float>(srcX + width) / tw;
-
- vertFill2D(mFloatTexArray, mIntVertArray,
- texX1, texY1, texX2, texY2,
- dstX, dstY, width, height);
-
- vp += 8;
- if (vp >= vLimit)
- {
- drawQuadArrayfi(vp);
- vp = 0;
- }
- }
- }
- if (vp > 0)
- drawQuadArrayfi(vp);
- }
- else
- {
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y + py;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x + px;
-
- vertFillNv(mIntTexArray, mIntVertArray,
- srcX, srcY, dstX, dstY, width, height);
-
- vp += 8;
- if (vp >= vLimit)
- {
- drawQuadArrayii(vp);
- vp = 0;
- }
- }
- }
- if (vp > 0)
- drawQuadArrayii(vp);
- }
-}
-
-void NormalOpenGLGraphics::drawRescaledPattern(const Image *
- restrict const image,
- const int x, const int y,
- const int w, const int h,
- const int scaledWidth,
- const int scaledHeight)
- restrict2
-{
- if (image == nullptr)
- return;
-
- if (scaledWidth == 0 || scaledHeight == 0)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
- if (iw == 0 || ih == 0)
- return;
-
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
-
- setColorAlpha(image->mAlpha);
-
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
-
- enableTexturingAndBlending();
-
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
-
- // Draw a set of textured rectangles
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
-
- const float tFractionW = iw / tw;
- const float tFractionH = ih / th;
-
- for (int py = 0; py < h; py += scaledHeight)
- {
- const int height = (py + scaledHeight >= h)
- ? h - py : scaledHeight;
- const int dstY = y + py;
- const float visibleFractionH = static_cast<float>(height)
- / scaledHeight;
- const float texY2 = texY1 + tFractionH * visibleFractionH;
- for (int px = 0; px < w; px += scaledWidth)
- {
- const int width = (px + scaledWidth >= w)
- ? w - px : scaledWidth;
- const int dstX = x + px;
- const float visibleFractionW = static_cast<float>(width)
- / scaledWidth;
- const float texX2 = texX1 + tFractionW * visibleFractionW;
-
- vertFill2D(mFloatTexArray, mIntVertArray,
- texX1, texY1, texX2, texY2,
- dstX, dstY, width, height);
-
- vp += 8;
- if (vp >= vLimit)
- {
- drawQuadArrayfi(vp);
- vp = 0;
- }
- }
- }
- if (vp > 0)
- drawQuadArrayfi(vp);
- }
- else
- {
- const float scaleFactorW = static_cast<float>(scaledWidth) / iw;
- const float scaleFactorH = static_cast<float>(scaledHeight) / ih;
-
- for (int py = 0; py < h; py += scaledHeight)
- {
- const int height = (py + scaledHeight >= h)
- ? h - py : scaledHeight;
- const int dstY = y + py;
- const int scaledY = srcY + height / scaleFactorH;
- for (int px = 0; px < w; px += scaledWidth)
- {
- const int width = (px + scaledWidth >= w)
- ? w - px : scaledWidth;
- const int dstX = x + px;
- const int scaledX = srcX + width / scaleFactorW;
-
- mIntTexArray[vp + 0] = srcX;
- mIntTexArray[vp + 1] = srcY;
-
- mIntTexArray[vp + 2] = scaledX;
- mIntTexArray[vp + 3] = srcY;
-
- mIntTexArray[vp + 4] = scaledX;
- mIntTexArray[vp + 5] = scaledY;
-
- mIntTexArray[vp + 6] = srcX;
- mIntTexArray[vp + 7] = scaledY;
-
- mIntVertArray[vp + 0] = dstX;
- mIntVertArray[vp + 1] = dstY;
-
- mIntVertArray[vp + 2] = dstX + width;
- mIntVertArray[vp + 3] = dstY;
-
- mIntVertArray[vp + 4] = dstX + width;
- mIntVertArray[vp + 5] = dstY + height;
-
- mIntVertArray[vp + 6] = dstX;
- mIntVertArray[vp + 7] = dstY + height;
-
- vp += 8;
- if (vp >= vLimit)
- {
- drawQuadArrayii(vp);
- vp = 0;
- }
- }
- }
- if (vp > 0)
- drawQuadArrayii(vp);
- }
-}
-
-inline void NormalOpenGLGraphics::drawVertexes(const
- OpenGLGraphicsVertexes
- &restrict ogl) restrict2
-{
- const STD_VECTOR<GLint*> &intVertPool = ogl.mIntVertPool;
- STD_VECTOR<GLint*>::const_iterator iv;
- const STD_VECTOR<GLint*>::const_iterator iv_end = intVertPool.end();
- const STD_VECTOR<int> &vp = ogl.mVp;
- STD_VECTOR<int>::const_iterator ivp;
- const STD_VECTOR<int>::const_iterator ivp_end = vp.end();
-
- // Draw a set of textured rectangles
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const STD_VECTOR<GLfloat*> &floatTexPool = ogl.mFloatTexPool;
- STD_VECTOR<GLfloat*>::const_iterator ft;
- const STD_VECTOR<GLfloat*>::const_iterator
- ft_end = floatTexPool.end();
-
- for (iv = intVertPool.begin(), ft = floatTexPool.begin(),
- ivp = vp.begin();
- iv != iv_end && ft != ft_end && ivp != ivp_end;
- ++ iv, ++ ft, ++ ivp)
- {
- drawQuadArrayfi(*iv, *ft, *ivp);
- }
- }
- else
- {
- const STD_VECTOR<GLint*> &intTexPool = ogl.mIntTexPool;
- STD_VECTOR<GLint*>::const_iterator it;
- const STD_VECTOR<GLint*>::const_iterator it_end = intTexPool.end();
-
- for (iv = intVertPool.begin(), it = intTexPool.begin(),
- ivp = vp.begin();
- iv != iv_end && it != it_end && ivp != ivp_end;
- ++ iv, ++ it, ++ ivp)
- {
- drawQuadArrayii(*iv, *it, *ivp);
- }
- }
-}
-
-void NormalOpenGLGraphics::calcPattern(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void NormalOpenGLGraphics::calcPatternInline(ImageVertexes *
- restrict const vert,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- if (image == nullptr || vert == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
-
- if (iw == 0 || ih == 0)
- return;
-
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- const unsigned int vLimit = mMaxVertices * 4;
-
- OpenGLGraphicsVertexes &ogl = vert->ogl;
- unsigned int vp = ogl.continueVp();
-
- // Draw a set of textured rectangles
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
-
- GLfloat *floatTexArray = ogl.continueFloatTexArray();
- GLint *intVertArray = ogl.continueIntVertArray();
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y + py;
- const float texY2 = static_cast<float>(srcY + height) / th;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x + px;
- const float texX2 = static_cast<float>(srcX + width) / tw;
-
- vertFill2D(floatTexArray, intVertArray,
- texX1, texY1, texX2, texY2,
- dstX, dstY, width, height);
-
- vp += 8;
- if (vp >= vLimit)
- {
- floatTexArray = ogl.switchFloatTexArray();
- intVertArray = ogl.switchIntVertArray();
- ogl.switchVp(vp);
- vp = 0;
- }
- }
- }
- }
- else
- {
- GLint *intTexArray = ogl.continueIntTexArray();
- GLint *intVertArray = ogl.continueIntVertArray();
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y + py;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x + px;
-
- vertFillNv(intTexArray, intVertArray,
- srcX, srcY, dstX, dstY, width, height);
-
- vp += 8;
- if (vp >= vLimit)
- {
- intTexArray = ogl.switchIntTexArray();
- intVertArray = ogl.switchIntVertArray();
- ogl.switchVp(vp);
- vp = 0;
- }
- }
- }
- }
- ogl.switchVp(vp);
-}
-
-void NormalOpenGLGraphics::calcTileCollection(ImageCollection *
- restrict const vertCol,
- const Image *
- restrict const image,
- int x, int y) restrict2
-{
- if (vertCol == nullptr || image == nullptr)
- return;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- ImageVertexes *const vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- calcTileVertexesInline(vert, image, x, y);
- }
- else
- {
- calcTileVertexesInline(vertCol->currentVert, image, x, y);
- }
-}
-
-void NormalOpenGLGraphics::drawTileCollection(const ImageCollection
- *restrict const vertCol)
- restrict2
-{
- const ImageVertexesVector &draws = vertCol->draws;
- const ImageCollectionCIter it_end = draws.end();
- for (ImageCollectionCIter it = draws.begin(); it != it_end; ++ it)
- {
- const ImageVertexes *const vert = *it;
- const Image *const image = vert->image;
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
- drawVertexes(vert->ogl);
- }
-}
-
-void NormalOpenGLGraphics::calcPattern(ImageCollection *restrict const vertCol,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- if (vertCol == nullptr || image == nullptr)
- return;
- ImageVertexes *vert = nullptr;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
-
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void NormalOpenGLGraphics::calcTileVertexes(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- int dstX, int dstY) const restrict2
-{
- calcTileVertexesInline(vert, image, dstX, dstY);
-}
-
-void NormalOpenGLGraphics::calcTileVertexesInline(ImageVertexes *
- restrict const vert,
- const Image *
- restrict const image,
- int dstX,
- int dstY) const restrict2
-{
- const SDL_Rect &imageRect = image->mBounds;
- const int w = imageRect.w;
- const int h = imageRect.h;
-
- if (w == 0 || h == 0)
- return;
-
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
-
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- const unsigned int vLimit = mMaxVertices * 4;
-
- OpenGLGraphicsVertexes &ogl = vert->ogl;
-
-// STD_VECTOR<int> *vps = ogl.getVp();
- unsigned int vp = ogl.continueVp();
-
- // Draw a set of textured rectangles
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
-
- const float texX2 = static_cast<float>(srcX + w) / tw;
- const float texY2 = static_cast<float>(srcY + h) / th;
-
- GLfloat *const floatTexArray = ogl.continueFloatTexArray();
- GLint *const intVertArray = ogl.continueIntVertArray();
-
- vertFill2D(floatTexArray, intVertArray,
- texX1, texY1, texX2, texY2,
- dstX, dstY, w, h);
-
- vp += 8;
- if (vp >= vLimit)
- {
- ogl.switchFloatTexArray();
- ogl.switchIntVertArray();
- ogl.switchVp(vp);
- vp = 0;
- }
- }
- else
- {
- GLint *const intTexArray = ogl.continueIntTexArray();
- GLint *const intVertArray = ogl.continueIntVertArray();
-
- vertFillNv(intTexArray, intVertArray,
- srcX, srcY, dstX, dstY, w, h);
-
- vp += 8;
- if (vp >= vLimit)
- {
- ogl.switchIntTexArray();
- ogl.switchIntVertArray();
- ogl.switchVp(vp);
- vp = 0;
- }
- }
- ogl.switchVp(vp);
-}
-
-void NormalOpenGLGraphics::drawTileVertexes(const ImageVertexes *
- restrict const vert) restrict2
-{
- if (vert == nullptr)
- return;
- const Image *const image = vert->image;
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
- drawVertexes(vert->ogl);
-}
-
-void NormalOpenGLGraphics::calcWindow(ImageCollection *restrict const vertCol,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- ImageVertexes *vert = nullptr;
- Image *const image = imgRect.grid[4];
- if (image == nullptr)
- return;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
- calcImageRect(vert, x, y, w, h, imgRect);
-}
-
-void NormalOpenGLGraphics::updateScreen() restrict2
-{
- BLOCK_START("Graphics::updateScreen")
-// glFlush();
-// glFinish();
-#ifdef DEBUG_DRAW_CALLS
- mLastDrawCalls = mDrawCalls;
- mDrawCalls = 0;
-#endif // DEBUG_DRAW_CALLS
-#ifdef DEBUG_BIND_TEXTURE
- mLastBinds = mBinds;
- mBinds = 0;
-#endif // DEBUG_BIND_TEXTURE
-#ifdef USE_SDL2
- SDL_GL_SwapWindow(mWindow);
-#else // USE_SDL2
- SDL_GL_SwapBuffers();
-#endif // USE_SDL2
-#ifdef DEBUG_OPENGL
- if (isGLNotNull(mglFrameTerminator))
- mglFrameTerminator();
-#endif // DEBUG_OPENGL
-
-// may be need clear?
-// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- BLOCK_END("Graphics::updateScreen")
-}
-
-void NormalOpenGLGraphics::beginDraw() restrict2
-{
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-
- const int w = mRect.w;
- const int h = mRect.h;
-
-#ifdef ANDROID
- glOrthof(0.0, static_cast<float>(w),
- static_cast<float>(h),
- 0.0, -1.0, 1.0);
-#else // ANDROID
-
- glOrtho(0.0, static_cast<double>(w),
- static_cast<double>(h),
- 0.0, -1.0, 1.0);
-#endif // ANDROID
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
- setOpenGLFlags();
- glDisable(GL_LIGHTING);
- glDisable(GL_FOG);
- glDisable(GL_COLOR_MATERIAL);
-
- glEnableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
-
- glShadeModel(GL_FLAT);
- glDepthMask(GL_FALSE);
-
- glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
-#ifndef ANDROID
- glHint(GL_LINE_SMOOTH_HINT, GL_FASTEST);
- glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
- glHint(GL_POINT_SMOOTH_HINT, GL_FASTEST);
- glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST);
-#endif // ANDROID
-
- pushClipArea(Rect(0, 0, w, h));
-}
-
-void NormalOpenGLGraphics::endDraw() restrict2
-{
- popClipArea();
-}
-
-void NormalOpenGLGraphics::pushClipArea(const Rect &restrict area) restrict2
-{
- int transX = 0;
- int transY = 0;
-
- if (!mClipStack.empty())
- {
- const ClipRect &clipArea = mClipStack.top();
- transX = -clipArea.xOffset;
- transY = -clipArea.yOffset;
- }
-
- Graphics::pushClipArea(area);
-
- const ClipRect &clipArea = mClipStack.top();
- transX += clipArea.xOffset;
- transY += clipArea.yOffset;
-
- if (transX != 0 || transY != 0)
- {
- glTranslatef(static_cast<GLfloat>(transX),
- static_cast<GLfloat>(transY), 0);
- }
- glScissor(clipArea.x * mScale,
- (mRect.h - clipArea.y - clipArea.height) * mScale,
- clipArea.width * mScale,
- clipArea.height * mScale);
-}
-
-void NormalOpenGLGraphics::popClipArea() restrict2
-{
- if (mClipStack.empty())
- return;
-
- const ClipRect &clipArea1 = mClipStack.top();
- int transX = -clipArea1.xOffset;
- int transY = -clipArea1.yOffset;
-
- Graphics::popClipArea();
-
- if (mClipStack.empty())
- return;
-
- const ClipRect &clipArea = mClipStack.top();
- transX += clipArea.xOffset;
- transY += clipArea.yOffset;
- if (transX != 0 || transY != 0)
- {
- glTranslatef(static_cast<GLfloat>(transX),
- static_cast<GLfloat>(transY), 0);
- }
- glScissor(clipArea.x * mScale,
- (mRect.h - clipArea.y - clipArea.height) * mScale,
- clipArea.width * mScale,
- clipArea.height * mScale);
-}
-
-void NormalOpenGLGraphics::drawPoint(int x, int y) restrict2
-{
- disableTexturingAndBlending();
- restoreColor();
-
-#ifdef ANDROID
- // TODO need fix
-#else // ANDROID
-
- glBegin(GL_POINTS);
- glVertex2i(x, y);
- glEnd();
-#endif // ANDROID
-}
-
-void NormalOpenGLGraphics::drawLine(int x1, int y1,
- int x2, int y2) restrict2
-{
- disableTexturingAndBlending();
- restoreColor();
-
- mFloatTexArray[0] = static_cast<float>(x1) + 0.5F;
- mFloatTexArray[1] = static_cast<float>(y1) + 0.5F;
- mFloatTexArray[2] = static_cast<float>(x2) + 0.5F;
- mFloatTexArray[3] = static_cast<float>(y2) + 0.5F;
-
- drawLineArrayf(4);
-}
-
-void NormalOpenGLGraphics::drawRectangle(const Rect &restrict rect) restrict2
-{
- drawRectangle(rect, false);
-}
-
-void NormalOpenGLGraphics::fillRectangle(const Rect &restrict rect) restrict2
-{
- drawRectangle(rect, true);
-}
-
-void NormalOpenGLGraphics::enableTexturingAndBlending() restrict2
-{
- if (!mTexture)
- {
- glEnable(OpenGLImageHelper::mTextureType);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- mTexture = true;
- }
-
- if (!mAlpha)
- {
- glEnable(GL_BLEND);
- mAlpha = true;
- }
-}
-
-void NormalOpenGLGraphics::disableTexturingAndBlending() restrict2
-{
- mTextureBinded = 0;
- if (mAlpha && !mColorAlpha)
- {
- glDisable(GL_BLEND);
- mAlpha = false;
- }
- else if (!mAlpha && mColorAlpha)
- {
- glEnable(GL_BLEND);
- mAlpha = true;
- }
-
- if (mTexture)
- {
- glDisable(OpenGLImageHelper::mTextureType);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- mTexture = false;
- }
-}
-
-void NormalOpenGLGraphics::drawRectangle(const Rect &restrict rect,
- const bool filled) restrict2
-{
- BLOCK_START("Graphics::drawRectangle")
- const float offset = filled ? 0 : 0.5F;
- const float x = static_cast<float>(rect.x);
- const float y = static_cast<float>(rect.y);
- const float width = static_cast<float>(rect.width);
- const float height = static_cast<float>(rect.height);
-
- disableTexturingAndBlending();
- restoreColor();
-
- GLfloat vert[] =
- {
- x + offset, y + offset,
- x + width - offset, y + offset,
- x + width - offset, y + height - offset,
- x + offset, y + height - offset
- };
-
- glVertexPointer(2, GL_FLOAT, 0, &vert);
- vertPtr = nullptr;
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(filled ? GL_QUADS : GL_LINE_LOOP, 0, 4);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
- BLOCK_END("Graphics::drawRectangle")
-}
-
-void NormalOpenGLGraphics::drawNet(const int x1, const int y1,
- const int x2, const int y2,
- const int width, const int height) restrict2
-{
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
-
- disableTexturingAndBlending();
- restoreColor();
-
- const float xf1 = static_cast<float>(x1);
- const float xf2 = static_cast<float>(x2);
- const float yf1 = static_cast<float>(y1);
- const float yf2 = static_cast<float>(y2);
-
- for (int y = y1; y < y2; y += height)
- {
- mFloatTexArray[vp + 0] = xf1;
- mFloatTexArray[vp + 1] = static_cast<float>(y);
-
- mFloatTexArray[vp + 2] = xf2;
- mFloatTexArray[vp + 3] = static_cast<float>(y);
-
- vp += 4;
- if (vp >= vLimit)
- {
- drawLineArrayf(vp);
- vp = 0;
- }
- }
-
- for (int x = x1; x < x2; x += width)
- {
- mFloatTexArray[vp + 0] = static_cast<float>(x);
- mFloatTexArray[vp + 1] = yf1;
-
- mFloatTexArray[vp + 2] = static_cast<float>(x);
- mFloatTexArray[vp + 3] = yf2;
-
- vp += 4;
- if (vp >= vLimit)
- {
- drawLineArrayf(vp);
- vp = 0;
- }
- }
-
- if (vp > 0)
- drawLineArrayf(vp);
-}
-
-void NormalOpenGLGraphics::bindTexture(const GLenum target,
- const GLuint texture)
-{
- if (mTextureBinded != texture)
- {
- mTextureBinded = texture;
- glBindTexture(target, texture);
-#ifdef DEBUG_BIND_TEXTURE
- mBinds ++;
-#endif // DEBUG_BIND_TEXTURE
- }
-}
-
-inline void NormalOpenGLGraphics::drawQuadArrayfi(const int size) restrict2
-{
- bindPointerIntFloat(&mIntVertArray[0], &mFloatTexArray[0]);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(GL_QUADS, 0, size / 2);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-inline void NormalOpenGLGraphics::drawQuadArrayfiCached(const int size)
- restrict2
-{
- bindPointerIntFloat(&mIntVertArrayCached[0], &mFloatTexArrayCached[0]);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(GL_QUADS, 0, size / 2);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-inline void NormalOpenGLGraphics::drawQuadArrayfi(const GLint *restrict const
- intVertArray,
- const GLfloat *restrict const
- floatTexArray,
- const int size) restrict2
-{
- vertPtr = intVertArray;
- glVertexPointer(2, GL_INT, 0, intVertArray);
- glTexCoordPointer(2, GL_FLOAT, 0, floatTexArray);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(GL_QUADS, 0, size / 2);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-inline void NormalOpenGLGraphics::drawQuadArrayii(const int size) restrict2
-{
- bindPointerInt(&mIntVertArray[0], &mIntTexArray[0]);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(GL_QUADS, 0, size / 2);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-inline void NormalOpenGLGraphics::drawQuadArrayiiCached(const int size)
- restrict2
-{
- bindPointerInt(&mIntVertArrayCached[0], &mIntTexArrayCached[0]);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(GL_QUADS, 0, size / 2);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-inline void NormalOpenGLGraphics::drawQuadArrayii(const GLint *restrict const
- intVertArray,
- const GLint *restrict const
- intTexArray,
- const int size) restrict2
-{
- vertPtr = intVertArray;
- glVertexPointer(2, GL_INT, 0, intVertArray);
- glTexCoordPointer(2, GL_INT, 0, intTexArray);
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(GL_QUADS, 0, size / 2);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-inline void NormalOpenGLGraphics::drawLineArrayi(const int size) restrict2
-{
- glVertexPointer(2, GL_INT, 0, mIntVertArray);
- vertPtr = nullptr;
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(GL_LINES, 0, size / 2);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-inline void NormalOpenGLGraphics::drawLineArrayf(const int size) restrict2
-{
- glVertexPointer(2, GL_FLOAT, 0, mFloatTexArray);
- vertPtr = nullptr;
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- glDrawArrays(GL_LINES, 0, size / 2);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void NormalOpenGLGraphics::dumpSettings()
-{
- GLint test[1000];
- logger->log("\n\n");
- logger->log("start opengl dump");
- for (int f = 0; f < 65535; f ++)
- {
- test[0] = 0;
- test[1] = 0;
- test[2] = 0;
- test[3] = 0;
- glGetIntegerv(f, &test[0]);
- if (test[0] != 0 || test[1] != 0 || test[2] != 0 || test[3] != 0)
- {
- logger->log("\n%d = %d, %d, %d, %d", f,
- test[0], test[1], test[2], test[3]);
- }
- }
-}
-
-void NormalOpenGLGraphics::setColorAlpha(const float alpha) restrict2
-{
- if (!mIsByteColor && mFloatColor == alpha)
- return;
-
- glColor4f(1.0F, 1.0F, 1.0F, alpha);
- mIsByteColor = false;
- mFloatColor = alpha;
-}
-
-void NormalOpenGLGraphics::restoreColor() restrict2
-{
- if (mIsByteColor && mByteColor == mColor)
- return;
-
- glColor4ub(static_cast<GLubyte>(mColor.r),
- static_cast<GLubyte>(mColor.g),
- static_cast<GLubyte>(mColor.b),
- static_cast<GLubyte>(mColor.a));
- mIsByteColor = true;
- mByteColor = mColor;
-}
-
-void NormalOpenGLGraphics::drawImageRect(const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- #include "render/graphics_drawImageRect.hpp"
-}
-
-void NormalOpenGLGraphics::calcImageRect(ImageVertexes *restrict const vert,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- #include "render/graphics_calcImageRect.hpp"
-}
-
-void NormalOpenGLGraphics::clearScreen() const restrict2
-{
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
-}
-
-#ifdef DEBUG_BIND_TEXTURE
-void NormalOpenGLGraphics::debugBindTexture(const Image *restrict const image)
- restrict2
-{
- const std::string texture = image->mIdPath;
- if (mOldTexture != texture)
- {
- if ((!mOldTexture.empty() || !texture.empty())
- && mOldTextureId != image->mGLImage)
- {
- logger->log("bind: %s (%d) to %s (%d)", mOldTexture.c_str(),
- mOldTextureId, texture.c_str(), image->mGLImage);
- }
- mOldTextureId = image->mGLImage;
- mOldTexture = texture;
- }
-}
-#else // DEBUG_BIND_TEXTURE
-
-void NormalOpenGLGraphics::debugBindTexture(const Image *restrict const
- image A_UNUSED) restrict2
-{
-}
-#endif // DEBUG_BIND_TEXTURE
-
-#endif // defined(USE_OPENGL) && !defined(ANDROID) &&
- // !defined(__native_client__)
diff --git a/src/render/normalopenglgraphics.h b/src/render/normalopenglgraphics.h
deleted file mode 100644
index ee7ecd9ce..000000000
--- a/src/render/normalopenglgraphics.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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 RENDER_NORMALOPENGLGRAPHICS_H
-#define RENDER_NORMALOPENGLGRAPHICS_H
-
-#if defined USE_OPENGL && !defined ANDROID && !defined(__native_client__)
-
-#include "localconsts.h"
-
-#include "render/graphics.h"
-
-#include "resources/fboinfo.h"
-
-#ifdef ANDROID
-#include <GLES/gl.h>
-#include <GLES/glext.h>
-#include <GLES2/gl2.h>
-#else // ANDROID
-#ifndef USE_SDL2
-#define GL_GLEXT_PROTOTYPES 1
-#endif // USE_SDL2
-PRAGMA48(GCC diagnostic push)
-PRAGMA48(GCC diagnostic ignored "-Wshadow")
-#include <SDL_opengl.h>
-PRAGMA48(GCC diagnostic pop)
-#if defined(__APPLE__)
-#include <OpenGL/glext.h>
-#elif !defined(__native_client__)
-#include <GL/glext.h>
-#endif // defined(__APPLE__)
-#endif // ANDROID
-
-class OpenGLGraphicsVertexes;
-
-class NormalOpenGLGraphics final : public Graphics
-{
- public:
- NormalOpenGLGraphics();
-
- A_DELETE_COPY(NormalOpenGLGraphics)
-
- ~NormalOpenGLGraphics();
-
- inline void drawQuadArrayfi(const int size) restrict2 A_INLINE;
-
- inline void drawQuadArrayfiCached(const int size) restrict2 A_INLINE;
-
- inline void drawQuadArrayfi(const GLint *restrict const intVertArray,
- const GLfloat *restrict const
- floatTexArray,
- const int size) restrict2 A_INLINE;
-
- inline void drawQuadArrayii(const int size) restrict2 A_INLINE;
-
- inline void drawQuadArrayiiCached(const int size) restrict2 A_INLINE;
-
- inline void drawQuadArrayii(const GLint *restrict const intVertArray,
- const GLint *restrict const intTexArray,
- const int size) restrict2 A_INLINE;
-
- inline void drawLineArrayi(const int size) restrict2 A_INLINE;
-
- inline void drawLineArrayf(const int size) restrict2 A_INLINE;
-
- void testDraw() restrict2 override final;
-
- #include "render/graphicsdef.hpp"
- RENDER_GRAPHICSDEF_HPP
-
- #include "render/openglgraphicsdef.hpp"
- RENDER_OPENGLGRAPHICSDEF_HPP
-
- #include "render/openglgraphicsdef1.hpp"
- RENDER_OPENGLGRAPHICSDEF1_HPP
-
- #include "render/openglgraphicsdefadvanced.hpp"
- RENDER_OPENGLGRAPHICSDEFADVANCED_HPP
-
-#ifdef DEBUG_BIND_TEXTURE
- unsigned int getBinds() const restrict2 noexcept2
- { return mLastBinds; }
-#endif // DEBUG_BIND_TEXTURE
-
- private:
- GLfloat *mFloatTexArray A_NONNULLPOINTER;
- GLint *mIntTexArray A_NONNULLPOINTER;
- GLint *mIntVertArray A_NONNULLPOINTER;
- GLfloat *mFloatTexArrayCached A_NONNULLPOINTER;
- GLint *mIntTexArrayCached A_NONNULLPOINTER;
- GLint *mIntVertArrayCached A_NONNULLPOINTER;
- float mAlphaCached;
- int mVpCached;
- bool mTexture;
-
- bool mIsByteColor;
- Color mByteColor;
- GLuint mImageCached;
- float mFloatColor;
- int mMaxVertices;
- bool mColorAlpha;
-#ifdef DEBUG_BIND_TEXTURE
- std::string mOldTexture;
- unsigned int mOldTextureId;
- static unsigned int mBinds;
- static unsigned int mLastBinds;
-#endif // DEBUG_BIND_TEXTURE
-
- FBOInfo mFbo;
-};
-#endif // defined USE_OPENGL && !defined ANDROID &&
- // !defined(__native_client__)
-
-#endif // RENDER_NORMALOPENGLGRAPHICS_H
diff --git a/src/render/nullopenglgraphics.cpp b/src/render/nullopenglgraphics.cpp
deleted file mode 100644
index 265ac92f1..000000000
--- a/src/render/nullopenglgraphics.cpp
+++ /dev/null
@@ -1,1251 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-#if defined USE_OPENGL
-
-#include "render/nullopenglgraphics.h"
-
-#ifdef DEBUG_BIND_TEXTURE
-#include "logger.h"
-#endif // DEBUG_BIND_TEXTURE
-
-#include "render/vertexes/imagecollection.h"
-
-#include "resources/imagerect.h"
-#include "resources/openglimagehelper.h"
-
-#include "resources/image/image.h"
-
-#include "debug.h"
-
-GLuint NullOpenGLGraphics::mTextureBinded = 0;
-#ifdef DEBUG_DRAW_CALLS
-unsigned int NullOpenGLGraphics::mDrawCalls = 0;
-unsigned int NullOpenGLGraphics::mLastDrawCalls = 0;
-#endif // DEBUG_DRAW_CALLS
-
-NullOpenGLGraphics::NullOpenGLGraphics() :
- mFloatTexArray(nullptr),
- mIntTexArray(nullptr),
- mIntVertArray(nullptr),
- mTexture(false),
- mIsByteColor(false),
- mByteColor(),
- mFloatColor(1.0F),
- mMaxVertices(500),
- mColorAlpha(false),
-#ifdef DEBUG_BIND_TEXTURE
- mOldTexture(),
- mOldTextureId(0),
-#endif // DEBUG_BIND_TEXTURE
- mFbo()
-{
- mOpenGL = RENDER_NULL;
- mName = "null OpenGL";
-}
-
-NullOpenGLGraphics::~NullOpenGLGraphics()
-{
- delete [] mFloatTexArray;
- delete [] mIntTexArray;
- delete [] mIntVertArray;
-}
-
-void NullOpenGLGraphics::initArrays(const int vertCount) restrict2
-{
- mMaxVertices = vertCount;
- if (mMaxVertices < 500)
- mMaxVertices = 500;
- else if (mMaxVertices > 1024)
- mMaxVertices = 1024;
-
- // need alocate small size, after if limit reached reallocate to double size
- vertexBufSize = mMaxVertices;
- const size_t sz = mMaxVertices * 4 + 30;
- if (mFloatTexArray == nullptr)
- mFloatTexArray = new GLfloat[sz];
- if (mIntTexArray == nullptr)
- mIntTexArray = new GLint[sz];
- if (mIntVertArray == nullptr)
- mIntVertArray = new GLint[sz];
-}
-
-void NullOpenGLGraphics::deleteArrays() restrict2
-{
-}
-
-bool NullOpenGLGraphics::setVideoMode(const int w, const int h,
- const int scale,
- const int bpp,
- const bool fs,
- const bool hwaccel,
- const bool resize,
- const bool noFrame,
- const bool allowHighDPI) restrict2
-{
- setMainFlags(w, h,
- scale,
- bpp,
- fs,
- hwaccel,
- resize,
- noFrame,
- allowHighDPI);
-
- return setOpenGLMode();
-}
-
-static inline void drawQuad(const Image *restrict const image A_UNUSED,
- const int srcX A_UNUSED, const int srcY A_UNUSED,
- const int dstX A_UNUSED, const int dstY A_UNUSED,
- const int width A_UNUSED,
- const int height A_UNUSED) A_NONNULL(1);
-
-static inline void drawQuad(const Image *restrict const image A_UNUSED,
- const int srcX A_UNUSED, const int srcY A_UNUSED,
- const int dstX A_UNUSED, const int dstY A_UNUSED,
- const int width A_UNUSED,
- const int height A_UNUSED)
-{
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
-#ifdef DEBUG_DRAW_CALLS
- NullOpenGLGraphics::mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- }
- else
- {
-#ifdef DEBUG_DRAW_CALLS
- NullOpenGLGraphics::mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- }
-}
-
-static inline void drawRescaledQuad(const Image *restrict const image A_UNUSED,
- const int srcX A_UNUSED,
- const int srcY A_UNUSED,
- const int dstX A_UNUSED,
- const int dstY A_UNUSED,
- const int width A_UNUSED,
- const int height A_UNUSED,
- const int desiredWidth A_UNUSED,
- const int desiredHeight A_UNUSED)
-{
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
-#ifdef DEBUG_DRAW_CALLS
- NullOpenGLGraphics::mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- }
- else
- {
-#ifdef DEBUG_DRAW_CALLS
- NullOpenGLGraphics::mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
- }
-}
-
-void NullOpenGLGraphics::drawImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void NullOpenGLGraphics::copyImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void NullOpenGLGraphics::drawImageInline(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- FUNC_BLOCK("Graphics::drawImage", 1)
- if (image == nullptr)
- return;
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
-
- const SDL_Rect &imageRect = image->mBounds;
- drawQuad(image, imageRect.x, imageRect.y, dstX, dstY,
- imageRect.w, imageRect.h);
-}
-
-void NullOpenGLGraphics::drawImageCached(const Image *restrict const image
- A_UNUSED,
- int x A_UNUSED,
- int y A_UNUSED) restrict2
-{
-}
-
-void NullOpenGLGraphics::drawPatternCached(const Image *restrict const image
- A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED) restrict2
-{
-}
-
-void NullOpenGLGraphics::completeCache() restrict2
-{
-}
-
-void NullOpenGLGraphics::drawRescaledImage(const Image *restrict const image,
- int dstX, int dstY,
- const int desiredWidth,
- const int desiredHeight) restrict2
-{
- FUNC_BLOCK("Graphics::drawRescaledImage", 1)
- if (image == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
-
- // Just draw the image normally when no resizing is necessary,
- if (imageRect.w == desiredWidth && imageRect.h == desiredHeight)
- {
- drawImageInline(image, dstX, dstY);
- return;
- }
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
-
- // Draw a textured quad.
- drawRescaledQuad(image, imageRect.x, imageRect.y, dstX, dstY,
- imageRect.w, imageRect.h, desiredWidth, desiredHeight);
-}
-
-void NullOpenGLGraphics::drawPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- drawPatternInline(image, x, y, w, h);
-}
-
-void NullOpenGLGraphics::drawPatternInline(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- FUNC_BLOCK("Graphics::drawPattern", 1)
- if (image == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
-
- if (iw == 0 || ih == 0)
- return;
-
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- setColorAlpha(image->mAlpha);
-
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
-
- enableTexturingAndBlending();
-
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
- // Draw a set of textured rectangles
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y + py;
- const float texY2 = static_cast<float>(srcY + height) / th;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x + px;
-
- const float texX2 = static_cast<float>(srcX + width) / tw;
-
- mFloatTexArray[vp + 0] = texX1;
- mFloatTexArray[vp + 1] = texY1;
-
- mFloatTexArray[vp + 2] = texX2;
- mFloatTexArray[vp + 3] = texY1;
-
- mFloatTexArray[vp + 4] = texX2;
- mFloatTexArray[vp + 5] = texY2;
-
- mFloatTexArray[vp + 6] = texX1;
- mFloatTexArray[vp + 7] = texY2;
-
- mIntVertArray[vp + 0] = dstX;
- mIntVertArray[vp + 1] = dstY;
-
- mIntVertArray[vp + 2] = dstX + width;
- mIntVertArray[vp + 3] = dstY;
-
- mIntVertArray[vp + 4] = dstX + width;
- mIntVertArray[vp + 5] = dstY + height;
-
- mIntVertArray[vp + 6] = dstX;
- mIntVertArray[vp + 7] = dstY + height;
-
- vp += 8;
- if (vp >= vLimit)
- {
- drawQuadArrayfi(vp);
- vp = 0;
- }
- }
- }
- if (vp > 0)
- drawQuadArrayfi(vp);
- }
- else
- {
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y + py;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x + px;
-
- mIntTexArray[vp + 0] = srcX;
- mIntTexArray[vp + 1] = srcY;
-
- mIntTexArray[vp + 2] = srcX + width;
- mIntTexArray[vp + 3] = srcY;
-
- mIntTexArray[vp + 4] = srcX + width;
- mIntTexArray[vp + 5] = srcY + height;
-
- mIntTexArray[vp + 6] = srcX;
- mIntTexArray[vp + 7] = srcY + height;
-
- mIntVertArray[vp + 0] = dstX;
- mIntVertArray[vp + 1] = dstY;
-
- mIntVertArray[vp + 2] = dstX + width;
- mIntVertArray[vp + 3] = dstY;
-
- mIntVertArray[vp + 4] = dstX + width;
- mIntVertArray[vp + 5] = dstY + height;
-
- mIntVertArray[vp + 6] = dstX;
- mIntVertArray[vp + 7] = dstY + height;
-
- vp += 8;
- if (vp >= vLimit)
- {
- drawQuadArrayii(vp);
- vp = 0;
- }
- }
- }
- if (vp > 0)
- drawQuadArrayii(vp);
- }
-}
-
-void NullOpenGLGraphics::drawRescaledPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h,
- const int scaledWidth,
- const int scaledHeight) restrict2
-{
- if (image == nullptr)
- return;
-
- if (scaledWidth == 0 || scaledHeight == 0)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
- if (iw == 0 || ih == 0)
- return;
-
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
-
- setColorAlpha(image->mAlpha);
-
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
-
- enableTexturingAndBlending();
-
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
-
- // Draw a set of textured rectangles
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
-
- const float tFractionW = iw / tw;
- const float tFractionH = ih / th;
-
- for (int py = 0; py < h; py += scaledHeight)
- {
- const int height = (py + scaledHeight >= h)
- ? h - py : scaledHeight;
- const int dstY = y + py;
- const float visibleFractionH = static_cast<float>(height)
- / scaledHeight;
- const float texY2 = texY1 + tFractionH * visibleFractionH;
- for (int px = 0; px < w; px += scaledWidth)
- {
- const int width = (px + scaledWidth >= w)
- ? w - px : scaledWidth;
- const int dstX = x + px;
- const float visibleFractionW = static_cast<float>(width)
- / scaledWidth;
- const float texX2 = texX1 + tFractionW * visibleFractionW;
-
- mFloatTexArray[vp + 0] = texX1;
- mFloatTexArray[vp + 1] = texY1;
-
- mFloatTexArray[vp + 2] = texX2;
- mFloatTexArray[vp + 3] = texY1;
-
- mFloatTexArray[vp + 4] = texX2;
- mFloatTexArray[vp + 5] = texY2;
-
- mFloatTexArray[vp + 6] = texX1;
- mFloatTexArray[vp + 7] = texY2;
-
- mIntVertArray[vp + 0] = dstX;
- mIntVertArray[vp + 1] = dstY;
-
- mIntVertArray[vp + 2] = dstX + width;
- mIntVertArray[vp + 3] = dstY;
-
- mIntVertArray[vp + 4] = dstX + width;
- mIntVertArray[vp + 5] = dstY + height;
-
- mIntVertArray[vp + 6] = dstX;
- mIntVertArray[vp + 7] = dstY + height;
-
- vp += 8;
- if (vp >= vLimit)
- {
- drawQuadArrayfi(vp);
- vp = 0;
- }
- }
- }
- if (vp > 0)
- drawQuadArrayfi(vp);
- }
- else
- {
- const float scaleFactorW = static_cast<float>(scaledWidth) / iw;
- const float scaleFactorH = static_cast<float>(scaledHeight) / ih;
-
- for (int py = 0; py < h; py += scaledHeight)
- {
- const int height = (py + scaledHeight >= h)
- ? h - py : scaledHeight;
- const int dstY = y + py;
- const int scaledY = srcY + height / scaleFactorH;
- for (int px = 0; px < w; px += scaledWidth)
- {
- const int width = (px + scaledWidth >= w)
- ? w - px : scaledWidth;
- const int dstX = x + px;
- const int scaledX = srcX + width / scaleFactorW;
-
- mIntTexArray[vp + 0] = srcX;
- mIntTexArray[vp + 1] = srcY;
-
- mIntTexArray[vp + 2] = scaledX;
- mIntTexArray[vp + 3] = srcY;
-
- mIntTexArray[vp + 4] = scaledX;
- mIntTexArray[vp + 5] = scaledY;
-
- mIntTexArray[vp + 6] = srcX;
- mIntTexArray[vp + 7] = scaledY;
-
- mIntVertArray[vp + 0] = dstX;
- mIntVertArray[vp + 1] = dstY;
-
- mIntVertArray[vp + 2] = dstX + width;
- mIntVertArray[vp + 3] = dstY;
-
- mIntVertArray[vp + 4] = dstX + width;
- mIntVertArray[vp + 5] = dstY + height;
-
- mIntVertArray[vp + 6] = dstX;
- mIntVertArray[vp + 7] = dstY + height;
-
- vp += 8;
- if (vp >= vLimit)
- {
- drawQuadArrayii(vp);
- vp = 0;
- }
- }
- }
- if (vp > 0)
- drawQuadArrayii(vp);
- }
-}
-
-inline void NullOpenGLGraphics::drawVertexes(const
- OpenGLGraphicsVertexes
- &restrict ogl) restrict2
-{
- const STD_VECTOR<GLint*> &intVertPool = ogl.mIntVertPool;
- STD_VECTOR<GLint*>::const_iterator iv;
- const STD_VECTOR<GLint*>::const_iterator iv_end = intVertPool.end();
- const STD_VECTOR<int> &vp = ogl.mVp;
- STD_VECTOR<int>::const_iterator ivp;
- const STD_VECTOR<int>::const_iterator ivp_end = vp.end();
-
- // Draw a set of textured rectangles
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const STD_VECTOR<GLfloat*> &floatTexPool = ogl.mFloatTexPool;
- STD_VECTOR<GLfloat*>::const_iterator ft;
- const STD_VECTOR<GLfloat*>::const_iterator
- ft_end = floatTexPool.end();
-
- for (iv = intVertPool.begin(), ft = floatTexPool.begin(),
- ivp = vp.begin();
- iv != iv_end && ft != ft_end && ivp != ivp_end;
- ++ iv, ++ ft, ++ ivp)
- {
- drawQuadArrayfi(*iv, *ft, *ivp);
- }
- }
- else
- {
- const STD_VECTOR<GLint*> &intTexPool = ogl.mIntTexPool;
- STD_VECTOR<GLint*>::const_iterator it;
- const STD_VECTOR<GLint*>::const_iterator it_end = intTexPool.end();
-
- for (iv = intVertPool.begin(), it = intTexPool.begin(),
- ivp = vp.begin();
- iv != iv_end && it != it_end && ivp != ivp_end;
- ++ iv, ++ it, ++ ivp)
- {
- drawQuadArrayii(*iv, *it, *ivp);
- }
- }
-}
-
-void NullOpenGLGraphics::calcPattern(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) const restrict2
-{
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void NullOpenGLGraphics::calcPatternInline(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- if (image == nullptr || vert == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
-
- if (iw == 0 || ih == 0)
- return;
-
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- const unsigned int vLimit = mMaxVertices * 4;
-
- OpenGLGraphicsVertexes &ogl = vert->ogl;
- unsigned int vp = ogl.continueVp();
-
- // Draw a set of textured rectangles
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
-
- GLfloat *floatTexArray = ogl.continueFloatTexArray();
- GLint *intVertArray = ogl.continueIntVertArray();
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y + py;
- const float texY2 = static_cast<float>(srcY + height) / th;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x + px;
- const float texX2 = static_cast<float>(srcX + width) / tw;
-
- floatTexArray[vp + 0] = texX1;
- floatTexArray[vp + 1] = texY1;
-
- floatTexArray[vp + 2] = texX2;
- floatTexArray[vp + 3] = texY1;
-
- floatTexArray[vp + 4] = texX2;
- floatTexArray[vp + 5] = texY2;
-
- floatTexArray[vp + 6] = texX1;
- floatTexArray[vp + 7] = texY2;
-
- intVertArray[vp + 0] = dstX;
- intVertArray[vp + 1] = dstY;
-
- intVertArray[vp + 2] = dstX + width;
- intVertArray[vp + 3] = dstY;
-
- intVertArray[vp + 4] = dstX + width;
- intVertArray[vp + 5] = dstY + height;
-
- intVertArray[vp + 6] = dstX;
- intVertArray[vp + 7] = dstY + height;
-
- vp += 8;
- if (vp >= vLimit)
- {
- floatTexArray = ogl.switchFloatTexArray();
- intVertArray = ogl.switchIntVertArray();
- ogl.switchVp(vp);
- vp = 0;
- }
- }
- }
- }
- else
- {
- GLint *intTexArray = ogl.continueIntTexArray();
- GLint *intVertArray = ogl.continueIntVertArray();
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y + py;
- for (int px = 0; px < w; px += iw)
- {
- const int width = (px + iw >= w) ? w - px : iw;
- const int dstX = x + px;
-
- intTexArray[vp + 0] = srcX;
- intTexArray[vp + 1] = srcY;
-
- intTexArray[vp + 2] = srcX + width;
- intTexArray[vp + 3] = srcY;
-
- intTexArray[vp + 4] = srcX + width;
- intTexArray[vp + 5] = srcY + height;
-
- intTexArray[vp + 6] = srcX;
- intTexArray[vp + 7] = srcY + height;
-
- intVertArray[vp + 0] = dstX;
- intVertArray[vp + 1] = dstY;
-
- intVertArray[vp + 2] = dstX + width;
- intVertArray[vp + 3] = dstY;
-
- intVertArray[vp + 4] = dstX + width;
- intVertArray[vp + 5] = dstY + height;
-
- intVertArray[vp + 6] = dstX;
- intVertArray[vp + 7] = dstY + height;
-
- vp += 8;
- if (vp >= vLimit)
- {
- intTexArray = ogl.switchIntTexArray();
- intVertArray = ogl.switchIntVertArray();
- ogl.switchVp(vp);
- vp = 0;
- }
- }
- }
- }
- ogl.switchVp(vp);
-}
-
-void NullOpenGLGraphics::calcTileCollection(ImageCollection *
- restrict const vertCol,
- const Image *restrict const image,
- int x, int y) restrict2
-{
- if (vertCol == nullptr || image == nullptr)
- return;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- ImageVertexes *const vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- calcTileVertexesInline(vert, image, x, y);
- }
- else
- {
- calcTileVertexesInline(vertCol->currentVert, image, x, y);
- }
-}
-
-void NullOpenGLGraphics::drawTileCollection(const ImageCollection
- *restrict const vertCol) restrict2
-{
- const ImageVertexesVector &draws = vertCol->draws;
- const ImageCollectionCIter it_end = draws.end();
- for (ImageCollectionCIter it = draws.begin(); it != it_end; ++ it)
- {
- const ImageVertexes *const vert = *it;
- const Image *const image = vert->image;
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
- drawVertexes(vert->ogl);
- }
-}
-
-void NullOpenGLGraphics::calcPattern(ImageCollection *restrict const vertCol,
- const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) const restrict2
-{
- if (vertCol == nullptr || image == nullptr)
- return;
- ImageVertexes *vert = nullptr;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
-
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void NullOpenGLGraphics::calcTileVertexes(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- int dstX, int dstY) const restrict2
-{
- calcTileVertexesInline(vert, image, dstX, dstY);
-}
-
-void NullOpenGLGraphics::calcTileVertexesInline(ImageVertexes *
- restrict const vert,
- const Image *
- restrict const image,
- int dstX,
- int dstY) const restrict2
-{
- const SDL_Rect &imageRect = image->mBounds;
- const int w = imageRect.w;
- const int h = imageRect.h;
-
- if (w == 0 || h == 0)
- return;
-
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
-
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
-
- const unsigned int vLimit = mMaxVertices * 4;
-
- OpenGLGraphicsVertexes &ogl = vert->ogl;
-
-// STD_VECTOR<int> *vps = ogl.getVp();
- unsigned int vp = ogl.continueVp();
-
- // Draw a set of textured rectangles
- if (OpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
-
- const float texX2 = static_cast<float>(srcX + w) / tw;
- const float texY2 = static_cast<float>(srcY + h) / th;
-
- GLfloat *const floatTexArray = ogl.continueFloatTexArray();
- GLint *const intVertArray = ogl.continueIntVertArray();
-
- floatTexArray[vp + 0] = texX1;
- floatTexArray[vp + 1] = texY1;
-
- floatTexArray[vp + 2] = texX2;
- floatTexArray[vp + 3] = texY1;
-
- floatTexArray[vp + 4] = texX2;
- floatTexArray[vp + 5] = texY2;
-
- floatTexArray[vp + 6] = texX1;
- floatTexArray[vp + 7] = texY2;
-
- intVertArray[vp + 0] = dstX;
- intVertArray[vp + 1] = dstY;
-
- intVertArray[vp + 2] = dstX + w;
- intVertArray[vp + 3] = dstY;
-
- intVertArray[vp + 4] = dstX + w;
- intVertArray[vp + 5] = dstY + h;
-
- intVertArray[vp + 6] = dstX;
- intVertArray[vp + 7] = dstY + h;
-
- vp += 8;
- if (vp >= vLimit)
- {
- ogl.switchFloatTexArray();
- ogl.switchIntVertArray();
- ogl.switchVp(vp);
- vp = 0;
- }
- }
- else
- {
- GLint *const intTexArray = ogl.continueIntTexArray();
- GLint *const intVertArray = ogl.continueIntVertArray();
-
- intTexArray[vp + 0] = srcX;
- intTexArray[vp + 1] = srcY;
-
- intTexArray[vp + 2] = srcX + w;
- intTexArray[vp + 3] = srcY;
-
- intTexArray[vp + 4] = srcX + w;
- intTexArray[vp + 5] = srcY + h;
-
- intTexArray[vp + 6] = srcX;
- intTexArray[vp + 7] = srcY + h;
-
- intVertArray[vp + 0] = dstX;
- intVertArray[vp + 1] = dstY;
-
- intVertArray[vp + 2] = dstX + w;
- intVertArray[vp + 3] = dstY;
-
- intVertArray[vp + 4] = dstX + w;
- intVertArray[vp + 5] = dstY + h;
-
- intVertArray[vp + 6] = dstX;
- intVertArray[vp + 7] = dstY + h;
-
- vp += 8;
- if (vp >= vLimit)
- {
- ogl.switchIntTexArray();
- ogl.switchIntVertArray();
- ogl.switchVp(vp);
- vp = 0;
- }
- }
- ogl.switchVp(vp);
-}
-
-void NullOpenGLGraphics::drawTileVertexes(const ImageVertexes *
- restrict const vert) restrict2
-{
- if (vert == nullptr)
- return;
- const Image *const image = vert->image;
-
- setColorAlpha(image->mAlpha);
-#ifdef DEBUG_BIND_TEXTURE
- debugBindTexture(image);
-#endif // DEBUG_BIND_TEXTURE
-
- bindTexture(OpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
- drawVertexes(vert->ogl);
-}
-
-void NullOpenGLGraphics::calcWindow(ImageCollection *restrict const vertCol,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- ImageVertexes *vert = nullptr;
- Image *const image = imgRect.grid[4];
- if (image == nullptr)
- return;
- if (vertCol->currentGLImage != image->mGLImage)
- {
- vert = new ImageVertexes;
- vertCol->currentGLImage = image->mGLImage;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
- calcImageRect(vert, x, y, w, h, imgRect);
-}
-
-void NullOpenGLGraphics::updateScreen() restrict2
-{
- BLOCK_START("Graphics::updateScreen")
-#ifdef DEBUG_DRAW_CALLS
- mLastDrawCalls = mDrawCalls;
- mDrawCalls = 0;
-#endif // DEBUG_DRAW_CALLS
-
- BLOCK_END("Graphics::updateScreen")
-}
-
-void NullOpenGLGraphics::beginDraw() restrict2
-{
- pushClipArea(Rect(0, 0, 640, 480));
-}
-
-void NullOpenGLGraphics::endDraw() restrict2
-{
- popClipArea();
-}
-
-void NullOpenGLGraphics::pushClipArea(const Rect &restrict area) restrict2
-{
- int transX = 0;
- int transY = 0;
-
- if (!mClipStack.empty())
- {
- const ClipRect &clipArea = mClipStack.top();
- transX = -clipArea.xOffset;
- transY = -clipArea.yOffset;
- }
-
- Graphics::pushClipArea(area);
-
- const ClipRect &clipArea = mClipStack.top();
- transX += clipArea.xOffset;
- transY += clipArea.yOffset;
-}
-
-void NullOpenGLGraphics::popClipArea() restrict2
-{
- Graphics::popClipArea();
-
- if (mClipStack.empty())
- return;
-}
-
-void NullOpenGLGraphics::drawPoint(int x A_UNUSED, int y A_UNUSED) restrict2
-{
- disableTexturingAndBlending();
- restoreColor();
-}
-
-void NullOpenGLGraphics::drawLine(int x1, int y1,
- int x2, int y2) restrict2
-{
- disableTexturingAndBlending();
- restoreColor();
-
- mFloatTexArray[0] = static_cast<float>(x1) + 0.5F;
- mFloatTexArray[1] = static_cast<float>(y1) + 0.5F;
- mFloatTexArray[2] = static_cast<float>(x2) + 0.5F;
- mFloatTexArray[3] = static_cast<float>(y2) + 0.5F;
-
- drawLineArrayf(4);
-}
-
-void NullOpenGLGraphics::drawRectangle(const Rect &restrict rect) restrict2
-{
- drawRectangle(rect, false);
-}
-
-void NullOpenGLGraphics::fillRectangle(const Rect &restrict rect) restrict2
-{
- drawRectangle(rect, true);
-}
-
-void NullOpenGLGraphics::enableTexturingAndBlending() restrict2
-{
- if (!mTexture)
- mTexture = true;
-
- if (!mAlpha)
- mAlpha = true;
-}
-
-void NullOpenGLGraphics::disableTexturingAndBlending() restrict2
-{
- mTextureBinded = 0;
- if (mAlpha && !mColorAlpha)
- mAlpha = false;
- else if (!mAlpha && mColorAlpha)
- mAlpha = true;
-
- if (mTexture)
- mTexture = false;
-}
-
-void NullOpenGLGraphics::drawRectangle(const Rect &restrict rect A_UNUSED,
- const bool filled A_UNUSED) restrict2
-{
- BLOCK_START("Graphics::drawRectangle")
- disableTexturingAndBlending();
- restoreColor();
-
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-
- BLOCK_END("Graphics::drawRectangle")
-}
-
-void NullOpenGLGraphics::drawNet(const int x1, const int y1,
- const int x2, const int y2,
- const int width, const int height) restrict2
-{
- unsigned int vp = 0;
- const unsigned int vLimit = mMaxVertices * 4;
-
- disableTexturingAndBlending();
- restoreColor();
-
- const float xf1 = static_cast<float>(x1);
- const float xf2 = static_cast<float>(x2);
- const float yf1 = static_cast<float>(y1);
- const float yf2 = static_cast<float>(y2);
-
- for (int y = y1; y < y2; y += height)
- {
- mFloatTexArray[vp + 0] = xf1;
- mFloatTexArray[vp + 1] = static_cast<float>(y);
-
- mFloatTexArray[vp + 2] = xf2;
- mFloatTexArray[vp + 3] = static_cast<float>(y);
-
- vp += 4;
- if (vp >= vLimit)
- {
- drawLineArrayf(vp);
- vp = 0;
- }
- }
-
- for (int x = x1; x < x2; x += width)
- {
- mFloatTexArray[vp + 0] = static_cast<float>(x);
- mFloatTexArray[vp + 1] = yf1;
-
- mFloatTexArray[vp + 2] = static_cast<float>(x);
- mFloatTexArray[vp + 3] = yf2;
-
- vp += 4;
- if (vp >= vLimit)
- {
- drawLineArrayf(vp);
- vp = 0;
- }
- }
-
- if (vp > 0)
- drawLineArrayf(vp);
-}
-
-void NullOpenGLGraphics::bindTexture(const GLenum target A_UNUSED,
- const GLuint texture)
-{
- if (mTextureBinded != texture)
- mTextureBinded = texture;
-}
-
-inline void NullOpenGLGraphics::drawQuadArrayfi(const int size A_UNUSED)
- restrict2
-{
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-}
-
-inline void NullOpenGLGraphics::drawQuadArrayfi(const GLint *restrict const
- intVertArray A_UNUSED,
- const GLfloat *restrict const
- floatTexArray A_UNUSED,
- const int size A_UNUSED)
- restrict2
-{
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-}
-
-inline void NullOpenGLGraphics::drawQuadArrayii(const int size A_UNUSED)
- restrict2
-{
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-}
-
-inline void NullOpenGLGraphics::drawQuadArrayii(const GLint *restrict const
- intVertArray A_UNUSED,
- const GLint *restrict const
- intTexArray A_UNUSED,
- const int size A_UNUSED)
- restrict2
-{
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-}
-
-inline void NullOpenGLGraphics::drawLineArrayi(const int size A_UNUSED)
- restrict2
-{
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-}
-
-inline void NullOpenGLGraphics::drawLineArrayf(const int size A_UNUSED)
- restrict2
-{
-#ifdef DEBUG_DRAW_CALLS
- mDrawCalls ++;
-#endif // DEBUG_DRAW_CALLS
-}
-
-void NullOpenGLGraphics::dumpSettings()
-{
-}
-
-void NullOpenGLGraphics::setColorAlpha(const float alpha) restrict2
-{
- if (!mIsByteColor && mFloatColor == alpha)
- return;
-
- mIsByteColor = false;
- mFloatColor = alpha;
-}
-
-void NullOpenGLGraphics::restoreColor() restrict2
-{
- if (mIsByteColor && mByteColor == mColor)
- return;
-
- mIsByteColor = true;
- mByteColor = mColor;
-}
-
-void NullOpenGLGraphics::drawImageRect(const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- #include "render/graphics_drawImageRect.hpp"
-}
-
-void NullOpenGLGraphics::calcImageRect(ImageVertexes *restrict const vert,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- #include "render/graphics_calcImageRect.hpp"
-}
-
-void NullOpenGLGraphics::clearScreen() const restrict2
-{
-}
-
-#ifdef DEBUG_BIND_TEXTURE
-void NullOpenGLGraphics::debugBindTexture(const Image *restrict const image)
- restrict2
-{
- const std::string texture = image->mIdPath;
- if (mOldTexture != texture)
- {
- if ((!mOldTexture.empty() || !texture.empty())
- && mOldTextureId != image->mGLImage)
- {
- logger->log("bind: %s (%d) to %s (%d)", mOldTexture.c_str(),
- mOldTextureId, texture.c_str(), image->mGLImage);
- }
- mOldTextureId = image->mGLImage;
- mOldTexture = texture;
- }
-}
-#else // DEBUG_BIND_TEXTURE
-
-void NullOpenGLGraphics::debugBindTexture(const Image *restrict const
- image A_UNUSED) restrict2
-{
-}
-#endif // DEBUG_BIND_TEXTURE
-#endif // USE_OPENGL
diff --git a/src/render/nullopenglgraphics.h b/src/render/nullopenglgraphics.h
deleted file mode 100644
index f496c0a35..000000000
--- a/src/render/nullopenglgraphics.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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 RENDER_NULLOPENGLGRAPHICS_H
-#define RENDER_NULLOPENGLGRAPHICS_H
-
-#if defined USE_OPENGL
-
-#include "localconsts.h"
-
-#include "render/graphics.h"
-
-#include "resources/fboinfo.h"
-
-#ifdef ANDROID
-#include <GLES/gl.h>
-#include <GLES/glext.h>
-#include <GLES2/gl2.h>
-#else // ANDROID
-#ifndef USE_SDL2
-#define GL_GLEXT_PROTOTYPES 1
-#endif // USE_SDL2
-PRAGMA48(GCC diagnostic push)
-PRAGMA48(GCC diagnostic ignored "-Wshadow")
-#include <SDL_opengl.h>
-PRAGMA48(GCC diagnostic pop)
-#if defined(__APPLE__)
-#include <OpenGL/glext.h>
-#elif !defined(__native_client__)
-#include <GL/glext.h>
-#endif // defined(__APPLE__)
-#endif // ANDROID
-
-class OpenGLGraphicsVertexes;
-
-class NullOpenGLGraphics final : public Graphics
-{
- public:
- NullOpenGLGraphics();
-
- A_DELETE_COPY(NullOpenGLGraphics)
-
- ~NullOpenGLGraphics();
-
- inline void drawQuadArrayfi(const int size) restrict2 A_INLINE;
-
- inline void drawQuadArrayfi(const GLint *restrict const intVertArray,
- const GLfloat *restrict const
- floatTexArray,
- const int size) restrict2 A_INLINE;
-
- inline void drawQuadArrayii(const int size) restrict2 A_INLINE;
-
- inline void drawQuadArrayii(const GLint *restrict const intVertArray,
- const GLint *restrict const intTexArray,
- const int size) restrict2 A_INLINE;
-
- inline void drawLineArrayi(const int size) restrict2 A_INLINE;
-
- inline void drawLineArrayf(const int size) restrict2 A_INLINE;
-
- #include "render/graphicsdef.hpp"
- RENDER_GRAPHICSDEF_HPP
-
- #include "render/openglgraphicsdef.hpp"
- RENDER_OPENGLGRAPHICSDEF_HPP
-
- #include "render/openglgraphicsdef1.hpp"
- RENDER_OPENGLGRAPHICSDEF1_HPP
-
- #include "render/openglgraphicsdefadvanced.hpp"
- RENDER_OPENGLGRAPHICSDEFADVANCED_HPP
-
- private:
- GLfloat *mFloatTexArray A_NONNULLPOINTER;
- GLint *mIntTexArray A_NONNULLPOINTER;
- GLint *mIntVertArray A_NONNULLPOINTER;
- bool mTexture;
-
- bool mIsByteColor;
- Color mByteColor;
- float mFloatColor;
- int mMaxVertices;
- bool mColorAlpha;
-#ifdef DEBUG_BIND_TEXTURE
- std::string mOldTexture;
- unsigned mOldTextureId;
-#endif // DEBUG_BIND_TEXTURE
- FBOInfo mFbo;
-};
-#endif // defined USE_OPENGL
-#endif // RENDER_NULLOPENGLGRAPHICS_H
diff --git a/src/render/opengl/mgl.cpp b/src/render/opengl/mgl.cpp
deleted file mode 100644
index b2fd24c83..000000000
--- a/src/render/opengl/mgl.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 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/>.
- */
-
-#ifdef USE_OPENGL
-
-#include "render/opengl/mgl.h"
-
-#include "debug.h"
-
-#define defName(name) name##_t m##name = nullptr
-
-// include function defines
-#include "render/opengl/mgl.hpp"
-
-MGL_DEFINE
-
-#endif // USE_OPENGL
diff --git a/src/render/opengl/mgl.h b/src/render/opengl/mgl.h
deleted file mode 100644
index c761c2131..000000000
--- a/src/render/opengl/mgl.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 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 RENDER_OPENGL_MGL_H
-#define RENDER_OPENGL_MGL_H
-
-#ifdef USE_OPENGL
-
-#include "render/opengl/mgltypes.h"
-
-#define defName(name) extern name##_t m##name
-
-#include "render/opengl/mgl.hpp"
-
-MGL_DEFINE
-
-#undef defName
-#undef MGL_DEFINE
-
-#endif // USE_OPENGL
-#endif // RENDER_OPENGL_MGL_H
diff --git a/src/render/opengl/mgl.hpp b/src/render/opengl/mgl.hpp
deleted file mode 100644
index 980746edd..000000000
--- a/src/render/opengl/mgl.hpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 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/>.
- */
-
-#define MGL_DEFINE
-
-defName(glGenRenderbuffers);
-defName(glBindRenderbuffer);
-defName(glRenderbufferStorage);
-defName(glGenFramebuffers);
-defName(glBindFramebuffer);
-defName(glFramebufferTexture2D);
-defName(glFramebufferRenderbuffer);
-defName(glDeleteFramebuffers);
-defName(glDeleteRenderbuffers);
-defName(glGetStringi);
-defName(glGenSamplers);
-defName(glDeleteSamplers);
-defName(glBindSampler);
-defName(glSamplerParameteri);
-defName(glDebugMessageControl);
-defName(glDebugMessageCallback);
-defName(glFrameTerminator);
-defName(glLabelObject);
-defName(glGetObjectLabel);
-defName(glInsertEventMarker);
-defName(glPushGroupMarker);
-defName(glPopGroupMarker);
-defName(glGenVertexArrays);
-defName(glBindVertexArray);
-defName(glDeleteVertexArrays);
-defName(glDisableVertexAttribArray);
-defName(glDeleteShader);
-defName(glGetShaderInfoLog);
-defName(glGetShaderSource);
-defName(glDetachShader);
-defName(glGetAttachedShaders);
-defName(glGetActiveUniform);
-defName(glBindFragDataLocation);
-#ifndef __native_client__
-defName(glDeleteProgram);
-defName(glCreateProgram);
-defName(glGetProgramiv);
-defName(glLinkProgram);
-defName(glAttachShader);
-defName(glGetShaderiv);
-defName(glCompileShader);
-defName(glShaderSource);
-defName(glCreateShader);
-defName(glGetUniformLocation);
-defName(glGenBuffers);
-defName(glDeleteBuffers);
-defName(glBindBuffer);
-defName(glBufferData);
-defName(glEnableVertexAttribArray);
-defName(glVertexAttribPointer);
-defName(glUseProgram);
-defName(glUniform1f);
-defName(glUniform2f);
-defName(glUniform4f);
-defName(glValidateProgram);
-defName(glGetProgramInfoLog);
-defName(glBindAttribLocation);
-defName(glActiveTexture);
-
-#define mglDrawArrays(...) \
- glDrawArrays(__VA_ARGS__)
-#define mglDisable(...) \
- glDisable(__VA_ARGS__)
-#define mglHint(...) \
- glHint(__VA_ARGS__)
-#define mglScissor(...) \
- glScissor(__VA_ARGS__)
-#define mglEnable(...) \
- glEnable(__VA_ARGS__)
-#define mglBindTexture(...) \
- glBindTexture(__VA_ARGS__)
-#define mglGetIntegerv(...) \
- glGetIntegerv(__VA_ARGS__)
-#define mglClear(...) \
- glClear(__VA_ARGS__)
-#define mglGetString(...) \
- glGetString(__VA_ARGS__)
-#define mglTexParameteri(...) \
- glTexParameteri(__VA_ARGS__)
-#define mglTexImage2D(...) \
- glTexImage2D(__VA_ARGS__)
-#define mglGenTextures(...) \
- glGenTextures(__VA_ARGS__)
-#define mglPixelStorei(...) \
- glPixelStorei(__VA_ARGS__)
-#define mglReadPixels(...) \
- glReadPixels(__VA_ARGS__)
-
-#endif
-defName(glGetAttribLocation);
-defName(glUniform3f);
-defName(glCheckFramebufferStatus);
-defName(glProgramUniform1f);
-defName(glProgramUniform2f);
-defName(glProgramUniform3f);
-defName(glProgramUniform4f);
-defName(glBindVertexBuffer);
-defName(glVertexAttribBinding);
-defName(glVertexAttribFormat);
-defName(glBindVertexBuffers);
-defName(glIsBuffer);
-defName(glVertexAttribIFormat);
-defName(glVertexAttribIPointer);
-defName(glInvalidateTexImage);
-defName(glCopyImageSubData);
-defName(glPushDebugGroup);
-defName(glPopDebugGroup);
-defName(glObjectLabel);
-defName(glTexStorage2D);
-defName(glGenQueries);
-defName(glBeginQuery);
-defName(glEndQuery);
-defName(glDeleteQueries);
-defName(glGetQueryObjectiv);
-defName(glGetQueryObjectui64v);
-defName(glTextureSubImage2D);
-defName(glTextureSubImage2DEXT);
-defName(glClearTexImage);
-defName(glClearTexSubImage);
-#ifdef WIN32
-defName(wglGetExtensionsString);
-#endif
diff --git a/src/render/opengl/mglcheck.h b/src/render/opengl/mglcheck.h
deleted file mode 100644
index 0fa2e4ba6..000000000
--- a/src/render/opengl/mglcheck.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 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 RENDER_OPENGL_MGLCHECK_H
-#define RENDER_OPENGL_MGLCHECK_H
-
-#ifdef USE_OPENGL
-
-#define isGLNull(func) (!(func))
-#define isGLNotNull(func) ((func) != nullptr)
-
-#endif // USE_OPENGL
-#endif // RENDER_OPENGL_MGLCHECK_H
diff --git a/src/render/opengl/mgldefines.h b/src/render/opengl/mgldefines.h
deleted file mode 100644
index 7f3a09334..000000000
--- a/src/render/opengl/mgldefines.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 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 RENDER_OPENGL_MGLDEFINES_H
-#define RENDER_OPENGL_MGLDEFINES_H
-
-#ifdef USE_OPENGL
-
-#ifndef GL_NUM_EXTENSIONS
-#define GL_NUM_EXTENSIONS 0x821D
-#define GL_DEPTH_ATTACHMENT 0x8D00
-#define GL_COLOR_ATTACHMENT0 0x8CE0
-#define GL_FRAMEBUFFER 0x8D40
-#define GL_RENDERBUFFER 0x8D41
-#endif // GL_NUM_EXTENSIONS
-
-#ifndef GL_COMPRESSED_RGBA_ARB
-#define GL_COMPRESSED_RGBA_ARB 0x84EE
-#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
-#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1
-#endif // GL_COMPRESSED_RGBA_ARB
-#ifndef GL_MAX_ELEMENTS_VERTICES
-#define GL_MAX_ELEMENTS_VERTICES 0x80E8
-#define GL_MAX_ELEMENTS_INDICES 0x80E9
-#endif // GL_MAX_ELEMENTS_VERTICES
-
-#ifndef GL_DEBUG_OUTPUT
-#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
-#define GL_DEBUG_OUTPUT 0x92E0
-#define GL_DEBUG_SOURCE_API 0x8246
-#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
-#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
-#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249
-#define GL_DEBUG_SOURCE_APPLICATION 0x824A
-#define GL_DEBUG_SOURCE_OTHER 0x824B
-#define GL_DEBUG_TYPE_ERROR 0x824C
-#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
-#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E
-#define GL_DEBUG_TYPE_PORTABILITY 0x824F
-#define GL_DEBUG_TYPE_PERFORMANCE 0x8250
-#define GL_DEBUG_TYPE_OTHER 0x8251
-#define GL_DEBUG_TYPE_MARKER 0x8268
-#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B
-#define GL_DEBUG_SEVERITY_HIGH 0x9146
-#define GL_DEBUG_SEVERITY_MEDIUM 0x9147
-#define GL_DEBUG_SEVERITY_LOW 0x9148
-#endif // GL_DEBUG_OUTPUT
-
-#ifndef GL_DEBUG_TYPE_PUSH_GROUP
-#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269
-#endif // GL_DEBUG_TYPE_PUSH_GROUP
-#ifndef GL_DEBUG_TYPE_POP_GROUP
-#define GL_DEBUG_TYPE_POP_GROUP 0x826a
-#endif // GL_DEBUG_TYPE_POP_GROUP
-
-#ifndef GL_EXT_debug_label
-#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F
-#define GL_PROGRAM_OBJECT_EXT 0x8B40
-#define GL_SHADER_OBJECT_EXT 0x8B48
-#define GL_BUFFER_OBJECT_EXT 0x9151
-#define GL_QUERY_OBJECT_EXT 0x9153
-#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154
-#endif // GL_EXT_debug_label
-
-#ifndef GL_ARRAY_BUFFER
-#define GL_ARRAY_BUFFER 0x8892
-#define GL_ELEMENT_ARRAY_BUFFER 0x8893
-#endif // GL_ARRAY_BUFFER
-
-#ifndef GL_STREAM_DRAW
-#define GL_STREAM_DRAW 0x88E0
-#define GL_STATIC_DRAW 0x88E4
-#define GL_DYNAMIC_DRAW 0x88E8
-#endif // GL_STREAM_DRAW
-
-#ifndef GL_COMPILE_STATUS
-#define GL_FRAGMENT_SHADER 0x8B30
-#define GL_VERTEX_SHADER 0x8B31
-#define GL_COMPILE_STATUS 0x8B81
-#define GL_LINK_STATUS 0x8B82
-#define GL_VALIDATE_STATUS 0x8B83
-#define GL_INFO_LOG_LENGTH 0x8B84
-#endif // GL_COMPILE_STATUS
-
-#ifndef GL_DEPTH_CLAMP
-#define GL_DEPTH_CLAMP 0x864F
-#define GL_RASTERIZER_DISCARD 0x8C89
-#define GL_SAMPLE_MASK 0x8E51
-#endif // GL_DEPTH_CLAMP
-
-#ifndef GL_POLYGON_SMOOTH
-#define GL_POLYGON_SMOOTH 0x0B41
-#endif // GL_POLYGON_SMOOTH
-
-#ifndef GL_DEPTH_BOUNDS_TEST_EXT
-#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890
-#endif // GL_DEPTH_BOUNDS_TEST_EXT
-
-#ifndef GL_TEXTURE_COMPRESSION_HINT_ARB
-#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF
-#endif // GL_TEXTURE_COMPRESSION_HINT_ARB
-
-#ifndef GLX_CONTEXT_PROFILE_MASK_ARB
-#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126
-#endif // GLX_CONTEXT_PROFILE_MASK_ARB
-
-#ifndef GLX_CONTEXT_MAJOR_VERSION_ARB
-#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
-#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
-#define GLX_CONTEXT_FLAGS_ARB 0x2094
-#endif // GLX_CONTEXT_MAJOR_VERSION_ARB
-
-#ifndef GL_COMPRESSED_RGBA_BPTC_UNORM_ARB
-#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C
-#endif // GL_COMPRESSED_RGBA_BPTC_UNORM_ARB
-
-#endif // USE_OPENGL
-
-#endif // RENDER_OPENGL_MGLDEFINES_H
diff --git a/src/render/opengl/mglemu.cpp b/src/render/opengl/mglemu.cpp
deleted file mode 100644
index 864b130ef..000000000
--- a/src/render/opengl/mglemu.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2014-2017 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/>.
- */
-
-#ifdef USE_OPENGL
-
-#include "render/opengl/mglemu.h"
-
-#ifdef OPENGLERRORS
-#include "graphicsmanager.h"
-#endif // OPENGLERRORS
-
-#include "resources/openglimagehelper.h"
-
-#include "debug.h"
-
-void APIENTRY emuglTextureSubImage2DEXT(GLuint texture, GLenum target,
- GLint level,
- GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const void *pixels)
-{
- OpenGLImageHelper::bindTexture(texture);
- glTexSubImage2D(target, level,
- xoffset, yoffset,
- width, height,
- format, type, pixels);
-#ifdef OPENGLERRORS
- graphicsManager.logError();
-#endif // OPENGLERRORS
-}
-
-void APIENTRY emuglActiveTexture(GLenum texture A_UNUSED)
-{
-}
-
-#endif // USE_OPENGL
diff --git a/src/render/opengl/mglemu.h b/src/render/opengl/mglemu.h
deleted file mode 100644
index cb31eaef2..000000000
--- a/src/render/opengl/mglemu.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2014-2017 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 RENDER_OPENGL_MGLEMU_H
-#define RENDER_OPENGL_MGLEMU_H
-#ifdef USE_OPENGL
-
-#include "render/opengl/mgltypes.h"
-
-void APIENTRY emuglTextureSubImage2DEXT(GLuint texture,
- GLenum target,
- GLint level,
- GLint xoffset,
- GLint yoffset,
- GLsizei width,
- GLsizei height,
- GLenum format,
- GLenum type,
- const void *pixels);
-
-void APIENTRY emuglActiveTexture(GLenum texture);
-
-#endif // USE_OPENGL
-#endif // RENDER_OPENGL_MGLEMU_H
diff --git a/src/render/opengl/mglfunctions.h b/src/render/opengl/mglfunctions.h
deleted file mode 100644
index 2323283d2..000000000
--- a/src/render/opengl/mglfunctions.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 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 RENDER_OPENGL_MGLFUNCTIONS_H
-#define RENDER_OPENGL_MGLFUNCTIONS_H
-
-#ifdef USE_OPENGL
-
-#include "logger.h"
-
-LOGGER_H
-
-#ifdef WIN32
-#define getFunction(name) wglGetProcAddress(name)
-#elif defined ANDROID
-#define getFunction(name) eglGetProcAddress(name)
-#elif defined __APPLE__
-#define getFunction(name) nullptr
-#elif defined __native_client__
-#define getFunction(name) glGetProcAddressREGAL(name)
-#else // WIN32
-#define getFunction(name) glXGetProcAddress(\
- reinterpret_cast<const GLubyte*>(name))
-#endif // WIN32
-
-#define assignFunction(func) \
- { \
- m##func = reinterpret_cast<func##_t>(getFunction(#func)); \
- if (m##func == nullptr) \
- logger->log("function not found: " #func); \
- else \
- logger->log("assigned function: " #func); \
- }
-
-#define assignFunction3(func, ext) \
- { \
- m##func = reinterpret_cast<func##_t>(getFunction(#func#ext)); \
- if (m##func == nullptr) \
- { \
- logger->log("function not found: " #func#ext); \
- m##func = reinterpret_cast<func##_t>(getFunction(#func)); \
- if (m##func == nullptr) \
- logger->log("function not found: " #func); \
- else \
- logger->log("assigned function: " #func); \
- } \
- else \
- { \
- logger->log("assigned function: " #func#ext); \
- } \
- }
-
-#define assignFunctionARB(func) assignFunction3(func, ARB)
-
-#define assignFunctionEXT(func) assignFunction3(func, EXT)
-
-#define assignFunction2(func, name) \
- { \
- m##func = reinterpret_cast<func##_t>(getFunction(name)); \
- if (m##func == nullptr) \
- logger->log(std::string("function not found: ") + name); \
- else \
- logger->log(std::string("assigned function: ") + name); \
- }
-
-#define assignFunctionEmu2(func, name) \
- { \
- m##func = reinterpret_cast<func##_t>(getFunction(name)); \
- if (m##func == nullptr) \
- { \
- m##func = emu##func; \
- logger->log(std::string("emulated function: ") + name); \
- } \
- else \
- { \
- logger->log(std::string("assigned function: ") + name); \
- } \
- }
-
-#define emulateFunction(func) m##func = emu##func; \
- logger->log("emulated function: " #func)
-
-#endif // USE_OPENGL
-#endif // RENDER_OPENGL_MGLFUNCTIONS_H
diff --git a/src/render/opengl/mgltypes.h b/src/render/opengl/mgltypes.h
deleted file mode 100644
index d6ad9fee5..000000000
--- a/src/render/opengl/mgltypes.h
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 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 RENDER_OPENGL_MGLTYPES_H
-#define RENDER_OPENGL_MGLTYPES_H
-
-#ifdef USE_OPENGL
-
-#ifdef ANDROID
-#include <GLES/gl.h>
-#include <GLES/glext.h>
-#define APIENTRY GL_APIENTRY
-#else // ANDROID
-#include "localconsts.h"
-#ifndef USE_SDL2
-#define GL_GLEXT_PROTOTYPES 1
-#endif // USE_SDL2
-PRAGMA48(GCC diagnostic push)
-PRAGMA48(GCC diagnostic ignored "-Wshadow")
-#include <SDL_opengl.h>
-PRAGMA48(GCC diagnostic pop)
-#ifdef __native_client__
-#include <GL/Regal.h>
-#else // __native_client__
-#if defined(__APPLE__)
-#include <OpenGL/glext.h>
-#else // defined(__APPLE__)
-// probably this include need for some os / libs
-// #include <GL/glext.h>
-#ifndef __glext_h_
-#error missing include <GL/glext.h>
-#endif // __glext_h_
-#endif // defined(__APPLE__)
-#endif // __native_client__
-#endif // ANDROID
-
-#include "render/opengl/mgldefines.h"
-RENDER_OPENGL_MGLDEFINES_H
-
-#ifndef USE_SDL2
-#if defined(__GXX_EXPERIMENTAL_CXX0X__)
-#include <cstdint>
-#endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
-#endif // USE_SDL2
-
-typedef void (APIENTRY *glGenRenderbuffers_t)(GLsizei, GLuint *);
-typedef void (APIENTRY *glBindRenderbuffer_t)(GLenum target,
- GLuint renderbuffer);
-typedef void (APIENTRY *glRenderbufferStorage_t)(GLenum target,
- GLenum internalformat, GLsizei width, GLsizei height);
-typedef void (APIENTRY *glGenFramebuffers_t)(GLsizei n, GLuint *framebuffers);
-typedef void (APIENTRY *glBindFramebuffer_t)(GLenum target,
- GLuint framebuffer);
-typedef void (APIENTRY *glFramebufferTexture2D_t)(GLenum target,
- GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-typedef void (APIENTRY *glFramebufferRenderbuffer_t)(GLenum target,
- GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
-typedef void (APIENTRY *glDeleteFramebuffers_t) (GLsizei, const GLuint *);
-typedef void (APIENTRY *glDeleteRenderbuffers_t) (GLsizei, const GLuint *);
-typedef const GLubyte *(APIENTRY *glGetStringi_t) (GLenum, GLuint);
-typedef void (APIENTRY *glGenSamplers_t) (GLsizei count, GLuint *samplers);
-typedef void (APIENTRY *glDeleteSamplers_t)
- (GLsizei count, const GLuint * samplers);
-typedef void (APIENTRY *glBindSampler_t) (GLuint unit, GLuint sampler);
-typedef void (APIENTRY *glSamplerParameteri_t)
- (GLuint sampler, GLenum pname, GLint param);
-typedef void (APIENTRY *glDebugMessageControl_t) (GLenum source, GLenum type,
- GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled);
-typedef void (APIENTRY *glFrameTerminator_t) (void);
-typedef void (APIENTRY *glLabelObject_t) (GLenum type, GLuint object,
- GLsizei length, const GLchar *label);
-typedef void (APIENTRY *glGetObjectLabel_t) (GLenum type, GLuint object,
- GLsizei bufSize, GLsizei *length, GLchar *label);
-typedef void (APIENTRY *glInsertEventMarker_t)
- (GLsizei length, const char *marker);
-typedef void (APIENTRY *glPushGroupMarker_t)
- (GLsizei length, const char *marker);
-typedef void (APIENTRY *glPopGroupMarker_t) (void);
-typedef void (APIENTRY *glGenVertexArrays_t) (GLsizei n, GLuint *arrays);
-typedef void (APIENTRY *glBindVertexArray_t) (GLuint array);
-typedef void (APIENTRY *glDeleteVertexArrays_t) (GLsizei n, GLuint *arrays);
-typedef void (APIENTRY *glDisableVertexAttribArray_t) (GLuint index);
-typedef void (APIENTRY *glDeleteShader_t) (GLenum shader);
-typedef void (APIENTRY *glGetShaderInfoLog_t) (GLuint shader,
- GLsizei maxLength, GLsizei *length, GLchar *infoLog);
-typedef void (APIENTRY *glGetShaderSource_t) (GLuint shader,
- GLsizei bufSize, GLsizei *length, GLchar *source);
-typedef void (APIENTRY *glDetachShader_t) (GLuint program, GLuint shader);
-typedef void (APIENTRY *glGetAttachedShaders_t) (GLuint program,
- GLsizei maxCount, GLsizei *count, GLuint *shaders);
-typedef void (APIENTRY *glGetActiveUniform_t) (GLuint program, GLuint index,
- GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
-typedef GLint (APIENTRY *glBindFragDataLocation_t) (GLuint program,
- GLuint colorNumber, const char *name);
-#ifndef __native_client__
-typedef void (APIENTRY *glDeleteProgram_t) (GLuint program);
-typedef GLuint (APIENTRY *glCreateProgram_t) (void);
-typedef void (APIENTRY *glGetProgramiv_t) (GLuint program,
- GLenum pname, GLint *params);
-typedef void (APIENTRY *glLinkProgram_t) (GLuint program);
-typedef void (APIENTRY *glAttachShader_t) (GLuint program, GLuint shader);
-typedef void (APIENTRY *glGetShaderiv_t) (GLuint shader,
- GLenum pname, GLint *params);
-typedef void (APIENTRY *glCompileShader_t) (GLuint shader);
-typedef void (APIENTRY *glShaderSource_t) (GLuint shader,
- GLsizei count, const GLchar **string, const GLint *length);
-typedef GLuint (APIENTRY *glCreateShader_t) (GLenum shaderType);
-typedef GLint (APIENTRY *glGetUniformLocation_t) (GLuint program,
- const GLchar *name);
-typedef void (APIENTRY *glGenBuffers_t) (GLsizei n, GLuint *buffers);
-typedef void (APIENTRY *glDeleteBuffers_t) (GLsizei n, GLuint *buffers);
-typedef void (APIENTRY *glBindBuffer_t) (GLenum target, GLuint buffer);
-typedef void (APIENTRY *glBufferData_t) (GLenum target, GLsizeiptr size,
- const GLvoid *data, GLenum usage);
-typedef void (APIENTRY *glEnableVertexAttribArray_t) (GLuint index);
-typedef void (APIENTRY *glVertexAttribPointer_t) (GLuint index, GLint size,
- GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
-typedef void (APIENTRY *glUseProgram_t) (GLuint program);
-typedef void (APIENTRY *glUniform1f_t) (GLint location, GLfloat v0);
-typedef void (APIENTRY *glUniform2f_t) (GLint location,
- GLfloat v0, GLfloat v1);
-typedef void (APIENTRY *glUniform4f_t) (GLint location,
- GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
-typedef void (APIENTRY *glValidateProgram_t) (GLuint program);
-typedef void (APIENTRY *glGetProgramInfoLog_t) (GLuint program,
- GLsizei maxLength, GLsizei *length, GLchar *infoLog);
-typedef void (APIENTRY *glBindAttribLocation_t) (GLuint program,
- GLuint index, const GLchar *name);
-typedef void (APIENTRY *glActiveTexture_t) (GLenum texture);
-#endif // __native_client__
-
-typedef GLint (APIENTRY *glGetAttribLocation_t) (GLuint program,
- const GLchar *name);
-typedef void (APIENTRY *glUniform3f_t) (GLint location,
- GLfloat v0, GLfloat v1, GLfloat v2);
-typedef GLenum (APIENTRY *glCheckFramebufferStatus_t) (GLenum target);
-typedef void (APIENTRY *glProgramUniform1f_t) (GLuint program,
- GLint location, GLfloat v0);
-typedef void (APIENTRY *glProgramUniform2f_t) (GLuint program,
- GLint location, GLfloat v0, GLfloat v1);
-typedef void (APIENTRY *glProgramUniform3f_t) (GLuint program,
- GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
-typedef void (APIENTRY *glProgramUniform4f_t) (GLuint program,
- GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
-typedef void (APIENTRY *glBindVertexBuffer_t) (GLuint bindingindex,
- GLuint buffer, GLintptr offset, GLintptr stride);
-typedef void (APIENTRY *glVertexAttribBinding_t) (GLuint attribindex,
- GLuint bindingindex);
-typedef void (APIENTRY *glVertexAttribFormat_t) (GLuint attribindex,
- GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
-typedef void (APIENTRY *glBindVertexBuffers_t) (GLuint first, GLsizei count,
- const GLuint *buffers, const GLuint *offsets, const GLsizei *strides);
-typedef GLboolean (APIENTRY *glIsBuffer_t) (GLuint buffer);
-typedef void (APIENTRY *glVertexAttribIFormat_t) (GLuint attribindex,
- GLint size, GLenum type, GLuint relativeoffset);
-typedef void (APIENTRY *glVertexAttribIPointer_t) (GLuint index, GLint size,
- GLenum type, GLsizei stride, const GLvoid * pointer);
-typedef void (APIENTRY *glInvalidateTexImage_t) (GLuint texture, GLint level);
-typedef void (APIENTRY *glCopyImageSubData_t) (GLuint srcName,
- GLenum srcTarget, GLint srcLevel,
- GLint srcX, GLint srcY, GLint srcZ,
- GLuint dstName, GLenum dstTarget, GLint dstLevel,
- GLint dstX, GLint dstY, GLint dstZ,
- GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
-typedef void (APIENTRY *glPushDebugGroup_t) (GLenum source, GLuint id,
- GLsizei length, const GLchar * message);
-typedef void (APIENTRY *glPopDebugGroup_t) (void);
-typedef void (APIENTRY *glObjectLabel_t) (GLenum identifier, GLuint name,
- GLsizei length, const GLchar *label);
-typedef void (APIENTRY *glTexStorage2D_t) (GLenum target, GLsizei levels,
- GLenum internalformat, GLsizei width, GLsizei height);
-typedef void (APIENTRY *glGenQueries_t) (GLsizei n, GLuint *ids);
-typedef void (APIENTRY *glBeginQuery_t) (GLenum target, GLuint id);
-typedef void (APIENTRY *glEndQuery_t) (GLenum target);
-typedef void (APIENTRY *glDeleteQueries_t) (GLsizei n, const GLuint *ids);
-typedef void (APIENTRY *glGetQueryObjectiv_t) (GLuint id,
- GLenum pname, GLint *params);
-typedef void (APIENTRY *glGetQueryObjectui64v_t) (GLuint id,
- GLenum pname, uint64_t *params);
-typedef void (APIENTRY *glTextureSubImage2DEXT_t) (GLuint texture,
- GLenum target, GLint level, GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height, GLenum format, GLenum type,
- const void *pixels);
-typedef void (APIENTRY *glTextureSubImage2D_t) (GLuint texture,
- GLint level, GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height, GLenum format, GLenum type,
- const void *pixels);
-typedef void (APIENTRY *glClearTexImage_t) (GLuint texture, GLint level,
- GLenum format, GLenum type, const void * data);
-typedef void (APIENTRY *glClearTexSubImage_t) (GLuint texture, GLint level,
- GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height,
- GLsizei depth, GLenum format, GLenum type, const void * data);
-
-// callback
-typedef void (APIENTRY *GLDEBUGPROC_t) (GLenum source, GLenum type, GLuint id,
- GLenum severity, GLsizei length, const GLchar *message, GLvoid *userParam);
-
-typedef void (APIENTRY *glDebugMessageCallback_t) (GLDEBUGPROC_t callback,
- const void *userParam);
-
-
-#ifdef WIN32
-typedef const char* (APIENTRY * wglGetExtensionsString_t) (HDC hdc);
-#else // WIN32
-#define CALLBACK
-#endif // WIN32
-
-#endif // USE_OPENGL
-#endif // RENDER_OPENGL_MGLTYPES_H
diff --git a/src/render/opengl/naclglfunctions.h b/src/render/opengl/naclglfunctions.h
deleted file mode 100644
index 4dc8424eb..000000000
--- a/src/render/opengl/naclglfunctions.h
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2014-2017 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 RENDER_OPENGL_NACLGLFUNCTIONS_H
-#define RENDER_OPENGL_NACLGLFUNCTIONS_H
-
-#if defined(__native_client__) && defined(USE_OPENGL)
-
-#include <ppapi/c/ppb_opengles2.h>
-
-extern const struct PPB_OpenGLES2* gles2Interface;
-extern PP_Resource gles2Context;
-
-#define mglDrawArrays(...) \
- gles2Interface->DrawArrays(gles2Context, __VA_ARGS__)
-#define mglEnableVertexAttribArray(...) \
- gles2Interface->EnableVertexAttribArray(gles2Context, __VA_ARGS__)
-#define mglVertexAttribPointer(...) \
- gles2Interface->VertexAttribPointer(gles2Context, __VA_ARGS__)
-#define mglUseProgram(...) \
- gles2Interface->UseProgram(gles2Context, __VA_ARGS__)
-#define mglViewport(...) \
- gles2Interface->Viewport(gles2Context, __VA_ARGS__)
-#define mglGenBuffers(...) \
- gles2Interface->GenBuffers(gles2Context, __VA_ARGS__)
-#define mglBindBuffer(...) \
- gles2Interface->BindBuffer(gles2Context, __VA_ARGS__)
-#define mglBufferData(...) \
- gles2Interface->BufferData(gles2Context, __VA_ARGS__)
-#define mglDeleteBuffers(...) \
- gles2Interface->DeleteBuffers(gles2Context, __VA_ARGS__)
-#define mglGetUniformLocation(...) \
- gles2Interface->GetUniformLocation(gles2Context, __VA_ARGS__)
-#define mglCreateShader(...) \
- gles2Interface->CreateShader(gles2Context, __VA_ARGS__)
-#define mglShaderSource(...) \
- gles2Interface->ShaderSource(gles2Context, __VA_ARGS__)
-#define mglCompileShader(...) \
- gles2Interface->CompileShader(gles2Context, __VA_ARGS__)
-#define mglGetShaderiv(...) \
- gles2Interface->GetShaderiv(gles2Context, __VA_ARGS__)
-#define mglAttachShader(...) \
- gles2Interface->AttachShader(gles2Context, __VA_ARGS__)
-#define mglBindAttribLocation(...) \
- gles2Interface->BindAttribLocation(gles2Context, __VA_ARGS__)
-#define mglLinkProgram(...) \
- gles2Interface->LinkProgram(gles2Context, __VA_ARGS__)
-#define mglGetProgramiv(...) \
- gles2Interface->GetProgramiv(gles2Context, __VA_ARGS__)
-#define mglClearColor(...) \
- gles2Interface->ClearColor(gles2Context, __VA_ARGS__)
-#define mglUniform1f(...) \
- gles2Interface->Uniform1f(gles2Context, __VA_ARGS__)
-#define mglUniform2f(...) \
- gles2Interface->Uniform2f(gles2Context, __VA_ARGS__)
-#define mglUniform3f(...) \
- gles2Interface->Uniform3f(gles2Context, __VA_ARGS__)
-#define mglUniform4f(...) \
- gles2Interface->Uniform4f(gles2Context, __VA_ARGS__)
-#define mglUniform1i(...) \
- gles2Interface->Uniform1i(gles2Context, __VA_ARGS__)
-#define mglUniform2i(...) \
- gles2Interface->Uniform2i(gles2Context, __VA_ARGS__)
-#define mglUniform3i(...) \
- gles2Interface->Uniform3i(gles2Context, __VA_ARGS__)
-#define mglUniform4i(...) \
- gles2Interface->Uniform4i(gles2Context, __VA_ARGS__)
-#define mglUniform1fv(...) \
- gles2Interface->Uniform1fv(gles2Context, __VA_ARGS__)
-#define mglUniform2fv(...) \
- gles2Interface->Uniform2fv(gles2Context, __VA_ARGS__)
-#define mglUniform3fv(...) \
- gles2Interface->Uniform3fv(gles2Context, __VA_ARGS__)
-#define mglUniform4fv(...) \
- gles2Interface->Uniform4fv(gles2Context, __VA_ARGS__)
-#define mglUniform1iv(...) \
- gles2Interface->Uniform1iv(gles2Context, __VA_ARGS__)
-#define mglUniform2iv(...) \
- gles2Interface->Uniform2iv(gles2Context, __VA_ARGS__)
-#define mglUniform3iv(...) \
- gles2Interface->Uniform3iv(gles2Context, __VA_ARGS__)
-#define mglUniform4iv(...) \
- gles2Interface->Uniform4iv(gles2Context, __VA_ARGS__)
-#define mglActiveTexture(...) \
- gles2Interface->ActiveTexture(gles2Context, __VA_ARGS__)
-#define mglBindTexture(...) \
- gles2Interface->BindTexture(gles2Context, __VA_ARGS__)
-#define mglEnable(...) \
- gles2Interface->Enable(gles2Context, __VA_ARGS__)
-#define mglClear(...) \
- gles2Interface->Clear(gles2Context, __VA_ARGS__)
-#define mglValidateProgram(...) \
- gles2Interface->ValidateProgram(gles2Context, __VA_ARGS__)
-#define mglDeleteProgram(...) \
- gles2Interface->DeleteProgram(gles2Context, __VA_ARGS__)
-#define mglCreateProgram() \
- gles2Interface->CreateProgram(gles2Context)
-#define mglGetProgramInfoLog(...) \
- gles2Interface->GetProgramInfoLog(gles2Context, __VA_ARGS__)
-#define mglDisable(...) \
- gles2Interface->Disable(gles2Context, __VA_ARGS__)
-#define mglHint(...) \
- gles2Interface->Hint(gles2Context, __VA_ARGS__)
-#define mglScissor(...) \
- gles2Interface->Scissor(gles2Context, __VA_ARGS__)
-#define mglEnable(...) \
- gles2Interface->Enable(gles2Context, __VA_ARGS__)
-#define mglGetIntegerv(...) \
- gles2Interface->GetIntegerv(gles2Context, __VA_ARGS__)
-#define mglGetString(...) \
- gles2Interface->GetString(gles2Context, __VA_ARGS__)
-#define mglBindFramebuffer(...) \
- gles2Interface->BindFramebuffer(gles2Context, __VA_ARGS__)
-#define mglBindRenderbuffer(...) \
- gles2Interface->BindRenderbuffer(gles2Context, __VA_ARGS__)
-#define mglBlendColor(...) \
- gles2Interface->BlendColor(gles2Context, __VA_ARGS__)
-#define mglBlendEquation(...) \
- gles2Interface->BlendEquation(gles2Context, __VA_ARGS__)
-#define mglBlendEquationSeparate(...) \
- gles2Interface->BlendEquationSeparate(gles2Context, __VA_ARGS__)
-#define mglBlendFunc(...) \
- gles2Interface->BlendFunc(gles2Context, __VA_ARGS__)
-#define mglBlendFuncSeparate(...) \
- gles2Interface->BlendFuncSeparate(gles2Context, __VA_ARGS__)
-#define mglBufferSubData(...) \
- gles2Interface->BufferSubData(gles2Context, __VA_ARGS__)
-#define mglCheckFramebufferStatus(...) \
- gles2Interface->CheckFramebufferStatus(gles2Context, __VA_ARGS__)
-#define mglClearDepthf(...) \
- gles2Interface->ClearDepthf(gles2Context, __VA_ARGS__)
-#define mglClearStencil(...) \
- gles2Interface->ClearStencil(gles2Context, __VA_ARGS__)
-#define mglColorMask(...) \
- gles2Interface->ColorMask(gles2Context, __VA_ARGS__)
-#define mglCompressedTexImage2D(...) \
- gles2Interface->CompressedTexImage2D(gles2Context, __VA_ARGS__)
-#define mglCompressedTexSubImage2D(...) \
- gles2Interface->CompressedTexSubImage2D(gles2Context, __VA_ARGS__)
-#define mglCopyTexImage2D(...) \
- gles2Interface->CopyTexImage2D(gles2Context, __VA_ARGS__)
-#define mglCopyTexSubImage2D(...) \
- gles2Interface->CopyTexSubImage2D(gles2Context, __VA_ARGS__)
-#define mglCullFace(...) \
- gles2Interface->CullFace(gles2Context, __VA_ARGS__)
-#define mglDeleteFramebuffers(...) \
- gles2Interface->DeleteFramebuffers(gles2Context, __VA_ARGS__)
-#define mglDeleteRenderbuffers(...) \
- gles2Interface->DeleteRenderbuffers(gles2Context, __VA_ARGS__)
-#define mglDeleteShader(...) \
- gles2Interface->DeleteShader(gles2Context, __VA_ARGS__)
-#define mglDeleteTextures(...) \
- gles2Interface->DeleteTextures(gles2Context, __VA_ARGS__)
-#define mglDepthFunc(...) \
- gles2Interface->DepthFunc(gles2Context, __VA_ARGS__)
-#define mglDepthMask(...) \
- gles2Interface->DepthMask(gles2Context, __VA_ARGS__)
-#define mglDepthRangef(...) \
- gles2Interface->DepthRangef(gles2Context, __VA_ARGS__)
-#define mglDetachShader(...) \
- gles2Interface->DetachShader(gles2Context, __VA_ARGS__)
-#define mglDisableVertexAttribArray(...) \
- gles2Interface->DisableVertexAttribArray(gles2Context, __VA_ARGS__)
-#define mglDrawElements(...) \
- gles2Interface->DrawElements(gles2Context, __VA_ARGS__)
-#define mglFinish(...) \
- gles2Interface->Finish(gles2Context, __VA_ARGS__)
-#define mglFlush(...) \
- gles2Interface->Flush(gles2Context, __VA_ARGS__)
-#define mglFramebufferRenderbuffer(...) \
- gles2Interface->FramebufferRenderbuffer(gles2Context, __VA_ARGS__)
-#define mglFramebufferTexture2D(...) \
- gles2Interface->FramebufferTexture2D(gles2Context, __VA_ARGS__)
-#define mglFrontFace(...) \
- gles2Interface->FrontFace(gles2Context, __VA_ARGS__)
-#define mglGenerateMipmap(...) \
- gles2Interface->GenerateMipmap(gles2Context, __VA_ARGS__)
-#define mglGenFramebuffers(...) \
- gles2Interface->GenFramebuffers(gles2Context, __VA_ARGS__)
-#define mglGenRenderbuffers(...) \
- gles2Interface->GenRenderbuffers(gles2Context, __VA_ARGS__)
-#define mglGenTextures(...) \
- gles2Interface->GenTextures(gles2Context, __VA_ARGS__)
-#define mglGetActiveAttrib(...) \
- gles2Interface->GetActiveAttrib(gles2Context, __VA_ARGS__)
-#define mglGetActiveUniform(...) \
- gles2Interface->GetActiveUniform(gles2Context, __VA_ARGS__)
-#define mglGetAttachedShaders(...) \
- gles2Interface->GetAttachedShaders(gles2Context, __VA_ARGS__)
-#define mglGetAttribLocation(...) \
- gles2Interface->GetAttribLocation(gles2Context, __VA_ARGS__)
-#define mglGetBooleanv(...) \
- gles2Interface->GetBooleanv(gles2Context, __VA_ARGS__)
-#define mglGetBufferParameteriv(...) \
- gles2Interface->GetBufferParameteriv(gles2Context, __VA_ARGS__)
-#define mglGetError(...) \
- gles2Interface->GetError(gles2Context, __VA_ARGS__)
-#define mglGetFloatv(...) \
- gles2Interface->GetFloatv(gles2Context, __VA_ARGS__)
-#define mglGetFramebufferAttachmentParameteriv(...) \
- gles2Interface->GetFramebufferAttachmentParameteriv(gles2Context, \
- __VA_ARGS__)
-#define mglGetIntegerv(...) \
- gles2Interface->GetIntegerv(gles2Context, __VA_ARGS__)
-#define mglGetRenderbufferParameteriv(...) \
- gles2Interface->GetRenderbufferParameteriv(gles2Context, __VA_ARGS__)
-#define mglGetShaderInfoLog(...) \
- gles2Interface->GetShaderInfoLog(gles2Context, __VA_ARGS__)
-#define mglGetShaderPrecisionFormat(...) \
- gles2Interface->GetShaderPrecisionFormat(gles2Context, __VA_ARGS__)
-#define mglGetShaderSource(...) \
- gles2Interface->GetShaderSource(gles2Context, __VA_ARGS__)
-#define mglGetTexParameterfv(...) \
- gles2Interface->GetTexParameterfv(gles2Context, __VA_ARGS__)
-#define mglGetTexParameteriv(...) \
- gles2Interface->GetTexParameteriv(gles2Context, __VA_ARGS__)
-#define mglGetUniformfv(...) \
- gles2Interface->GetUniformfv(gles2Context, __VA_ARGS__)
-#define mglGetUniformiv(...) \
- gles2Interface->GetUniformiv(gles2Context, __VA_ARGS__)
-#define mglGetVertexAttribfv(...) \
- gles2Interface->GetVertexAttribfv(gles2Context, __VA_ARGS__)
-#define mglGetVertexAttribiv(...) \
- gles2Interface->GetVertexAttribiv(gles2Context, __VA_ARGS__)
-#define mglGetVertexAttribPointerv(...) \
- gles2Interface->GetVertexAttribPointerv(gles2Context, __VA_ARGS__)
-#define mglIsBuffer(...) \
- gles2Interface->IsBuffer(gles2Context, __VA_ARGS__)
-#define mglIsEnabled(...) \
- gles2Interface->IsEnabled(gles2Context, __VA_ARGS__)
-#define mglIsFramebuffer(...) \
- gles2Interface->IsFramebuffer(gles2Context, __VA_ARGS__)
-#define mglIsProgram(...) \
- gles2Interface->IsProgram(gles2Context, __VA_ARGS__)
-#define mglIsRenderbuffer(...) \
- gles2Interface->IsRenderbuffer(gles2Context, __VA_ARGS__)
-#define mglIsShader(...) \
- gles2Interface->IsShader(gles2Context, __VA_ARGS__)
-#define mglIsTexture(...) \
- gles2Interface->IsTexture(gles2Context, __VA_ARGS__)
-#define mglLineWidth(...) \
- gles2Interface->LineWidth(gles2Context, __VA_ARGS__)
-#define mglPixelStorei(...) \
- gles2Interface->PixelStorei(gles2Context, __VA_ARGS__)
-#define mglPolygonOffset(...) \
- gles2Interface->PolygonOffset(gles2Context, __VA_ARGS__)
-#define mglReadPixels(...) \
- gles2Interface->ReadPixels(gles2Context, __VA_ARGS__)
-#define mglReleaseShaderCompiler(...) \
- gles2Interface->ReleaseShaderCompiler(gles2Context, __VA_ARGS__)
-#define mglRenderbufferStorage(...) \
- gles2Interface->RenderbufferStorage(gles2Context, __VA_ARGS__)
-#define mglSampleCoverage(...) \
- gles2Interface->SampleCoverage(gles2Context, __VA_ARGS__)
-#define mglShaderBinary(...) \
- gles2Interface->ShaderBinary(gles2Context, __VA_ARGS__)
-#define mglStencilFunc(...) \
- gles2Interface->StencilFunc(gles2Context, __VA_ARGS__)
-#define mglStencilFuncSeparate(...) \
- gles2Interface->StencilFuncSeparate(gles2Context, __VA_ARGS__)
-#define mglStencilMask(...) \
- gles2Interface->StencilMask(gles2Context, __VA_ARGS__)
-#define mglStencilMaskSeparate(...) \
- gles2Interface->StencilMaskSeparate(gles2Context, __VA_ARGS__)
-#define mglStencilOp(...) \
- gles2Interface->StencilOp(gles2Context, __VA_ARGS__)
-#define mglStencilOpSeparate(...) \
- gles2Interface->StencilOpSeparate(gles2Context, __VA_ARGS__)
-#define mglTexImage2D(...) \
- gles2Interface->TexImage2D(gles2Context, __VA_ARGS__)
-#define mglTexParameterf(...) \
- gles2Interface->TexParameterf(gles2Context, __VA_ARGS__)
-#define mglTexParameterfv(...) \
- gles2Interface->TexParameterfv(gles2Context, __VA_ARGS__)
-#define mglTexParameteri(...) \
- gles2Interface->TexParameteri(gles2Context, __VA_ARGS__)
-#define mglTexParameteriv(...) \
- gles2Interface->TexParameteriv(gles2Context, __VA_ARGS__)
-#define mglTexSubImage2D(...) \
- gles2Interface->TexSubImage2D(gles2Context, __VA_ARGS__)
-#define mglUniformMatrix2fv(...) \
- gles2Interface->UniformMatrix2fv(gles2Context, __VA_ARGS__)
-#define mglUniformMatrix3fv(...) \
- gles2Interface->UniformMatrix3fv(gles2Context, __VA_ARGS__)
-#define mglUniformMatrix4fv(...) \
- gles2Interface->UniformMatrix4fv(gles2Context, __VA_ARGS__)
-#define mglVertexAttrib1f(...) \
- gles2Interface->VertexAttrib1f(gles2Context, __VA_ARGS__)
-#define mglVertexAttrib2f(...) \
- gles2Interface->VertexAttrib2f(gles2Context, __VA_ARGS__)
-#define mglVertexAttrib3f(...) \
- gles2Interface->VertexAttrib3f(gles2Context, __VA_ARGS__)
-#define mglVertexAttrib4f(...) \
- gles2Interface->VertexAttrib4f(gles2Context, __VA_ARGS__)
-#define mglVertexAttrib1fv(...) \
- gles2Interface->VertexAttrib1fv(gles2Context, __VA_ARGS__)
-#define mglVertexAttrib2fv(...) \
- gles2Interface->VertexAttrib2fv(gles2Context, __VA_ARGS__)
-#define mglVertexAttrib3fv(...) \
- gles2Interface->VertexAttrib3fv(gles2Context, __VA_ARGS__)
-#define mglVertexAttrib4fv(...) \
- gles2Interface->VertexAttrib4fv(gles2Context, __VA_ARGS__)
-
-#endif // defined(__native_client__) && defined(USE_OPENGL)
-#endif // RENDER_OPENGL_NACLGLFUNCTIONS_H
diff --git a/src/render/opengl/opengldebug.h b/src/render/opengl/opengldebug.h
deleted file mode 100644
index 4afe25491..000000000
--- a/src/render/opengl/opengldebug.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2014-2017 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 RENDER_OPENGL_OPENGLDEBUG_H
-#define RENDER_OPENGL_OPENGLDEBUG_H
-
-#include "render/opengl/mgl.h"
-
-RENDER_OPENGL_MGL_H
-
-#if defined(DEBUG_OPENGL) && defined(USE_OPENGL)
-#define GLDEBUG_START(text) if (mglPushGroupMarker) \
- mglPushGroupMarker(sizeof(text), text);
-#define GLDEBUG_END() if (mglPopGroupMarker) \
- mglPopGroupMarker();
-#else // defined(DEBUG_OPENGL) && defined(USE_OPENGL)
-#define GLDEBUG_START(text)
-#define GLDEBUG_END()
-#endif // defined(DEBUG_OPENGL) && defined(USE_OPENGL)
-
-#endif // RENDER_OPENGL_OPENGLDEBUG_H
diff --git a/src/render/openglgraphicsdef.hpp b/src/render/openglgraphicsdef.hpp
deleted file mode 100644
index 7a4fd4e1e..000000000
--- a/src/render/openglgraphicsdef.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-#define RENDER_OPENGLGRAPHICSDEF_HPP
-
-public:
- void drawRectangle(const Rect &restrict rect,
- const bool filled) restrict2;
-
- void drawNet(const int x1, const int y1,
- const int x2, const int y2,
- const int width, const int height) restrict2 override final;
-
- static void dumpSettings();
-
- int getMemoryUsage() restrict2 A_WARN_UNUSED;
-
- void updateTextureFormat() restrict2;
-
- bool isAllowScale() const restrict2 noexcept2 override final
- { return true; }
-
- void clearScreen() const restrict2 override final;
-
- void deleteArrays() restrict2 override final;
-
- static void bindTexture(const GLenum target, const GLuint texture);
-
- static GLuint mTextureBinded;
-
-protected:
- void enableTexturingAndBlending() restrict2;
-
- void disableTexturingAndBlending() restrict2;
-
-private:
- void inline setColorAlpha(const float alpha) restrict2 A_INLINE;
-
- void inline restoreColor() restrict2 A_INLINE;
diff --git a/src/render/openglgraphicsdef1.hpp b/src/render/openglgraphicsdef1.hpp
deleted file mode 100644
index ba921494d..000000000
--- a/src/render/openglgraphicsdef1.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-#define RENDER_OPENGLGRAPHICSDEF1_HPP
-
-public:
- void setColor(const Color &restrict color) override final
- {
- mColor = color;
- mColorAlpha = (color.a != 255);
- }
diff --git a/src/render/openglgraphicsdefadvanced.hpp b/src/render/openglgraphicsdefadvanced.hpp
deleted file mode 100644
index 4205b525f..000000000
--- a/src/render/openglgraphicsdefadvanced.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-#define RENDER_OPENGLGRAPHICSDEFADVANCED_HPP
-
-public:
- inline void drawVertexes(const OpenGLGraphicsVertexes &restrict ogl)
- restrict2 A_INLINE;
-
- void initArrays(const int vertCount) restrict2 override final;
-
-#ifdef DEBUG_DRAW_CALLS
- unsigned int getDrawCalls() restrict2 const noexcept2
- { return mLastDrawCalls; }
-
- static unsigned int mDrawCalls;
-
- static unsigned int mLastDrawCalls;
-#endif
-
-protected:
- void debugBindTexture(const Image *restrict const image) restrict2;
-
- void deleteArraysInternal() restrict2;
diff --git a/src/render/openglx/mglx.cpp b/src/render/openglx/mglx.cpp
deleted file mode 100644
index a02c8e326..000000000
--- a/src/render/openglx/mglx.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 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/>.
- */
-
-#if defined(USE_OPENGL) && defined(USE_X11)
-
-#include "render/openglx/mglx.h"
-
-#include "debug.h"
-
-#define defName(name) name##_t m##name = nullptr
-
-// include function defines
-#include "render/openglx/mglx.hpp"
-
-MGLX_DEFINE
-
-#endif // defined(USE_OPENGL) && defined(USE_X11)
diff --git a/src/render/openglx/mglx.h b/src/render/openglx/mglx.h
deleted file mode 100644
index 3f591f26f..000000000
--- a/src/render/openglx/mglx.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 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 RENDER_OPENGLX_MGLX_H
-#define RENDER_OPENGLX_MGLX_H
-
-#if defined(USE_OPENGL) && defined(USE_X11)
-
-#include "render/openglx/mglxtypes.h"
-
-#define defName(name) extern name##_t m##name
-#include "render/openglx/mglx.hpp"
-MGLX_DEFINE
-#undef defName
-#undef MGLX_DEFINE
-
-#endif // defined(USE_OPENGL) && defined(USE_X11)
-#endif // RENDER_OPENGLX_MGLX_H
diff --git a/src/render/openglx/mglx.hpp b/src/render/openglx/mglx.hpp
deleted file mode 100644
index 0e3e2b9ac..000000000
--- a/src/render/openglx/mglx.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 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/>.
- */
-
-#define MGLX_DEFINE
-
-defName(glXCreateContext);
-defName(glXGetCurrentContext);
-defName(glXCreateContextAttribs);
-defName(glXChooseFBConfig);
-defName(glXDestroyContext);
-defName(glXMakeCurrent);
-defName(glXSwapBuffers);
diff --git a/src/render/openglx/mglxinit.cpp b/src/render/openglx/mglxinit.cpp
deleted file mode 100644
index 10eb93567..000000000
--- a/src/render/openglx/mglxinit.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 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/>.
- */
-
-#if defined(USE_OPENGL) && defined(USE_X11)
-
-#include "render/openglx/mglxinit.h"
-
-#include "render/opengl/mglfunctions.h"
-
-#include "render/openglx/mglx.h"
-
-#include "debug.h"
-
-void Glx::initFunctions()
-{
- assignFunction(glXCreateContext);
- assignFunction(glXGetCurrentContext);
- assignFunctionARB(glXCreateContextAttribs);
- assignFunction(glXChooseFBConfig);
- assignFunction(glXDestroyContext);
- assignFunction(glXMakeCurrent);
- assignFunction(glXSwapBuffers);
-}
-
-#endif // defined(USE_OPENGL) && defined(USE_X11)
diff --git a/src/render/openglx/mglxinit.h b/src/render/openglx/mglxinit.h
deleted file mode 100644
index 96704821e..000000000
--- a/src/render/openglx/mglxinit.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 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 RENDER_OPENGLX_MGLXINIT_H
-#define RENDER_OPENGLX_MGLXINIT_H
-
-#if defined(USE_OPENGL) && defined(USE_X11)
-
-namespace Glx
-{
- void initFunctions();
-} // namespace Glx
-
-#endif // defined(USE_OPENGL) && defined(USE_X11)
-#endif // RENDER_OPENGLX_MGLXINIT_H
diff --git a/src/render/openglx/mglxtypes.h b/src/render/openglx/mglxtypes.h
deleted file mode 100644
index b9aa0a55d..000000000
--- a/src/render/openglx/mglxtypes.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2012-2017 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 RENDER_OPENGLX_MGLXTYPES_H
-#define RENDER_OPENGLX_MGLXTYPES_H
-
-#if defined(USE_OPENGL) && defined(USE_X11)
-
-#include <GL/glx.h>
-
-typedef void *(*glXCreateContext_t) (Display *dpy, XVisualInfo *vis,
- void *shareList, bool direct);
-typedef void *(*glXGetCurrentContext_t) (void);
-typedef void *(*glXCreateContextAttribs_t) (Display *dpy, GLXFBConfig config,
- void *share_context, bool direct, const int *attrib_list);
-typedef GLXFBConfig *(*glXChooseFBConfig_t) (Display *dpy, int screen,
- const int *attrib_list, int *nelements);
-typedef void (*glXDestroyContext_t) (Display *dpy, void *ctx);
-typedef bool (*glXMakeCurrent_t) (Display *dpy,
- GLXDrawable drawable, void *ctx);
-typedef void (*glXSwapBuffers_t) (Display *dpy, GLXDrawable drawable);
-
-#endif // USE_OPENGL
-#endif // RENDER_OPENGLX_MGLXTYPES_H
diff --git a/src/render/renderers.cpp b/src/render/renderers.cpp
deleted file mode 100644
index 0f8baf6e4..000000000
--- a/src/render/renderers.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2013-2017 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/>.
- */
-
-#include "render/renderers.h"
-
-#include "debug.h"
-
-static RenderType getDefault() noexcept2 A_CONST;
-
-static RenderType getDefault() noexcept2
-{
-#ifdef USE_OPENGL
-#ifdef ANDROID
- return RENDER_GLES_OPENGL;
-#else // ANDROID
-
- return RENDER_NORMAL_OPENGL;
-#endif // ANDROID
-#else // USE_OPENGL
-
- return RENDER_SOFTWARE;
-#endif // USE_OPENGL
-}
-
-RenderType intToRenderType(const int mode) noexcept2
-{
- if (mode < 0 || mode >= RENDER_LAST)
- return getDefault();
-
- if (mode != RENDER_SOFTWARE
-#if defined(USE_OPENGL)
-
-// with OpenGL start
-#if defined(ANDROID)
-
-// with OpenGL + with ANDROID start
-#if defined(USE_SDL2)
- && mode != RENDER_GLES_OPENGL
- && mode != RENDER_SDL2_DEFAULT)
-#else // defined(USE_SDL2)
-
- && mode != RENDER_GLES_OPENGL)
-#endif // defined(USE_SDL2)
-// with OpenGL + with ANDROID end
-
-#elif defined(__native_client__)
-
-// with OpenGL + with nacl start
-#if defined(USE_SDL2)
- && mode != RENDER_SAFE_OPENGL
- && mode != RENDER_GLES2_OPENGL
- && mode != RENDER_SDL2_DEFAULT)
-#else // defined(USE_SDL2)
-
- && mode != RENDER_SAFE_OPENGL
- && mode != RENDER_GLES2_OPENGL)
-#endif // defined(USE_SDL2)
-// with OpenGL + with nacl end
-
-#else // defined(ANDROID)
-
-// with OpenGL + without ANDROID start
-#if defined(USE_SDL2)
- && mode != RENDER_NORMAL_OPENGL
- && mode != RENDER_MODERN_OPENGL
- && mode != RENDER_SAFE_OPENGL
- && mode != RENDER_GLES_OPENGL
- && mode != RENDER_GLES2_OPENGL
- && mode != RENDER_SDL2_DEFAULT)
-#else // defined(USE_SDL2)
-
- && mode != RENDER_NORMAL_OPENGL
- && mode != RENDER_MODERN_OPENGL
- && mode != RENDER_SAFE_OPENGL
- && mode != RENDER_GLES_OPENGL
- && mode != RENDER_GLES2_OPENGL)
-#endif // defined(USE_SDL2)
-// with OpenGL + without ANDROID end
-
-#endif // defined(ANDROID)
-// with OpenGL end
-
-#else // defined(USE_OPENGL)
-
-// without OpenGL start
-#if defined(USE_SDL2)
- && mode != RENDER_SDL2_DEFAULT)
-#elif !defined(USE_SDL2)
- )
-#endif // defined(USE_SDL2)
-// without OpenGL end
-
-#endif // defined(USE_OPENGL)
-
- {
- return getDefault();
- }
-
- return static_cast<RenderType>(mode);
-}
diff --git a/src/render/renderers.h b/src/render/renderers.h
deleted file mode 100644
index f2f5d3928..000000000
--- a/src/render/renderers.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2013-2017 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 RENDER_RENDERERS_H
-#define RENDER_RENDERERS_H
-
-#include "enums/render/rendertype.h"
-
-#include "localconsts.h"
-
-RenderType intToRenderType(const int mode) noexcept2 A_CONST;
-
-#define isBatchDrawRenders(val) ((val) != RENDER_SAFE_OPENGL)
-
-#endif // RENDER_RENDERERS_H
diff --git a/src/render/rendererslistsdl.h b/src/render/rendererslistsdl.h
deleted file mode 100644
index 8fc833247..000000000
--- a/src/render/rendererslistsdl.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2013-2017 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 RENDER_RENDERERSLISTSDL_H
-#define RENDER_RENDERERSLISTSDL_H
-
-#ifdef USE_SDL2
-#include "render/rendererslistsdl2.h"
-RENDER_RENDERERSLISTSDL2_H
-
-#else // USE_SDL2
-
-#include "utils/gettext.h"
-
-#include "render/renderers.h"
-
-#ifdef USE_OPENGL
-#ifdef ANDROID
-// defined OPENGL ANDROID
-
-// map for index to RenderType
-const RenderType indexToRender[] =
-{
- RENDER_SOFTWARE,
- RENDER_GLES_OPENGL
-};
-
-const char *OPENGL_NAME[] =
-{
- // TRANSLATORS: draw backend
- N_("Software"),
- // TRANSLATORS: draw backend
- N_("Mobile OpenGL ES")
-};
-
-const int renderModesListSize = 2;
-
-const int renderToIndex[] =
-{
- 0, // RENDER_SOFTWARE
- 1, // RENDER_NORMAL_OPENGL
- 1, // RENDER_SAFE_OPENGL
- 1, // RENDER_GLES_OPENGL
- 1, // RENDER_SDL2_DEFAULT
- 1, // RENDER_MODERN_OPENGL
- 1 // RENDER_GLES2_OPENGL
-};
-
-#elif defined(__native_client__)
-// defined OPENGL nacl
-
-// map for index to RenderType
-const RenderType indexToRender[] =
-{
- RENDER_SOFTWARE,
- RENDER_SAFE_OPENGL,
- RENDER_GLES2_OPENGL
-};
-
-const char *OPENGL_NAME[] =
-{
- // TRANSLATORS: draw backend
- N_("Software"),
- // TRANSLATORS: draw backend
- N_("Safe OpenGL"),
- // TRANSLATORS: draw backend
- N_("Mobile OpenGL ES 2"),
-};
-
-const int renderModesListSize = 3;
-
-const int renderToIndex[] =
-{
- 0, // RENDER_SOFTWARE
- 2, // RENDER_NORMAL_OPENGL
- 1, // RENDER_SAFE_OPENGL
- 2, // RENDER_GLES_OPENGL
- 0, // RENDER_SDL2_DEFAULT
- 2, // RENDER_MODERN_OPENGL
- 2 // RENDER_GLES2_OPENGL
-};
-
-#else // ANDROID or nacl
-// defined OPENGL
-
-// map for index to RenderType
-const RenderType indexToRender[] =
-{
- RENDER_SOFTWARE,
- RENDER_NORMAL_OPENGL,
- RENDER_SAFE_OPENGL,
- RENDER_GLES_OPENGL,
- RENDER_MODERN_OPENGL,
- RENDER_GLES2_OPENGL
-};
-
-const char *OPENGL_NAME[] =
-{
- // TRANSLATORS: draw backend
- N_("Software"),
- // TRANSLATORS: draw backend
- N_("Normal OpenGL"),
- // TRANSLATORS: draw backend
- N_("Safe OpenGL"),
- // TRANSLATORS: draw backend
- N_("Mobile OpenGL ES"),
- // TRANSLATORS: draw backend
- N_("Modern OpenGL"),
- // TRANSLATORS: draw backend
- N_("Mobile OpenGL ES 2"),
-};
-
-const int renderModesListSize = 6;
-
-const int renderToIndex[] =
-{
- 0, // RENDER_SOFTWARE
- 1, // RENDER_NORMAL_OPENGL
- 2, // RENDER_SAFE_OPENGL
- 3, // RENDER_GLES_OPENGL
- 0, // RENDER_SDL2_DEFAULT
- 4, // RENDER_MODERN_OPENGL
- 5 // RENDER_GLES2_OPENGL
-};
-
-#endif // ANDROID
-
-#else // USE_OPENGL
-// no defines
-
-// map for index to RenderType
-const RenderType indexToRender[] =
-{
- RENDER_SOFTWARE
-};
-
-const char *OPENGL_NAME[] =
-{
- // TRANSLATORS: draw backend
- N_("Software")
-};
-
-const int renderModesListSize = 1;
-
-const int renderToIndex[] =
-{
- 0, // RENDER_SOFTWARE
- 0, // RENDER_NORMAL_OPENGL
- 0, // RENDER_SAFE_OPENGL
- 0, // RENDER_GLES_OPENGL
- 0, // RENDER_SDL2_DEFAULT
- 0, // RENDER_MODERN_OPENGL
- 0 // RENDER_GLES2_OPENGL
-};
-
-#endif // USE_OPENGL
-
-#endif // USE_SDL2
-#endif // RENDER_RENDERERSLISTSDL_H
diff --git a/src/render/rendererslistsdl2.h b/src/render/rendererslistsdl2.h
deleted file mode 100644
index 22a975cfa..000000000
--- a/src/render/rendererslistsdl2.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2013-2017 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 RENDER_RENDERERSLISTSDL2_H
-#define RENDER_RENDERERSLISTSDL2_H
-
-#ifdef USE_SDL2
-
-#include "utils/gettext.h"
-
-#include "render/renderers.h"
-
-#ifdef USE_OPENGL
-#ifdef ANDROID
-// defined OPENGL ANDROID
-
-// map for index to RenderType
-const RenderType indexToRender[] =
-{
- RENDER_SOFTWARE,
- RENDER_SDL2_DEFAULT,
- RENDER_GLES_OPENGL
-};
-
-const char *OPENGL_NAME[] =
-{
- // TRANSLATORS: draw backend
- N_("Software"),
- // TRANSLATORS: draw backend
- N_("SDL2 default"),
- // TRANSLATORS: draw backend
- N_("Mobile OpenGL ES")
-};
-
-const int renderModesListSize = 3;
-
-const int renderToIndex[] =
-{
- 0, // RENDER_SOFTWARE
- 2, // RENDER_NORMAL_OPENGL
- 2, // RENDER_SAFE_OPENGL
- 2, // RENDER_GLES_OPENGL
- 1, // RENDER_SDL2_DEFAULT
- 2, // RENDER_MODERN_OPENGL
- 2 // RENDER_GLES_OPENGL
-};
-
-#elif defined(__native_client__)
-// defined OPENGL nacl
-
-// map for index to RenderType
-const RenderType indexToRender[] =
-{
- RENDER_SOFTWARE,
- RENDER_SDL2_DEFAULT,
- RENDER_SAFE_OPENGL,
- RENDER_GLES2_OPENGL
-};
-
-const char *OPENGL_NAME[] =
-{
- // TRANSLATORS: draw backend
- N_("Software"),
- // TRANSLATORS: draw backend
- N_("SDL2 default"),
- // TRANSLATORS: draw backend
- N_("Safe OpenGL"),
- // TRANSLATORS: draw backend
- N_("Mobile OpenGL ES 2")
-};
-
-const int renderModesListSize = 4;
-
-const int renderToIndex[] =
-{
- 0, // RENDER_SOFTWARE
- 3, // RENDER_NORMAL_OPENGL
- 2, // RENDER_SAFE_OPENGL
- 3, // RENDER_GLES_OPENGL
- 1, // RENDER_SDL2_DEFAULT
- 3, // RENDER_MODERN_OPENGL
- 3 // RENDER_GLES2_OPENGL
-};
-
-#else // ANDROID or nacl
-// defined OPENGL
-
-// map for index to RenderType
-const RenderType indexToRender[] =
-{
- RENDER_SOFTWARE,
- RENDER_SDL2_DEFAULT,
- RENDER_NORMAL_OPENGL,
- RENDER_SAFE_OPENGL,
- RENDER_GLES_OPENGL,
- RENDER_MODERN_OPENGL,
- RENDER_GLES2_OPENGL
-};
-
-const char *OPENGL_NAME[] =
-{
- // TRANSLATORS: draw backend
- N_("Software"),
- // TRANSLATORS: draw backend
- N_("SDL2 default"),
- // TRANSLATORS: draw backend
- N_("Normal OpenGL"),
- // TRANSLATORS: draw backend
- N_("Safe OpenGL"),
- // TRANSLATORS: draw backend
- N_("Mobile OpenGL ES"),
- // TRANSLATORS: draw backend
- N_("Modern OpenGL"),
- // TRANSLATORS: draw backend
- N_("Mobile OpenGL ES 2")
-};
-
-const int renderModesListSize = 7;
-
-const int renderToIndex[] =
-{
- 0, // RENDER_SOFTWARE
- 2, // RENDER_NORMAL_OPENGL
- 3, // RENDER_SAFE_OPENGL
- 4, // RENDER_GLES_OPENGL
- 1, // RENDER_SDL2_DEFAULT
- 5, // RENDER_MODERN_OPENGL
- 6 // RENDER_GLES2_OPENGL
-};
-
-#endif // ANDROID
-
-#else // USE_OPENGL
-// no defines
-
-// map for index to RenderType
-const RenderType indexToRender[] =
-{
- RENDER_SOFTWARE,
- RENDER_SDL2_DEFAULT
-};
-
-const char *OPENGL_NAME[] =
-{
- // TRANSLATORS: draw backend
- N_("Software"),
- // TRANSLATORS: draw backend
- N_("SDL2 default")
-};
-
-const int renderModesListSize = 2;
-
-const int renderToIndex[] =
-{
- 0, // RENDER_SOFTWARE
- 0, // RENDER_NORMAL_OPENGL
- 0, // RENDER_SAFE_OPENGL
- 0, // RENDER_GLES_OPENGL
- 1, // RENDER_SDL2_DEFAULT
- 0, // RENDER_MODERN_OPENGL
- 0 // RENDER_GLES2_OPENGL
-};
-
-#endif // USE_OPENGL
-
-#endif // USE_SDL2
-#endif // RENDER_RENDERERSLISTSDL2_H
diff --git a/src/render/safeopenglgraphics.cpp b/src/render/safeopenglgraphics.cpp
deleted file mode 100644
index e65ff94b0..000000000
--- a/src/render/safeopenglgraphics.cpp
+++ /dev/null
@@ -1,763 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-#if defined USE_OPENGL && !defined ANDROID
-#include "render/safeopenglgraphics.h"
-
-#ifdef DEBUG_OPENGL
-#include "render/opengl/mgl.h"
-#endif // DEBUG_OPENGL
-
-#include "resources/imagerect.h"
-#include "resources/safeopenglimagehelper.h"
-
-#include "resources/image/image.h"
-
-#include "utils/sdlcheckutils.h"
-
-#include "debug.h"
-
-GLuint SafeOpenGLGraphics::mTextureBinded = 0;
-
-SafeOpenGLGraphics::SafeOpenGLGraphics() :
- mTexture(false),
- mIsByteColor(false),
- mByteColor(),
- mFloatColor(1.0F),
- mColorAlpha(false),
- mFbo()
-{
- mOpenGL = RENDER_SAFE_OPENGL;
- mName = "safe OpenGL";
-}
-
-SafeOpenGLGraphics::~SafeOpenGLGraphics()
-{
-}
-
-void SafeOpenGLGraphics::deleteArrays() restrict2
-{
-}
-
-bool SafeOpenGLGraphics::setVideoMode(const int w, const int h,
- const int scale,
- const int bpp,
- const bool fs,
- const bool hwaccel,
- const bool resize,
- const bool noFrame,
- const bool allowHighDPI) restrict2
-{
- setMainFlags(w, h,
- scale,
- bpp,
- fs,
- hwaccel,
- resize,
- noFrame,
- allowHighDPI);
-
- return setOpenGLMode();
-}
-
-static inline void drawQuad(const Image *restrict image,
- const int srcX,
- const int srcY,
- const int dstX,
- const int dstY,
- const int width,
- const int height) A_NONNULL(1) A_INLINE;
-
-static inline void drawQuad(const Image *restrict image,
- const int srcX,
- const int srcY,
- const int dstX,
- const int dstY,
- const int width,
- const int height)
-{
- if (SafeOpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
- // Find OpenGL normalized texture coordinates.
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
- const float texX2 = static_cast<float>(srcX + width) / tw;
- const float texY2 = static_cast<float>(srcY + height) / th;
-
- glTexCoord2f(texX1, texY1);
- glVertex2i(dstX, dstY);
- glTexCoord2f(texX2, texY1);
- glVertex2i(dstX + width, dstY);
- glTexCoord2f(texX2, texY2);
- glVertex2i(dstX + width, dstY + height);
- glTexCoord2f(texX1, texY2);
- glVertex2i(dstX, dstY + height);
- }
- else
- {
- glTexCoord2i(srcX, srcY);
- glVertex2i(dstX, dstY);
- glTexCoord2i(srcX + width, srcY);
- glVertex2i(dstX + width, dstY);
- glTexCoord2i(srcX + width, srcY + height);
- glVertex2i(dstX + width, dstY + height);
- glTexCoord2i(srcX, srcY + height);
- glVertex2i(dstX, dstY + height);
- }
-}
-
-static inline void drawRescaledQuad(const Image *restrict const image,
- const int srcX, const int srcY,
- const int dstX, const int dstY,
- const int width, const int height,
- const int desiredWidth,
- const int desiredHeight)
- A_NONNULL(1) A_INLINE;
-
-static inline void drawRescaledQuad(const Image *restrict const image,
- const int srcX, const int srcY,
- const int dstX, const int dstY,
- const int width, const int height,
- const int desiredWidth,
- const int desiredHeight)
-{
- if (SafeOpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- const float tw = static_cast<float>(image->mTexWidth);
- const float th = static_cast<float>(image->mTexHeight);
- // Find OpenGL normalized texture coordinates.
- const float texX1 = static_cast<float>(srcX) / tw;
- const float texY1 = static_cast<float>(srcY) / th;
- const float texX2 = static_cast<float>(srcX + width) / tw;
- const float texY2 = static_cast<float>(srcY + height) / th;
-
- glTexCoord2f(texX1, texY1);
- glVertex2i(dstX, dstY);
- glTexCoord2f(texX2, texY1);
- glVertex2i(dstX + desiredWidth, dstY);
- glTexCoord2f(texX2, texY2);
- glVertex2i(dstX + desiredWidth, dstY + desiredHeight);
- glTexCoord2f(texX1, texY2);
- glVertex2i(dstX, dstY + desiredHeight);
- }
- else
- {
- glTexCoord2i(srcX, srcY);
- glVertex2i(dstX, dstY);
- glTexCoord2i(srcX + width, srcY);
- glVertex2i(dstX + desiredWidth, dstY);
- glTexCoord2i(srcX + width, srcY + height);
- glVertex2i(dstX + desiredWidth, dstY + desiredHeight);
- glTexCoord2i(srcX, srcY + height);
- glVertex2i(dstX, dstY + desiredHeight);
- }
-}
-
-void SafeOpenGLGraphics::drawImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void SafeOpenGLGraphics::drawImageInline(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- FUNC_BLOCK("Graphics::drawImage", 1)
- if (image == nullptr)
- return;
-
- setColorAlpha(image->mAlpha);
- bindTexture(SafeOpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
-
- const SDL_Rect &bounds = image->mBounds;
- // Draw a textured quad.
- glBegin(GL_QUADS);
- drawQuad(image, bounds.x, bounds.y,
- dstX, dstY, bounds.w, bounds.h);
- glEnd();
-}
-
-void SafeOpenGLGraphics::copyImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void SafeOpenGLGraphics::testDraw() restrict2
-{
- if (SafeOpenGLImageHelper::mTextureType == GL_TEXTURE_2D)
- {
- glBegin(GL_QUADS);
- glTexCoord2f(0.0f, 0.781250f);
- glVertex2i(0, 0);
- glTexCoord2f(0.0f, 0.781250f);
- glVertex2i(800, 0);
- glTexCoord2f(0.0f, 0.585938f);
- glVertex2i(800, 600);
- glTexCoord2f(0.0f, 0.585938f);
- glVertex2i(0, 600);
- glEnd();
- }
- else
- {
- glBegin(GL_QUADS);
- glTexCoord2i(0, 0);
- glVertex2i(0, 0);
- glTexCoord2i(800, 0);
- glVertex2i(800, 0);
- glTexCoord2i(800, 600);
- glVertex2i(800, 600);
- glTexCoord2i(0, 600);
- glVertex2i(0, 600);
- glEnd();
- }
-}
-
-void SafeOpenGLGraphics::drawImageCached(const Image *restrict const image,
- int x, int y) restrict2
-{
- FUNC_BLOCK("Graphics::drawImageCached", 1)
- if (image == nullptr)
- return;
-
- setColorAlpha(image->mAlpha);
- bindTexture(SafeOpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
-
- const SDL_Rect &bounds = image->mBounds;
- // Draw a textured quad.
- glBegin(GL_QUADS);
- drawQuad(image, bounds.x, bounds.y, x, y, bounds.w, bounds.h);
- glEnd();
-}
-
-void SafeOpenGLGraphics::drawPatternCached(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- FUNC_BLOCK("Graphics::drawPatternCached", 1)
- if (image == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
- if (iw == 0 || ih == 0)
- return;
-
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
-
- setColorAlpha(image->mAlpha);
- bindTexture(SafeOpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
-
- // Draw a set of textured rectangles
- glBegin(GL_QUADS);
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y + py;
- for (int px = 0; px < w; px += iw)
- {
- int width = (px + iw >= w) ? w - px : iw;
- int dstX = x + px;
- drawQuad(image, srcX, srcY, dstX, dstY, width, height);
- }
- }
-
- glEnd();
-}
-
-void SafeOpenGLGraphics::completeCache() restrict2
-{
-}
-
-void SafeOpenGLGraphics::drawRescaledImage(const Image *restrict const image,
- int dstX, int dstY,
- const int desiredWidth,
- const int desiredHeight) restrict2
-{
- FUNC_BLOCK("Graphics::drawRescaledImage", 1)
- if (image == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
-
- // Just draw the image normally when no resizing is necessary,
- if (imageRect.w == desiredWidth && imageRect.h == desiredHeight)
- {
- drawImageInline(image, dstX, dstY);
- return;
- }
-
- setColorAlpha(image->mAlpha);
- bindTexture(SafeOpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
-
- // Draw a textured quad.
- glBegin(GL_QUADS);
- drawRescaledQuad(image, imageRect.x, imageRect.y, dstX, dstY,
- imageRect.w, imageRect.h, desiredWidth, desiredHeight);
- glEnd();
-}
-
-void SafeOpenGLGraphics::drawPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- drawPatternInline(image, x, y, w, h);
-}
-
-void SafeOpenGLGraphics::drawPatternInline(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- FUNC_BLOCK("Graphics::drawPattern", 1)
- if (image == nullptr)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int iw = imageRect.w;
- const int ih = imageRect.h;
- if (iw == 0 || ih == 0)
- return;
-
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
-
- setColorAlpha(image->mAlpha);
- bindTexture(SafeOpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
-
- // Draw a set of textured rectangles
- glBegin(GL_QUADS);
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y + py;
- for (int px = 0; px < w; px += iw)
- {
- int width = (px + iw >= w) ? w - px : iw;
- int dstX = x + px;
- drawQuad(image, srcX, srcY, dstX, dstY, width, height);
- }
- }
-
- glEnd();
-}
-
-void SafeOpenGLGraphics::drawRescaledPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h,
- const int scaledWidth,
- const int scaledHeight) restrict2
-{
- if (image == nullptr)
- return;
-
- const int iw = scaledWidth;
- const int ih = scaledHeight;
- if (iw == 0 || ih == 0)
- return;
-
- const SDL_Rect &imageRect = image->mBounds;
- const int srcX = imageRect.x;
- const int srcY = imageRect.y;
-
- setColorAlpha(image->mAlpha);
- bindTexture(SafeOpenGLImageHelper::mTextureType, image->mGLImage);
- enableTexturingAndBlending();
-
- // Draw a set of textured rectangles
- glBegin(GL_QUADS);
-
- const float scaleFactorW = static_cast<float>(scaledWidth)
- / image->getWidth();
- const float scaleFactorH = static_cast<float>(scaledHeight)
- / image->getHeight();
-
- for (int py = 0; py < h; py += ih)
- {
- const int height = (py + ih >= h) ? h - py : ih;
- const int dstY = y + py;
- for (int px = 0; px < w; px += iw)
- {
- int width = (px + iw >= w) ? w - px : iw;
- int dstX = x + px;
-
- drawRescaledQuad(image, srcX, srcY, dstX, dstY,
- width / scaleFactorW, height / scaleFactorH,
- scaledWidth, scaledHeight);
- }
- }
-
- glEnd();
-}
-
-void SafeOpenGLGraphics::calcTileCollection(ImageCollection *restrict const
- vertCol A_UNUSED,
- const Image *restrict const image
- A_UNUSED,
- int x A_UNUSED,
- int y A_UNUSED) restrict2
-{
-}
-
-void SafeOpenGLGraphics::calcTileVertexes(ImageVertexes *restrict const vert
- A_UNUSED,
- const Image *restrict const image
- A_UNUSED,
- int x A_UNUSED,
- int y A_UNUSED) const restrict2
-{
-}
-
-void SafeOpenGLGraphics::calcTileVertexesInline(ImageVertexes *restrict const
- vert A_UNUSED,
- const Image *restrict const
- image A_UNUSED,
- int x A_UNUSED,
- int y A_UNUSED) const restrict2
-{
-}
-
-void SafeOpenGLGraphics::calcPattern(ImageVertexes *restrict const vert
- A_UNUSED,
- const Image *restrict const image
- A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED) const restrict2
-{
-}
-
-void SafeOpenGLGraphics::calcPatternInline(ImageVertexes *restrict const vert
- A_UNUSED,
- const Image *restrict const image
- A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED)
- const restrict2
-{
-}
-
-void SafeOpenGLGraphics::calcPattern(ImageCollection *restrict const vert
- A_UNUSED,
- const Image *restrict const image
- A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED) const restrict2
-{
-}
-
-void SafeOpenGLGraphics::drawTileVertexes(const ImageVertexes
- *restrict const vert A_UNUSED)
- restrict2
-{
-}
-
-void SafeOpenGLGraphics::drawTileCollection(const ImageCollection *
- restrict const vertCol A_UNUSED)
- restrict2
-{
-}
-
-void SafeOpenGLGraphics::updateScreen() restrict2
-{
- BLOCK_START("Graphics::updateScreen")
- glFlush();
- glFinish();
-#ifdef USE_SDL2
- SDL_GL_SwapWindow(mWindow);
-#else
- SDL_GL_SwapBuffers();
-#endif // USE_SDL2
-#ifdef DEBUG_OPENGL
- if (isGLNotNull(mglFrameTerminator))
- mglFrameTerminator();
-#endif // DEBUG_OPENGL
-
- BLOCK_END("Graphics::updateScreen")
-}
-
-void SafeOpenGLGraphics::calcWindow(ImageCollection *restrict const vertCol
- A_UNUSED,
- const int x A_UNUSED, const int y A_UNUSED,
- const int w A_UNUSED, const int h A_UNUSED,
- const ImageRect &restrict imgRect A_UNUSED)
- restrict2
-{
-}
-
-void SafeOpenGLGraphics::beginDraw() restrict2
-{
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-
- glOrtho(0.0, static_cast<double>(mRect.w),
- static_cast<double>(mRect.h),
- 0.0, -1.0, 1.0);
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
- setOpenGLFlags();
- glDisable(GL_LIGHTING);
- glDisable(GL_FOG);
- glDisable(GL_COLOR_MATERIAL);
-
- glShadeModel(GL_FLAT);
-
- pushClipArea(Rect(0, 0, mRect.w, mRect.h));
-}
-
-void SafeOpenGLGraphics::endDraw() restrict2
-{
- popClipArea();
-}
-
-void SafeOpenGLGraphics::pushClipArea(const Rect &restrict area) restrict2
-{
- int transX = 0;
- int transY = 0;
-
- if (!mClipStack.empty())
- {
- const ClipRect &clipArea = mClipStack.top();
- transX = -clipArea.xOffset;
- transY = -clipArea.yOffset;
- }
-
- Graphics::pushClipArea(area);
-
- const ClipRect &clipArea = mClipStack.top();
-
- glPushMatrix();
- glTranslatef(static_cast<GLfloat>(transX + clipArea.xOffset),
- static_cast<GLfloat>(transY + clipArea.yOffset), 0);
- glScissor(clipArea.x * mScale,
- (mRect.h - clipArea.y - clipArea.height) * mScale,
- clipArea.width * mScale,
- clipArea.height * mScale);
-}
-
-void SafeOpenGLGraphics::popClipArea() restrict2
-{
- Graphics::popClipArea();
-
- if (mClipStack.empty())
- return;
-
- glPopMatrix();
- const ClipRect &clipArea = mClipStack.top();
- glScissor(clipArea.x * mScale,
- (mRect.h - clipArea.y - clipArea.height) * mScale,
- clipArea.width * mScale,
- clipArea.height * mScale);
-}
-
-void SafeOpenGLGraphics::drawPoint(int x, int y) restrict2
-{
- disableTexturingAndBlending();
- restoreColor();
-
- glBegin(GL_POINTS);
- glVertex2i(x, y);
- glEnd();
-}
-
-void SafeOpenGLGraphics::drawNet(const int x1, const int y1,
- const int x2, const int y2,
- const int width, const int height) restrict2
-{
- disableTexturingAndBlending();
- restoreColor();
-
- glBegin(GL_LINES);
- for (int y = y1; y < y2; y += height)
- {
- glVertex2f(static_cast<float>(x1) + 0.5F,
- static_cast<float>(y) + 0.5F);
- glVertex2f(static_cast<float>(x2) + 0.5F,
- static_cast<float>(y) + 0.5F);
- }
-
- for (int x = x1; x < x2; x += width)
- {
- glVertex2f(static_cast<float>(x) + 0.5F,
- static_cast<float>(y1) + 0.5F);
- glVertex2f(static_cast<float>(x) + 0.5F,
- static_cast<float>(y2) + 0.5F);
- }
- glEnd();
-}
-
-void SafeOpenGLGraphics::drawLine(int x1, int y1,
- int x2, int y2) restrict2
-{
- disableTexturingAndBlending();
- restoreColor();
-
- glBegin(GL_LINES);
- glVertex2f(static_cast<float>(x1) + 0.5F, static_cast<float>(y1) + 0.5F);
- glVertex2f(static_cast<float>(x2) + 0.5F, static_cast<float>(y2) + 0.5F);
- glEnd();
-}
-
-void SafeOpenGLGraphics::drawRectangle(const Rect &restrict rect) restrict2
-{
- drawRectangle(rect, false);
-}
-
-void SafeOpenGLGraphics::fillRectangle(const Rect &restrict rect) restrict2
-{
- drawRectangle(rect, true);
-}
-
-void SafeOpenGLGraphics::enableTexturingAndBlending() restrict2
-{
- if (!mTexture)
- {
- glEnable(SafeOpenGLImageHelper::mTextureType);
- mTexture = true;
- }
-
- if (!mAlpha)
- {
- glEnable(GL_BLEND);
- mAlpha = true;
- }
-}
-
-void SafeOpenGLGraphics::disableTexturingAndBlending() restrict2
-{
- mTextureBinded = 0;
- if (mAlpha && !mColorAlpha)
- {
- glDisable(GL_BLEND);
- mAlpha = false;
- }
- else if (!mAlpha && mColorAlpha)
- {
- glEnable(GL_BLEND);
- mAlpha = true;
- }
-
- if (mTexture)
- {
- glDisable(SafeOpenGLImageHelper::mTextureType);
- mTexture = false;
- }
-}
-
-void SafeOpenGLGraphics::drawRectangle(const Rect &restrict rect,
- const bool filled) restrict2
-{
- BLOCK_START("Graphics::drawRectangle")
- const float offset = filled ? 0 : 0.5F;
-
- disableTexturingAndBlending();
- restoreColor();
-
- glBegin(filled ? GL_QUADS : GL_LINE_LOOP);
- glVertex2f(static_cast<float>(rect.x) + offset,
- static_cast<float>(rect.y) + offset);
- glVertex2f(static_cast<float>(rect.x + rect.width) - offset,
- static_cast<float>(rect.y) + offset);
- glVertex2f(static_cast<float>(rect.x + rect.width) - offset,
- static_cast<float>(rect.y + rect.height) - offset);
- glVertex2f(static_cast<float>(rect.x) + offset,
- static_cast<float>(rect.y + rect.height) - offset);
- glEnd();
- BLOCK_END("Graphics::drawRectangle")
-}
-
-void SafeOpenGLGraphics::bindTexture(const GLenum target,
- const GLuint texture)
-{
- if (mTextureBinded != texture)
- {
- mTextureBinded = texture;
- glBindTexture(target, texture);
- }
-}
-
-void SafeOpenGLGraphics::setColorAlpha(const float alpha) restrict2
-{
- if (!mIsByteColor && mFloatColor == alpha)
- return;
-
- glColor4f(1.0F, 1.0F, 1.0F, alpha);
- mIsByteColor = false;
- mFloatColor = alpha;
-}
-
-void SafeOpenGLGraphics::restoreColor() restrict2
-{
- if (mIsByteColor && mByteColor == mColor)
- return;
-
- glColor4ub(static_cast<GLubyte>(mColor.r),
- static_cast<GLubyte>(mColor.g),
- static_cast<GLubyte>(mColor.b),
- static_cast<GLubyte>(mColor.a));
- mIsByteColor = true;
- mByteColor = mColor;
-}
-
-void SafeOpenGLGraphics::clearScreen() const restrict2
-{
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
-}
-
-void SafeOpenGLGraphics::drawImageRect(const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- #include "render/graphics_drawImageRect.hpp"
-}
-
-void SafeOpenGLGraphics::calcImageRect(ImageVertexes *restrict const vert,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- #include "render/graphics_calcImageRect.hpp"
-}
-
-#endif // USE_OPENGL
diff --git a/src/render/safeopenglgraphics.h b/src/render/safeopenglgraphics.h
deleted file mode 100644
index 5c85ee058..000000000
--- a/src/render/safeopenglgraphics.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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 RENDER_SAFEOPENGLGRAPHICS_H
-#define RENDER_SAFEOPENGLGRAPHICS_H
-
-#if defined USE_OPENGL && !defined ANDROID
-
-#include "render/graphics.h"
-
-#include "resources/fboinfo.h"
-
-#ifdef ANDROID
-#include <GLES/gl.h>
-#include <GLES/glext.h>
-#else // ANDROID
-#ifndef USE_SDL2
-#define GL_GLEXT_PROTOTYPES 1
-#endif // USE_SDL2
-PRAGMA48(GCC diagnostic push)
-PRAGMA48(GCC diagnostic ignored "-Wshadow")
-#include <SDL_opengl.h>
-PRAGMA48(GCC diagnostic pop)
-#if defined(__APPLE__)
-#include <OpenGL/glext.h>
-#elif !defined(__native_client__)
-#include <GL/glext.h>
-#endif // defined(__APPLE__)
-#endif // ANDROID
-
-class SafeOpenGLGraphics final : public Graphics
-{
- public:
- SafeOpenGLGraphics();
-
- A_DELETE_COPY(SafeOpenGLGraphics)
-
- ~SafeOpenGLGraphics();
-
- void testDraw() restrict2 override final;
-
- #include "render/graphicsdef.hpp"
- RENDER_GRAPHICSDEF_HPP
-
- #include "render/openglgraphicsdef.hpp"
- RENDER_OPENGLGRAPHICSDEF_HPP
-
- #include "render/openglgraphicsdef1.hpp"
- RENDER_OPENGLGRAPHICSDEF1_HPP
-
- private:
- bool mTexture;
- bool mIsByteColor;
- Color mByteColor;
- float mFloatColor;
- bool mColorAlpha;
- FBOInfo mFbo;
-};
-
-#endif // defined USE_OPENGL && !defined ANDROID
-#endif // RENDER_SAFEOPENGLGRAPHICS_H
diff --git a/src/render/sdl2graphics.cpp b/src/render/sdl2graphics.cpp
deleted file mode 100644
index baa69ca69..000000000
--- a/src/render/sdl2graphics.cpp
+++ /dev/null
@@ -1,789 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-/* _______ __ __ __ ______ __ __ _______ __ __
- * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\
- * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / /
- * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / /
- * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / /
- * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ /
- * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/
- *
- * Copyright (c) 2004 - 2008 Olof Naessén and Per Larsson
- *
- *
- * Per Larsson a.k.a finalman
- * Olof Naessén a.k.a jansem/yakslem
- *
- * Visit: http://guichan.sourceforge.net
- *
- * License: (BSD)
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name of Guichan nor the names of its contributors may
- * be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef USE_SDL2
-
-#include "render/sdl2graphics.h"
-
-#include "graphicsmanager.h"
-
-#include "render/vertexes/imagecollection.h"
-
-#include "resources/imagerect.h"
-#include "resources/sdl2imagehelper.h"
-
-#include "resources/image/image.h"
-
-#include "utils/sdlcheckutils.h"
-
-#include "debug.h"
-
-#ifdef DEBUG_SDL_SURFACES
-
-#define MSDL_RenderCopy(render, texture, src, dst) \
- FakeSDL_RenderCopy(render, texture, src, dst)
-
-static int FakeSDL_RenderCopy(SDL_Renderer *restrict const renderer,
- SDL_Texture *restrict const texture,
- const SDL_Rect *restrict const srcrect,
- const SDL_Rect *restrict const dstrect)
-{
- int ret = SDL_RenderCopy(renderer, texture, srcrect, dstrect);
- if (ret)
- {
- logger->log("rendering error in texture %p: %s",
- static_cast<void*>(texture), SDL_GetError());
- }
- return ret;
-}
-
-#else // DEBUG_SDL_SURFACES
-
-#define MSDL_RenderCopy(render, texture, src, dst) \
- SDL_RenderCopy(render, texture, src, dst)
-
-#endif // DEBUG_SDL_SURFACES
-
-#define setRenderDrawColor(mColor) \
- SDL_SetRenderDrawColor(mRenderer, \
- CAST_U8(mColor.r), \
- CAST_U8(mColor.g), \
- CAST_U8(mColor.b), \
- CAST_U8(mColor.a))
-
-#define defRectFromArea(rect, area) \
- const SDL_Rect rect = \
- { \
- CAST_S32(area.x), \
- CAST_S32(area.y), \
- CAST_S32(area.width), \
- CAST_S32(area.height) \
- }
-
-SDLGraphics::SDLGraphics() :
- Graphics(),
- mRendererFlags(SDL_RENDERER_SOFTWARE),
- mOldPixel(0),
- mOldAlpha(0)
-{
- mOpenGL = RENDER_SDL2_DEFAULT;
- mName = "SDL2 default";
-}
-
-SDLGraphics::~SDLGraphics()
-{
-}
-
-void SDLGraphics::drawRescaledImage(const Image *restrict const image,
- int dstX, int dstY,
- const int desiredWidth,
- const int desiredHeight) restrict2
-{
- FUNC_BLOCK("Graphics::drawRescaledImage", 1)
- // Check that preconditions for blitting are met.
- if (!mWindow || !image || !image->mTexture)
- return;
-
- const ClipRect &top = mClipStack.top();
- const SDL_Rect &bounds = image->mBounds;
- const SDL_Rect srcRect =
- {
- CAST_S32(bounds.x),
- CAST_S32(bounds.y),
- CAST_S32(bounds.w),
- CAST_S32(bounds.h)
- };
- const SDL_Rect dstRect =
- {
- CAST_S32(dstX + top.xOffset),
- CAST_S32(dstY + top.yOffset),
- CAST_S32(desiredWidth),
- CAST_S32(desiredHeight)
- };
-
- MSDL_RenderCopy(mRenderer, image->mTexture, &srcRect, &dstRect);
-}
-
-void SDLGraphics::drawImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void SDLGraphics::drawImageInline(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- FUNC_BLOCK("Graphics::drawImage", 1)
- // Check that preconditions for blitting are met.
- if (!mWindow || !image || !image->mTexture)
- return;
-
- const ClipRect &top = mClipStack.top();
- if (!top.width || !top.height)
- return;
-
- const SDL_Rect &bounds = image->mBounds;
- const SDL_Rect srcRect =
- {
- CAST_S32(bounds.x),
- CAST_S32(bounds.y),
- CAST_S32(bounds.w),
- CAST_S32(bounds.h)
- };
-
- const SDL_Rect dstRect =
- {
- CAST_S32(dstX + top.xOffset),
- CAST_S32(dstY + top.yOffset),
- CAST_S32(bounds.w),
- CAST_S32(bounds.h)
- };
-
- MSDL_RenderCopy(mRenderer, image->mTexture, &srcRect, &dstRect);
-}
-
-void SDLGraphics::copyImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void SDLGraphics::drawImageCached(const Image *restrict const image,
- int x, int y) restrict2
-{
- FUNC_BLOCK("Graphics::drawImageCached", 1)
- // Check that preconditions for blitting are met.
- if (!mWindow || !image || !image->mTexture)
- return;
-
- const ClipRect &top = mClipStack.top();
- if (!top.width || !top.height)
- return;
-
- const SDL_Rect &bounds = image->mBounds;
- const SDL_Rect srcRect =
- {
- CAST_S32(bounds.x),
- CAST_S32(bounds.y),
- CAST_S32(bounds.w),
- CAST_S32(bounds.h)
- };
-
- const SDL_Rect dstRect =
- {
- CAST_S32(x + top.xOffset),
- CAST_S32(y + top.yOffset),
- CAST_S32(bounds.w),
- CAST_S32(bounds.h)
- };
-
- MSDL_RenderCopy(mRenderer, image->mTexture, &srcRect, &dstRect);
-}
-
-void SDLGraphics::drawPatternCached(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- FUNC_BLOCK("Graphics::drawPatternCached", 1)
- // Check that preconditions for blitting are met.
- if (!mWindow || !image)
- return;
- if (!image->mTexture)
- return;
-
- const ClipRect &top = mClipStack.top();
- if (!top.width || !top.height)
- return;
-
- const SDL_Rect &bounds = image->mBounds;
- const int iw = bounds.w;
- const int ih = bounds.h;
- if (iw == 0 || ih == 0)
- return;
-
- const int xOffset = top.xOffset + x;
- const int yOffset = top.yOffset + y;
-
- SDL_Rect dstRect;
- SDL_Rect srcRect;
- srcRect.x = CAST_S32(bounds.x);
- srcRect.y = CAST_S32(bounds.y);
- for (int py = 0; py < h; py += ih)
- {
- const int dh = (py + ih >= h) ? h - py : ih;
- dstRect.y = CAST_S32(py + yOffset);
- srcRect.h = CAST_S32(dh);
- dstRect.h = CAST_S32(dh);
-
- for (int px = 0; px < w; px += iw)
- {
- const int dw = (px + iw >= w) ? w - px : iw;
- dstRect.x = CAST_S32(px + xOffset);
- srcRect.w = CAST_S32(dw);
- dstRect.w = CAST_S32(dw);
-
- MSDL_RenderCopy(mRenderer, image->mTexture, &srcRect, &dstRect);
- }
- }
-}
-
-void SDLGraphics::completeCache() restrict2
-{
-}
-
-void SDLGraphics::drawPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- drawPatternInline(image, x, y, w, h);
-}
-
-void SDLGraphics::drawPatternInline(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- FUNC_BLOCK("Graphics::drawPattern", 1)
- // Check that preconditions for blitting are met.
- if (!mWindow || !image)
- return;
- if (!image->mTexture)
- return;
-
- const ClipRect &top = mClipStack.top();
- if (!top.width || !top.height)
- return;
-
- const SDL_Rect &bounds = image->mBounds;
- const int iw = bounds.w;
- const int ih = bounds.h;
- if (iw == 0 || ih == 0)
- return;
-
- const int xOffset = top.xOffset + x;
- const int yOffset = top.yOffset + y;
-
- SDL_Rect dstRect;
- SDL_Rect srcRect;
- srcRect.x = CAST_S32(bounds.x);
- srcRect.y = CAST_S32(bounds.y);
- for (int py = 0; py < h; py += ih)
- {
- const int dh = (py + ih >= h) ? h - py : ih;
- dstRect.y = CAST_S32(py + yOffset);
- srcRect.h = CAST_S32(dh);
- dstRect.h = CAST_S32(dh);
-
- for (int px = 0; px < w; px += iw)
- {
- const int dw = (px + iw >= w) ? w - px : iw;
- dstRect.x = CAST_S32(px + xOffset);
- srcRect.w = CAST_S32(dw);
- dstRect.w = CAST_S32(dw);
-
- MSDL_RenderCopy(mRenderer, image->mTexture, &srcRect, &dstRect);
- }
- }
-}
-
-void SDLGraphics::drawRescaledPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h,
- const int scaledWidth,
- const int scaledHeight) restrict2
-{
- // Check that preconditions for blitting are met.
- if (!mWindow || !image)
- return;
- if (!image->mTexture)
- return;
-
- if (scaledHeight == 0 || scaledWidth == 0)
- return;
-
- const ClipRect &top = mClipStack.top();
- if (!top.width || !top.height)
- return;
-
- Image *const tmpImage = image->SDLgetScaledImage(
- scaledWidth, scaledHeight);
- if (!tmpImage)
- return;
-
- const SDL_Rect &bounds = tmpImage->mBounds;
- const int iw = bounds.w;
- const int ih = bounds.h;
- if (iw == 0 || ih == 0)
- return;
-
- const int xOffset = top.xOffset + x;
- const int yOffset = top.yOffset + y;
-
- SDL_Rect dstRect;
- SDL_Rect srcRect;
- srcRect.x = CAST_S32(bounds.x);
- srcRect.y = CAST_S32(bounds.y);
- for (int py = 0; py < h; py += ih)
- {
- const int dh = (py + ih >= h) ? h - py : ih;
- dstRect.y = CAST_S32(py + yOffset);
- srcRect.h = CAST_S32(dh);
- dstRect.h = CAST_S32(dh);
-
- for (int px = 0; px < w; px += iw)
- {
- const int dw = (px + iw >= w) ? w - px : iw;
- dstRect.x = CAST_S32(px + xOffset);
- srcRect.w = CAST_S32(dw);
- dstRect.w = CAST_S32(dw);
-
- MSDL_RenderCopy(mRenderer, image->mTexture, &srcRect, &dstRect);
- }
- }
-
- delete tmpImage;
-}
-
-void SDLGraphics::calcPattern(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) const restrict2
-{
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void SDLGraphics::calcPatternInline(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) const restrict2
-{
- // Check that preconditions for blitting are met.
- if (!vert || !mWindow || !image || !image->mTexture)
- return;
-
- const ClipRect &top = mClipStack.top();
- if (!top.width || !top.height)
- return;
-
- const SDL_Rect &bounds = image->mBounds;
- const int iw = bounds.w;
- const int ih = bounds.h;
- if (iw == 0 || ih == 0)
- return;
-
- const int xOffset = top.xOffset + x;
- const int yOffset = top.yOffset + y;
- const int srcX = bounds.x;
- const int srcY = bounds.y;
- for (int py = 0; py < h; py += ih)
- {
- const int dh = (py + ih >= h) ? h - py : ih;
- const int dstY = py + yOffset;
-
- for (int px = 0; px < w; px += iw)
- {
- const int dw = (px + iw >= w) ? w - px : iw;
- const int dstX = px + xOffset;
-
- DoubleRect *const r = new DoubleRect;
- SDL_Rect &dstRect = r->dst;
- SDL_Rect &srcRect = r->src;
- srcRect.x = CAST_S32(srcX);
- srcRect.y = CAST_S32(srcY);
- srcRect.w = CAST_S32(dw);
- srcRect.h = CAST_S32(dh);
- dstRect.x = CAST_S32(dstX);
- dstRect.y = CAST_S32(dstY);
- dstRect.w = CAST_S32(dw);
- dstRect.h = CAST_S32(dh);
-
- vert->sdl.push_back(r);
- }
- }
-}
-
-void SDLGraphics::calcPattern(ImageCollection *restrict const vertCol,
- const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) const restrict2
-{
- ImageVertexes *vert = nullptr;
- if (vertCol->currentImage != image)
- {
- vert = new ImageVertexes;
- vertCol->currentImage = image;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
-
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void SDLGraphics::calcTileVertexes(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- int x, int y) const restrict2
-{
- vert->image = image;
- calcTileSDL(vert, x, y);
-}
-
-void SDLGraphics::calcTileVertexesInline(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- int x, int y) const restrict2
-{
- vert->image = image;
- calcTileSDL(vert, x, y);
-}
-
-void SDLGraphics::calcTileSDL(ImageVertexes *restrict const vert,
- int x, int y) const restrict2
-{
- // Check that preconditions for blitting are met.
- if (!vert || !vert->image || !vert->image->mTexture)
- return;
-
- const ClipRect &top = mClipStack.top();
- if (!top.width || !top.height)
- return;
-
- const Image *const image = vert->image;
- const SDL_Rect &bounds = image->mBounds;
-
- x += top.xOffset;
- y += top.yOffset;
-
- DoubleRect *rect = new DoubleRect;
- SDL_Rect &dstRect = rect->dst;
- SDL_Rect &srcRect = rect->src;
-
- srcRect.x = CAST_S32(bounds.x);
- srcRect.y = CAST_S32(bounds.y);
- srcRect.w = CAST_S32(bounds.w);
- srcRect.h = CAST_S32(bounds.h);
- dstRect.x = CAST_S32(x);
- dstRect.y = CAST_S32(y);
- dstRect.w = CAST_S32(bounds.w);
- dstRect.h = CAST_S32(bounds.h);
-
- vert->sdl.push_back(rect);
-}
-
-void SDLGraphics::calcTileCollection(ImageCollection *restrict const vertCol,
- const Image *restrict const image,
- int x, int y) restrict2
-{
- if (!vertCol)
- return;
- if (vertCol->currentImage != image)
- {
- ImageVertexes *const vert = new ImageVertexes;
- vertCol->currentImage = image;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- calcTileSDL(vert, x, y);
- }
- else
- {
- calcTileSDL(vertCol->currentVert, x, y);
- }
-}
-
-void SDLGraphics::drawTileCollection(const ImageCollection
- *restrict const vertCol) restrict2
-{
- const ImageVertexesVector &draws = vertCol->draws;
- const ImageCollectionCIter it_end = draws.end();
- for (ImageCollectionCIter it = draws.begin(); it != it_end; ++ it)
- {
- const ImageVertexes *const vert = *it;
- const Image *const img = vert->image;
- const DoubleRects *const rects = &vert->sdl;
- DoubleRects::const_iterator it2 = rects->begin();
- const DoubleRects::const_iterator it2_end = rects->end();
- while (it2 != it2_end)
- {
- MSDL_RenderCopy(mRenderer, img->mTexture,
- &(*it2)->src, &(*it2)->dst);
- ++ it2;
- }
- }
-}
-
-void SDLGraphics::drawTileVertexes(const ImageVertexes *restrict const vert)
- restrict2
-{
- if (!vert)
- return;
- // vert and img must be != 0
- const Image *const img = vert->image;
- const DoubleRects *const rects = &vert->sdl;
- DoubleRects::const_iterator it = rects->begin();
- const DoubleRects::const_iterator it_end = rects->end();
- while (it != it_end)
- {
- MSDL_RenderCopy(mRenderer, img->mTexture, &(*it)->src, &(*it)->dst);
- ++ it;
- }
-}
-
-void SDLGraphics::updateScreen() restrict2
-{
- BLOCK_START("Graphics::updateScreen")
- SDL_RenderPresent(mRenderer);
-// SDL_RenderClear(mRenderer);
- BLOCK_END("Graphics::updateScreen")
-}
-
-void SDLGraphics::calcWindow(ImageCollection *restrict const vertCol,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect) restrict2
-{
- ImageVertexes *vert = nullptr;
- Image *const image = imgRect.grid[4];
- if (!image)
- return;
- if (vertCol->currentImage != image)
- {
- vert = new ImageVertexes;
- vertCol->currentImage = image;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
- calcImageRect(vert, x, y, w, h, imgRect);
-}
-
-void SDLGraphics::fillRectangle(const Rect &restrict rectangle) restrict2
-{
- const ClipRect &top = mClipStack.top();
- const SDL_Rect rect =
- {
- CAST_S32(rectangle.x + top.xOffset),
- CAST_S32(rectangle.y + top.yOffset),
- CAST_S32(rectangle.width),
- CAST_S32(rectangle.height)
- };
-
- setRenderDrawColor(mColor);
- SDL_RenderFillRects(mRenderer, &rect, 1);
-}
-
-void SDLGraphics::beginDraw() restrict2
-{
- pushClipArea(Rect(0, 0, mRect.w, mRect.h));
-}
-
-void SDLGraphics::endDraw() restrict2
-{
- popClipArea();
-}
-
-void SDLGraphics::pushClipArea(const Rect &restrict area) restrict2
-{
- Graphics::pushClipArea(area);
-
- const ClipRect &carea = mClipStack.top();
- defRectFromArea(rect, carea);
- SDL_RenderSetClipRect(mRenderer, &rect);
-}
-
-void SDLGraphics::popClipArea() restrict2
-{
- Graphics::popClipArea();
-
- if (mClipStack.empty())
- return;
-
- const ClipRect &carea = mClipStack.top();
- defRectFromArea(rect, carea);
- SDL_RenderSetClipRect(mRenderer, &rect);
-}
-
-void SDLGraphics::drawPoint(int x, int y) restrict2
-{
- if (mClipStack.empty())
- return;
-
- const ClipRect &top = mClipStack.top();
-
- x += top.xOffset;
- y += top.yOffset;
-
- if (!top.isPointInRect(x, y))
- return;
-
- setRenderDrawColor(mColor);
- const SDL_Point point =
- {
- x,
- y
- };
-
- SDL_RenderDrawPoints(mRenderer, &point, 1);
-}
-
-
-void SDLGraphics::drawRectangle(const Rect &restrict rectangle) restrict2
-{
- const ClipRect &top = mClipStack.top();
- setRenderDrawColor(mColor);
-
- const int x1 = rectangle.x + top.xOffset;
- const int y1 = rectangle.y + top.yOffset;
- const int x2 = x1 + rectangle.width - 1;
- const int y2 = y1 + rectangle.height - 1;
- SDL_Point points[] =
- {
- {x1, y1},
- {x2, y1},
- {x2, y2},
- {x1, y2},
- {x1, y1}
- };
-
- SDL_RenderDrawLines(mRenderer, points, 5);
-}
-
-void SDLGraphics::drawLine(int x1, int y1,
- int x2, int y2) restrict2
-{
- const ClipRect &top = mClipStack.top();
- setRenderDrawColor(mColor);
-
- const int x0 = top.xOffset;
- const int y0 = top.yOffset;
-
- SDL_Point points[] =
- {
- {x1 + x0, y1 + y0},
- {x2 + x0, y2 + y0}
- };
-
- SDL_RenderDrawLines(mRenderer, points, 2);
-}
-
-bool SDLGraphics::setVideoMode(const int w, const int h,
- const int scale,
- const int bpp,
- const bool fs,
- const bool hwaccel,
- const bool resize,
- const bool noFrame,
- const bool allowHighDPI) restrict2
-{
- setMainFlags(w, h,
- scale,
- bpp,
- fs,
- hwaccel,
- resize,
- noFrame,
- allowHighDPI);
-
- if (!(mWindow = graphicsManager.createWindow(w, h, bpp,
- getSoftwareFlags())))
- {
- mRect.w = 0;
- mRect.h = 0;
- return false;
- }
-
- int w1 = 0;
- int h1 = 0;
- SDL_GetWindowSize(mWindow, &w1, &h1);
- mRect.w = w1;
- mRect.h = h1;
-
- mRenderer = graphicsManager.createRenderer(mWindow, mRendererFlags);
- SDLImageHelper::setRenderer(mRenderer);
- return videoInfo();
-}
-
-void SDLGraphics::drawImageRect(const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect) restrict2
-{
- #include "render/graphics_drawImageRect.hpp"
-}
-
-void SDLGraphics::calcImageRect(ImageVertexes *restrict const vert,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect) restrict2
-{
- #include "render/graphics_calcImageRect.hpp"
-}
-
-#endif // USE_SDL2
diff --git a/src/render/sdl2graphics.h b/src/render/sdl2graphics.h
deleted file mode 100644
index 5db1cf179..000000000
--- a/src/render/sdl2graphics.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-/* _______ __ __ __ ______ __ __ _______ __ __
- * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\
- * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / /
- * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / /
- * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / /
- * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ /
- * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/
- *
- * Copyright (c) 2004 - 2008 Olof Naessén and Per Larsson
- *
- *
- * Per Larsson a.k.a finalman
- * Olof Naessén a.k.a jansem/yakslem
- *
- * Visit: http://guichan.sourceforge.net
- *
- * License: (BSD)
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name of Guichan nor the names of its contributors may
- * be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef RENDER_SDL2GRAPHICS_H
-#define RENDER_SDL2GRAPHICS_H
-
-#ifdef USE_SDL2
-
-#include "render/graphics.h"
-
-#include "localconsts.h"
-
-class Image;
-class ImageCollection;
-class ImageVertexes;
-class MapLayer;
-
-struct SDL_Surface;
-
-/**
- * A central point of control for graphics.
- */
-class SDLGraphics final : public Graphics
-{
- public:
- /**
- * Constructor.
- */
- SDLGraphics();
-
- A_DELETE_COPY(SDLGraphics)
-
- /**
- * Destructor.
- */
- ~SDLGraphics();
-
- void setRendererFlags(const uint32_t flags) restrict noexcept2 override
- { mRendererFlags = flags; }
-
- #include "render/graphicsdef.hpp"
- RENDER_GRAPHICSDEF_HPP
-
- #include "render/softwaregraphicsdef.hpp"
- RENDER_SOFTWAREGRAPHICSDEF_HPP
-
- protected:
- uint32_t mRendererFlags;
- uint32_t mOldPixel;
- unsigned int mOldAlpha;
-};
-
-#endif // USE_SDL2
-#endif // RENDER_SDL2GRAPHICS_H
diff --git a/src/render/sdl2softwaregraphics.cpp b/src/render/sdl2softwaregraphics.cpp
deleted file mode 100644
index 808f7c601..000000000
--- a/src/render/sdl2softwaregraphics.cpp
+++ /dev/null
@@ -1,1530 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-#ifdef USE_SDL2
-
-#include "render/sdl2softwaregraphics.h"
-
-#include "graphicsmanager.h"
-
-#include "render/vertexes/imagecollection.h"
-
-#include "resources/imagerect.h"
-#include "resources/sdl2softwareimagehelper.h"
-
-#include "resources/image/image.h"
-
-#include "utils/sdlcheckutils.h"
-
-#include "utils/sdlpixel.h"
-
-#include "debug.h"
-
-#ifndef SDL_BIG_ENDIAN
-#error missing SDL_endian.h
-#endif // SDL_BYTEORDER
-
-#if SDL_BYTEORDER == SDL_LIL_ENDIAN
-static unsigned int *cR = nullptr;
-static unsigned int *cG = nullptr;
-static unsigned int *cB = nullptr;
-#endif // SDL_BYTEORDER == SDL_LIL_ENDIAN
-
-#define defRectFromArea(rect, area) \
- const SDL_Rect rect = \
- { \
- CAST_S32(area.x), \
- CAST_S32(area.y), \
- CAST_S32(area.width), \
- CAST_S32(area.height) \
- }
-
-SDL2SoftwareGraphics::SDL2SoftwareGraphics() :
- Graphics(),
- mRendererFlags(SDL_RENDERER_SOFTWARE),
- mSurface(nullptr),
- mOldPixel(0),
- mOldAlpha(0)
-{
- mOpenGL = RENDER_SOFTWARE;
- mName = "Software";
-}
-
-SDL2SoftwareGraphics::~SDL2SoftwareGraphics()
-{
-}
-
-void SDL2SoftwareGraphics::drawRescaledImage(const Image *restrict const image,
- int dstX, int dstY,
- const int desiredWidth,
- const int desiredHeight) restrict2
-{
- FUNC_BLOCK("Graphics::drawRescaledImage", 1)
- // Check that preconditions for blitting are met.
- if (!mSurface || !image || !image->mSDLSurface)
- return;
-
- Image *const tmpImage = image->SDLgetScaledImage(
- desiredWidth, desiredHeight);
-
- if (!tmpImage || !tmpImage->mSDLSurface)
- return;
-
- const ClipRect &top = mClipStack.top();
- const SDL_Rect &bounds = image->mBounds;
-
- SDL_Rect srcRect =
- {
- CAST_S16(bounds.x),
- CAST_S16(bounds.y),
- CAST_U16(bounds.w),
- CAST_U16(bounds.h)
- };
-
- SDL_Rect dstRect =
- {
- CAST_S16(dstX + top.xOffset),
- CAST_S16(dstY + top.yOffset),
- 0,
- 0
- };
-
- SDL_BlitSurface(tmpImage->mSDLSurface, &srcRect, mSurface, &dstRect);
- delete tmpImage;
-}
-
-void SDL2SoftwareGraphics::drawImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void SDL2SoftwareGraphics::drawImageInline(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- FUNC_BLOCK("Graphics::drawImage", 1)
- // Check that preconditions for blitting are met.
- if (!mSurface || !image || !image->mSDLSurface)
- return;
-
- const ClipRect &top = mClipStack.top();
- const SDL_Rect &bounds = image->mBounds;
-
- SDL_Surface *const src = image->mSDLSurface;
-
- int srcX = bounds.x;
- int srcY = bounds.y;
- dstX += top.xOffset;
- dstY += top.yOffset;
-
- int w = bounds.w;
- int h = bounds.h;
- if (srcX < 0)
- {
- w += srcX;
- dstX -= CAST_S16(srcX);
- srcX = 0;
- }
- const int maxw = src->w - srcX;
- if (maxw < w)
- w = maxw;
-
- if (srcY < 0)
- {
- h += srcY;
- dstY -= CAST_S16(srcY);
- srcY = 0;
- }
- const int maxh = src->h - srcY;
- if (maxh < h)
- h = maxh;
-
- const SDL_Rect *const clip = &mSurface->clip_rect;
- const int clipX = clip->x;
- const int clipY = clip->y;
- int dx = clipX - dstX;
- if (dx > 0)
- {
- w -= dx;
- dstX += CAST_S16(dx);
- srcX += dx;
- }
- dx = dstX + w - clipX - clip->w;
- if (dx > 0)
- w -= dx;
-
- int dy = clipY - dstY;
- if (dy > 0)
- {
- h -= dy;
- dstY += CAST_S16(dy);
- srcY += dy;
- }
- dy = dstY + h - clipY - clip->h;
- if (dy > 0)
- h -= dy;
-
- if (w > 0 && h > 0)
- {
- SDL_Rect srcRect =
- {
- CAST_S16(srcX),
- CAST_S16(srcY),
- CAST_U16(w),
- CAST_U16(h)
- };
-
- SDL_Rect dstRect =
- {
- CAST_S16(dstX),
- CAST_S16(dstY),
- CAST_U16(w),
- CAST_U16(h)
- };
-
- SDL_LowerBlit(src, &srcRect, mSurface, &dstRect);
- }
-}
-
-void SDL2SoftwareGraphics::copyImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void SDL2SoftwareGraphics::drawImageCached(const Image *restrict const image,
- int x, int y) restrict2
-{
- FUNC_BLOCK("Graphics::drawImageCached", 1)
- // Check that preconditions for blitting are met.
- if (!mSurface || !image || !image->mSDLSurface)
- return;
-
- const ClipRect &top = mClipStack.top();
- const SDL_Rect &bounds = image->mBounds;
-
- SDL_Surface *const src = image->mSDLSurface;
-
- int srcX = bounds.x;
- int srcY = bounds.y;
- x += top.xOffset;
- y += top.yOffset;
-
- int w = bounds.w;
- int h = bounds.h;
- if (srcX < 0)
- {
- w += srcX;
- x -= CAST_S16(srcX);
- srcX = 0;
- }
- const int maxw = src->w - srcX;
- if (maxw < w)
- w = maxw;
-
- if (srcY < 0)
- {
- h += srcY;
- y -= CAST_S16(srcY);
- srcY = 0;
- }
- const int maxh = src->h - srcY;
- if (maxh < h)
- h = maxh;
-
- const SDL_Rect *const clip = &mSurface->clip_rect;
- const int clipX = clip->x;
- const int clipY = clip->y;
- int dx = clipX - x;
- if (dx > 0)
- {
- w -= dx;
- x += CAST_S16(dx);
- srcX += dx;
- }
- dx = x + w - clipX - clip->w;
- if (dx > 0)
- w -= dx;
-
- int dy = clipY - y;
- if (dy > 0)
- {
- h -= dy;
- y += CAST_S16(dy);
- srcY += dy;
- }
- dy = y + h - clipY - clip->h;
- if (dy > 0)
- h -= dy;
-
- if (w > 0 && h > 0)
- {
- SDL_Rect srcRect =
- {
- CAST_S16(srcX),
- CAST_S16(srcY),
- CAST_U16(w),
- CAST_U16(h)
- };
-
- SDL_Rect dstRect =
- {
- CAST_S16(x),
- CAST_S16(y),
- CAST_U16(w),
- CAST_U16(h)
- };
-
- SDL_LowerBlit(src, &srcRect, mSurface, &dstRect);
- }
-}
-
-void SDL2SoftwareGraphics::drawPatternCached(const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) restrict2
-{
- FUNC_BLOCK("Graphics::drawPatternCached", 1)
- // Check that preconditions for blitting are met.
- if (!mSurface || !image)
- return;
- if (!image->mSDLSurface)
- return;
-
- const SDL_Rect &bounds = image->mBounds;
- const int iw = bounds.w;
- const int ih = bounds.h;
- if (iw == 0 || ih == 0)
- return;
-
- const ClipRect &top = mClipStack.top();
- const int xOffset = top.xOffset + x;
- const int yOffset = top.yOffset + y;
- const int srcX = bounds.x;
- const int srcY = bounds.y;
- SDL_Surface *const src = image->mSDLSurface;
- const SDL_Rect *const clip = &mSurface->clip_rect;
- const int clipX = clip->x;
- const int clipY = clip->y;
-
- for (int py = 0; py < h; py += ih)
- {
- const int dh = (py + ih >= h) ? h - py : ih;
- int dstY = py + yOffset;
- int y2 = srcY;
- int h2 = dh;
- if (y2 < 0)
- {
- h2 += y2;
- dstY -= CAST_S16(y2);
- y2 = 0;
- }
- const int maxh = src->h - y2;
- if (maxh < h2)
- h2 = maxh;
-
- int dy = clipY - dstY;
- if (dy > 0)
- {
- h2 -= dy;
- dstY += CAST_S16(dy);
- y2 += dy;
- }
- dy = dstY + h2 - clipY - clip->h;
- if (dy > 0)
- h2 -= dy;
-
- if (h2 > 0)
- {
- for (int px = 0; px < w; px += iw)
- {
- const int dw = (px + iw >= w) ? w - px : iw;
- int dstX = px + xOffset;
- int x2 = srcX;
- int w2 = dw;
- if (x2 < 0)
- {
- w2 += x2;
- dstX -= CAST_S16(x2);
- x2 = 0;
- }
- const int maxw = src->w - x2;
- if (maxw < w2)
- w2 = maxw;
-
- int dx = clipX - dstX;
- if (dx > 0)
- {
- w2 -= dx;
- dstX += CAST_S16(dx);
- x2 += dx;
- }
- dx = dstX + w2 - clipX - clip->w;
- if (dx > 0)
- w2 -= dx;
-
- if (w2 > 0)
- {
- SDL_Rect srcRect =
- {
- CAST_S16(x2),
- CAST_S16(y2),
- CAST_U16(w2),
- CAST_U16(h2)
- };
-
- SDL_Rect dstRect =
- {
- CAST_S16(dstX),
- CAST_S16(dstY),
- CAST_U16(w2),
- CAST_U16(h2)
- };
-
- SDL_LowerBlit(src, &srcRect, mSurface, &dstRect);
- }
-
-// SDL_BlitSurface(image->mSDLSurface, &srcRect, mWindow, &dstRect);
- }
- }
- }
-}
-
-void SDL2SoftwareGraphics::completeCache() restrict2
-{
-}
-
-void SDL2SoftwareGraphics::drawPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- drawPatternInline(image, x, y, w, h);
-}
-
-void SDL2SoftwareGraphics::drawPatternInline(const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) restrict2
-{
- FUNC_BLOCK("Graphics::drawPattern", 1)
- // Check that preconditions for blitting are met.
- if (!mSurface || !image)
- return;
- if (!image->mSDLSurface)
- return;
-
- const SDL_Rect &bounds = image->mBounds;
- const int iw = bounds.w;
- const int ih = bounds.h;
- if (iw == 0 || ih == 0)
- return;
-
- const ClipRect &top = mClipStack.top();
- const int xOffset = top.xOffset + x;
- const int yOffset = top.yOffset + y;
- const int srcX = bounds.x;
- const int srcY = bounds.y;
- SDL_Surface *const src = image->mSDLSurface;
- const SDL_Rect *const clip = &mSurface->clip_rect;
- const int clipX = clip->x;
- const int clipY = clip->y;
-
- for (int py = 0; py < h; py += ih)
- {
- const int dh = (py + ih >= h) ? h - py : ih;
- int dstY = py + yOffset;
- int y2 = srcY;
- int h2 = dh;
- if (y2 < 0)
- {
- h2 += y2;
- dstY -= CAST_S16(y2);
- y2 = 0;
- }
- const int maxh = src->h - y2;
- if (maxh < h2)
- h2 = maxh;
-
- int dy = clipY - dstY;
- if (dy > 0)
- {
- h2 -= dy;
- dstY += CAST_S16(dy);
- y2 += dy;
- }
- dy = dstY + h2 - clipY - clip->h;
- if (dy > 0)
- h2 -= dy;
-
- if (h2 > 0)
- {
- for (int px = 0; px < w; px += iw)
- {
- const int dw = (px + iw >= w) ? w - px : iw;
- int dstX = px + xOffset;
- int x2 = srcX;
- int w2 = dw;
- if (x2 < 0)
- {
- w2 += x2;
- dstX -= CAST_S16(x2);
- x2 = 0;
- }
- const int maxw = src->w - x2;
- if (maxw < w2)
- w2 = maxw;
-
- int dx = clipX - dstX;
- if (dx > 0)
- {
- w2 -= dx;
- dstX += CAST_S16(dx);
- x2 += dx;
- }
- dx = dstX + w2 - clipX - clip->w;
- if (dx > 0)
- w2 -= dx;
-
- if (w2 > 0)
- {
- SDL_Rect srcRect =
- {
- CAST_S16(x2),
- CAST_S16(y2),
- CAST_U16(w2),
- CAST_U16(h2)
- };
-
- SDL_Rect dstRect =
- {
- CAST_S16(dstX),
- CAST_S16(dstY),
- CAST_U16(w2),
- CAST_U16(h2)
- };
-
- SDL_LowerBlit(src, &srcRect, mSurface, &dstRect);
- }
-
-// SDL_BlitSurface(image->mSDLSurface, &srcRect, mWindow, &dstRect);
- }
- }
- }
-}
-
-void SDL2SoftwareGraphics::drawRescaledPattern(const Image *
- restrict const image,
- const int x, const int y,
- const int w, const int h,
- const int scaledWidth,
- const int scaledHeight)
- restrict2
-{
- // Check that preconditions for blitting are met.
- if (!mSurface || !image)
- return;
- if (!image->mSDLSurface)
- return;
-
- if (scaledHeight == 0 || scaledWidth == 0)
- return;
-
- Image *const tmpImage = image->SDLgetScaledImage(
- scaledWidth, scaledHeight);
- if (!tmpImage)
- return;
-
- const SDL_Rect &bounds = tmpImage->mBounds;
- const int iw = bounds.w;
- const int ih = bounds.h;
- if (iw == 0 || ih == 0)
- return;
-
- const ClipRect &top = mClipStack.top();
- const int xOffset = top.xOffset + x;
- const int yOffset = top.yOffset + y;
- const int srcX = bounds.x;
- const int srcY = bounds.y;
-
- for (int py = 0; py < h; py += ih) // Y position on pattern plane
- {
- const int dh = (py + ih >= h) ? h - py : ih;
- const int dstY = py + yOffset;
-
- for (int px = 0; px < w; px += iw) // X position on pattern plane
- {
- const int dw = (px + iw >= w) ? w - px : iw;
- const int dstX = px + xOffset;
-
- SDL_Rect srcRect =
- {
- CAST_S16(srcX),
- CAST_S16(srcY),
- CAST_U16(dw),
- CAST_U16(dh)
- };
-
- SDL_Rect dstRect =
- {
- CAST_S16(dstX),
- CAST_S16(dstY),
- 0,
- 0
- };
-
- SDL_BlitSurface(tmpImage->mSDLSurface, &srcRect,
- mSurface, &dstRect);
- }
- }
-
- delete tmpImage;
-}
-
-void SDL2SoftwareGraphics::calcPattern(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void SDL2SoftwareGraphics::calcPatternInline(ImageVertexes *
- restrict const vert,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- // Check that preconditions for blitting are met.
- if (!vert || !mSurface || !image || !image->mSDLSurface)
- return;
-
- const SDL_Rect &bounds = image->mBounds;
- const int iw = bounds.w;
- const int ih = bounds.h;
- if (iw == 0 || ih == 0)
- return;
-
- const ClipRect &top = mClipStack.top();
- const int xOffset = top.xOffset + x;
- const int yOffset = top.yOffset + y;
- const int srcX = bounds.x;
- const int srcY = bounds.y;
-
- for (int py = 0; py < h; py += ih) // Y position on pattern plane
- {
- const int dh = (py + ih >= h) ? h - py : ih;
- const int dstY = py + yOffset;
-
- for (int px = 0; px < w; px += iw) // X position on pattern plane
- {
- const int dw = (px + iw >= w) ? w - px : iw;
- const int dstX = px + xOffset;
-
- DoubleRect *const r = new DoubleRect;
- SDL_Rect &srcRect = r->src;
- srcRect.x = CAST_S16(srcX);
- srcRect.y = CAST_S16(srcY);
- srcRect.w = CAST_U16(dw);
- srcRect.h = CAST_U16(dh);
- SDL_Rect &dstRect = r->dst;
- dstRect.x = CAST_S16(dstX);
- dstRect.y = CAST_S16(dstY);
-
- if (SDL_FakeUpperBlit(image->mSDLSurface, &srcRect,
- mSurface, &dstRect) == 1)
- {
- vert->sdl.push_back(r);
- }
- else
- {
- delete r;
- }
- }
- }
-}
-
-void SDL2SoftwareGraphics::calcPattern(ImageCollection *restrict const vertCol,
- const Image *restrict const image,
- const int x,
- const int y,
- const int w,
- const int h) const restrict2
-{
- ImageVertexes *vert = nullptr;
- if (vertCol->currentImage != image)
- {
- vert = new ImageVertexes;
- vertCol->currentImage = image;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
-
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void SDL2SoftwareGraphics::calcTileVertexes(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- int x, int y) const restrict2
-{
- vert->image = image;
- calcTileSDL(vert, x, y);
-}
-
-void SDL2SoftwareGraphics::calcTileVertexesInline(ImageVertexes *
- restrict const vert,
- const Image *
- restrict const image,
- int x, int y) const restrict2
-{
- vert->image = image;
- calcTileSDL(vert, x, y);
-}
-
-void SDL2SoftwareGraphics::calcTileSDL(ImageVertexes *restrict const vert,
- int x, int y) const restrict2
-{
- // Check that preconditions for blitting are met.
- if (!vert || !vert->image || !vert->image->mSDLSurface)
- return;
-
- const Image *const image = vert->image;
- const ClipRect &top = mClipStack.top();
- const SDL_Rect &bounds = image->mBounds;
-
- DoubleRect *rect = new DoubleRect;
- rect->src.x = CAST_S16(bounds.x);
- rect->src.y = CAST_S16(bounds.y);
- rect->src.w = CAST_U16(bounds.w);
- rect->src.h = CAST_U16(bounds.h);
- rect->dst.x = CAST_S16(x + top.xOffset);
- rect->dst.y = CAST_S16(y + top.yOffset);
- if (SDL_FakeUpperBlit(image->mSDLSurface, &rect->src,
- mSurface, &rect->dst) == 1)
- {
- vert->sdl.push_back(rect);
- }
- else
- {
- delete rect;
- }
-}
-
-void SDL2SoftwareGraphics::calcTileCollection(ImageCollection *
- restrict const vertCol,
- const Image *
- restrict const image,
- int x, int y) restrict2
-{
- if (!vertCol)
- return;
- if (vertCol->currentImage != image)
- {
- ImageVertexes *const vert = new ImageVertexes;
- vertCol->currentImage = image;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- calcTileSDL(vert, x, y);
- }
- else
- {
- calcTileSDL(vertCol->currentVert, x, y);
- }
-}
-
-void SDL2SoftwareGraphics::drawTileCollection(const ImageCollection
- *restrict const vertCol)
- restrict2
-{
- const ImageVertexesVector &draws = vertCol->draws;
- const ImageCollectionCIter it_end = draws.end();
- for (ImageCollectionCIter it = draws.begin(); it != it_end; ++ it)
- {
- const ImageVertexes *const vert = *it;
- const Image *const img = vert->image;
- const DoubleRects *const rects = &vert->sdl;
- DoubleRects::const_iterator it2 = rects->begin();
- const DoubleRects::const_iterator it2_end = rects->end();
- while (it2 != it2_end)
- {
- SDL_LowerBlit(img->mSDLSurface, &(*it2)->src,
- mSurface, &(*it2)->dst);
- ++ it2;
- }
- }
-}
-
-void SDL2SoftwareGraphics::drawTileVertexes(const ImageVertexes *
- restrict const vert) restrict2
-{
- if (!vert)
- return;
- // vert and img must be != 0
- const Image *const img = vert->image;
- const DoubleRects *const rects = &vert->sdl;
- DoubleRects::const_iterator it = rects->begin();
- const DoubleRects::const_iterator it_end = rects->end();
- while (it != it_end)
- {
- SDL_LowerBlit(img->mSDLSurface, &(*it)->src, mSurface, &(*it)->dst);
- ++ it;
- }
-}
-
-void SDL2SoftwareGraphics::updateScreen() restrict2
-{
- BLOCK_START("Graphics::updateScreen")
- SDL_UpdateWindowSurfaceRects(mWindow, &mRect, 1);
- BLOCK_END("Graphics::updateScreen")
-}
-
-void SDL2SoftwareGraphics::calcWindow(ImageCollection *restrict const vertCol,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- ImageVertexes *vert = nullptr;
- Image *const image = imgRect.grid[4];
- if (!image)
- return;
- if (vertCol->currentImage != image)
- {
- vert = new ImageVertexes;
- vertCol->currentImage = image;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
- calcImageRect(vert, x, y, w, h, imgRect);
-}
-
-int SDL2SoftwareGraphics::SDL_FakeUpperBlit(const SDL_Surface *restrict const
- src,
- SDL_Rect *restrict const srcrect,
- const SDL_Surface *restrict const
- dst,
- SDL_Rect *restrict dstrect)
- const restrict2
-{
- int srcx, srcy, w, h;
-
- // Make sure the surfaces aren't locked
- if (!src || !dst)
- return -1;
-
- if (!srcrect || !dstrect)
- return -1;
-
- srcx = srcrect->x;
- w = srcrect->w;
- if (srcx < 0)
- {
- w += srcx;
- dstrect->x -= CAST_S16(srcx);
- srcx = 0;
- }
- int maxw = src->w - srcx;
- if (maxw < w)
- w = maxw;
-
- srcy = srcrect->y;
- h = srcrect->h;
- if (srcy < 0)
- {
- h += srcy;
- dstrect->y -= CAST_S16(srcy);
- srcy = 0;
- }
- int maxh = src->h - srcy;
- if (maxh < h)
- h = maxh;
-
- const SDL_Rect *const clip = &dst->clip_rect;
- const int clipX = clip->x;
- const int clipY = clip->y;
- int dx = clipX - dstrect->x;
- if (dx > 0)
- {
- w -= dx;
- dstrect->x += CAST_S16(dx);
- srcx += dx;
- }
- dx = dstrect->x + w - clipX - clip->w;
- if (dx > 0)
- w -= dx;
-
- int dy = clipY - dstrect->y;
- if (dy > 0)
- {
- h -= dy;
- dstrect->y += CAST_S16(dy);
- srcy += dy;
- }
- dy = dstrect->y + h - clipY - clip->h;
- if (dy > 0)
- h -= dy;
-
- if (w > 0 && h > 0)
- {
- if (srcrect)
- {
- srcrect->x = CAST_S16(srcx);
- srcrect->y = CAST_S16(srcy);
- srcrect->w = CAST_S16(w);
- srcrect->h = CAST_S16(h);
- }
- dstrect->w = CAST_S16(w);
- dstrect->h = CAST_S16(h);
-
- return 1;
-// return SDL_LowerBlit(src, &sr, dst, dstrect);
- }
- dstrect->w = dstrect->h = 0;
- return 0;
-}
-
-void SDL2SoftwareGraphics::fillRectangle(const Rect &restrict rectangle)
- restrict2
-{
- FUNC_BLOCK("Graphics::fillRectangle", 1)
- if (mClipStack.empty())
- return;
-
- const ClipRect& top = mClipStack.top();
-
- Rect area = rectangle;
- area.x += top.xOffset;
- area.y += top.yOffset;
-
- if (!area.isIntersecting(top))
- return;
-
- if (mAlpha)
- {
- const int x1 = area.x > top.x ? area.x : top.x;
- const int y1 = area.y > top.y ? area.y : top.y;
- const int x2 = area.x + area.width < top.x + top.width ?
- area.x + area.width : top.x + top.width;
- const int y2 = area.y + area.height < top.y + top.height ?
- area.y + area.height : top.y + top.height;
- int x, y;
-
- SDL_LockSurface(mSurface);
-
- const int bpp = mSurface->format->BytesPerPixel;
- const uint32_t pixel = SDL_MapRGB(mSurface->format,
- CAST_U8(mColor.r), CAST_U8(mColor.g),
- CAST_U8(mColor.b));
-
- switch (bpp)
- {
- case 1:
- for (y = y1; y < y2; y++)
- {
- uint8_t *const p = static_cast<uint8_t *>(mSurface->pixels)
- + y * mSurface->pitch;
- for (x = x1; x < x2; x++)
- *(p + x) = CAST_U8(pixel);
- }
- break;
- case 2:
- for (y = y1; y < y2; y++)
- {
- uint8_t *const p0 = static_cast<uint8_t *>(
- mSurface->pixels) + y * mSurface->pitch;
- for (x = x1; x < x2; x++)
- {
- uint8_t *const p = p0 + x * 2;
- *reinterpret_cast<uint16_t *>(p) = SDLAlpha16(
- CAST_U16(pixel),
- *reinterpret_cast<uint16_t *>(p),
- CAST_U8(mColor.a), mSurface->format);
- }
- }
- break;
- case 3:
- {
- const int ca = 255 - mColor.a;
- const int cr = mColor.r * mColor.a;
- const int cg = mColor.g * mColor.a;
- const int cb = mColor.b * mColor.a;
-
- for (y = y1; y < y2; y++)
- {
- uint8_t *const p0 = static_cast<uint8_t *>(
- mSurface->pixels) + y * mSurface->pitch;
- for (x = x1; x < x2; x++)
- {
- uint8_t *const p = p0 + x * 3;
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- p[2] = CAST_U8((p[2] * ca + cb) >> 8);
- p[1] = CAST_U8((p[1] * ca + cg) >> 8);
- p[0] = CAST_U8((p[0] * ca + cr) >> 8);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- p[0] = CAST_U8((p[0] * ca + cb) >> 8);
- p[1] = CAST_U8((p[1] * ca + cg) >> 8);
- p[2] = CAST_U8((p[2] * ca + cr) >> 8);
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- }
- break;
- }
- case 4:
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- const unsigned pb = (pixel & 0xff) * mColor.a;
- const unsigned pg = (pixel & 0xff00) * mColor.a;
- const unsigned pr = (pixel & 0xff0000) * mColor.a;
- const unsigned a1 = (255 - mColor.a);
-
- for (y = y1; y < y2; y++)
- {
- uint8_t *const p0 = static_cast<uint8_t *>(
- mSurface->pixels) + y * mSurface->pitch;
- for (x = x1; x < x2; x++)
- {
- uint8_t *p = p0 + x * 4;
- uint32_t dst = *reinterpret_cast<uint32_t *>(p);
- const unsigned int b = (pb + (dst & 0xff) * a1) >> 8;
- const unsigned int g = (pg + (dst & 0xff00) * a1) >> 8;
- const unsigned int r = (pr
- + (dst & 0xff0000) * a1) >> 8;
-
- *reinterpret_cast<uint32_t *>(p) = ((b & 0xff)
- | (g & 0xff00) | (r & 0xff0000));
- }
- }
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- if (!cR)
- {
- cR = new unsigned int[0x100];
- cG = new unsigned int[0x100];
- cB = new unsigned int[0x100];
- mOldPixel = 0;
- mOldAlpha = mColor.a;
- }
-
- const SDL_PixelFormat * const format = mSurface->format;
- const unsigned rMask = format->Rmask;
- const unsigned gMask = format->Gmask;
- const unsigned bMask = format->Bmask;
-// const unsigned aMask = format->Amask;
- unsigned rShift = rMask / 0xff;
- unsigned gShift = gMask / 0xff;
- unsigned bShift = bMask / 0xff;
- if (!rShift)
- rShift = 1;
- if (!gShift)
- gShift = 1;
- if (!bShift)
- bShift = 1;
- if (pixel != mOldPixel || mColor.a != mOldAlpha)
- {
- const unsigned pb = (pixel & bMask) * mColor.a;
- const unsigned pg = (pixel & gMask) * mColor.a;
- const unsigned pr = (pixel & rMask) * mColor.a;
- const unsigned a0 = (255 - mColor.a);
-
- const unsigned int a1 = a0 * bShift;
- const unsigned int a2 = a0 * gShift;
- const unsigned int a3 = a0 * rShift;
-
- for (int f = 0; f <= 0xff; f ++)
- {
- cB[f] = ((pb + f * a1) >> 8) & bMask;
- cG[f] = ((pg + f * a2) >> 8) & gMask;
- cR[f] = ((pr + f * a3) >> 8) & rMask;
- }
-
- mOldPixel = pixel;
- mOldAlpha = mColor.a;
- }
-
- for (y = y1; y < y2; y++)
- {
- uint32_t *const p0 = reinterpret_cast<uint32_t*>(
- static_cast<uint8_t*>(mSurface->pixels)
- + y * mSurface->pitch);
- for (x = x1; x < x2; x++)
- {
- uint32_t *const p = p0 + x;
- const uint32_t dst = *p;
- *p = cB[dst & bMask / bShift]
- | cG[(dst & gMask) / gShift]
- | cR[(dst & rMask) / rShift];
- }
- }
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- break;
- }
- default:
- break;
- }
-
- SDL_UnlockSurface(mSurface);
- }
- else
- {
- defRectFromArea(rect, area);
- const uint32_t color = SDL_MapRGBA(mSurface->format,
- CAST_S8(mColor.r),
- CAST_S8(mColor.g),
- CAST_S8(mColor.b),
- CAST_S8(mColor.a));
- SDL_FillRect(mSurface, &rect, color);
- }
-}
-
-void SDL2SoftwareGraphics::beginDraw() restrict2
-{
- pushClipArea(Rect(0, 0, mRect.w, mRect.h));
-}
-
-void SDL2SoftwareGraphics::endDraw() restrict2
-{
- popClipArea();
-}
-
-void SDL2SoftwareGraphics::pushClipArea(const Rect &restrict area) restrict2
-{
- Graphics::pushClipArea(area);
-
- const ClipRect &carea = mClipStack.top();
- defRectFromArea(rect, carea);
- SDL_SetClipRect(mSurface, &rect);
-}
-
-void SDL2SoftwareGraphics::popClipArea() restrict2
-{
- Graphics::popClipArea();
-
- if (mClipStack.empty())
- return;
-
- const ClipRect &carea = mClipStack.top();
- defRectFromArea(rect, carea);
- SDL_SetClipRect(mSurface, &rect);
-}
-
-void SDL2SoftwareGraphics::drawPoint(int x, int y) restrict2
-{
- if (mClipStack.empty())
- return;
-
- const ClipRect& top = mClipStack.top();
-
- x += top.xOffset;
- y += top.yOffset;
-
- if (!top.isPointInRect(x, y))
- return;
-
- if (mAlpha)
- SDLputPixelAlpha(mSurface, x, y, mColor);
- else
- SDLputPixel(mSurface, x, y, mColor);
-}
-
-void SDL2SoftwareGraphics::drawHLine(int x1, int y, int x2) restrict2
-{
- if (mClipStack.empty())
- return;
-
- const ClipRect& top = mClipStack.top();
-
- const int xOffset = top.xOffset;
- x1 += xOffset;
- y += top.yOffset;
- x2 += xOffset;
-
- const int topY = top.y;
- if (y < topY || y >= topY + top.height)
- return;
-
- if (x1 > x2)
- {
- x1 ^= x2;
- x2 ^= x1;
- x1 ^= x2;
- }
-
- const int topX = top.x;
- if (topX > x1)
- {
- if (topX > x2)
- return;
-
- x1 = topX;
- }
-
- const int sumX = topX + top.width;
- if (sumX <= x2)
- {
- if (sumX <= x1)
- return;
-
- x2 = sumX -1;
- }
-
- const int bpp = mSurface->format->BytesPerPixel;
-
- SDL_LockSurface(mSurface);
-
- uint8_t *p = static_cast<uint8_t*>(mSurface->pixels)
- + y * mSurface->pitch + x1 * bpp;
-
- const uint32_t pixel = SDL_MapRGB(mSurface->format,
- CAST_U8(mColor.r),
- CAST_U8(mColor.g),
- CAST_U8(mColor.b));
- switch (bpp)
- {
- case 1:
- for (; x1 <= x2; ++x1)
- *(p++) = CAST_U8(pixel);
- break;
-
- case 2:
- {
- uint16_t* q = reinterpret_cast<uint16_t*>(p);
- const uint16_t pixel1 = CAST_U16(pixel);
- for (; x1 <= x2; ++x1)
- *(q++) = pixel1;
- break;
- }
-
- case 3:
- {
- const uint8_t b0 = CAST_U8((pixel >> 16) & 0xff);
- const uint8_t b1 = CAST_U8((pixel >> 8) & 0xff);
- const uint8_t b2 = CAST_U8(pixel & 0xff);
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- for (; x1 <= x2; ++x1)
- {
- p[0] = b0;
- p[1] = b1;
- p[2] = b2;
- p += 3;
- }
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- for (; x1 <= x2; ++x1)
- {
- p[0] = b2;
- p[1] = b1;
- p[2] = b0;
- p += 3;
- }
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- break;
- }
-
- case 4:
- {
- uint32_t *q = reinterpret_cast<uint32_t*>(p);
- if (mAlpha)
- {
- unsigned char a = CAST_U8(mColor.a);
- unsigned char a1 = CAST_U8(255U - a);
- const int b0 = (pixel & 0xff) * a;
- const int g0 = (pixel & 0xff00) * a;
- const int r0 = (pixel & 0xff0000) * a;
- for (; x1 <= x2; ++x1)
- {
- const unsigned int b = (b0 + (*q & 0xff) * a1) >> 8;
- const unsigned int g = (g0 + (*q & 0xff00) * a1) >> 8;
- const unsigned int r = (r0 + (*q & 0xff0000) * a1) >> 8;
- *q = (b & 0xff) | (g & 0xff00) | (r & 0xff0000);
-
- q++;
- }
- }
- else
- {
- for (; x1 <= x2; ++x1)
- *(q++) = pixel;
- }
- break;
- }
- default:
- break;
- } // end switch
-
- SDL_UnlockSurface(mSurface);
-}
-
-void SDL2SoftwareGraphics::drawVLine(int x, int y1, int y2) restrict2
-{
- if (mClipStack.empty())
- return;
-
- const ClipRect& top = mClipStack.top();
-
- const int yOffset = top.yOffset;
- x += top.xOffset;
- y1 += yOffset;
- y2 += yOffset;
-
- if (x < top.x || x >= top.x + top.width)
- return;
-
- if (y1 > y2)
- {
- y1 ^= y2;
- y2 ^= y1;
- y1 ^= y2;
- }
-
- if (top.y > y1)
- {
- if (top.y > y2)
- return;
-
- y1 = top.y;
- }
-
- const int sumY = top.y + top.height;
- if (sumY <= y2)
- {
- if (sumY <= y1)
- return;
-
- y2 = sumY - 1;
- }
-
- const int bpp = mSurface->format->BytesPerPixel;
-
- SDL_LockSurface(mSurface);
-
- uint8_t *p = static_cast<uint8_t*>(mSurface->pixels)
- + y1 * mSurface->pitch + x * bpp;
-
- const uint32_t pixel = SDL_MapRGB(mSurface->format,
- CAST_U8(mColor.r),
- CAST_U8(mColor.g),
- CAST_U8(mColor.b));
-
- const int pitch = mSurface->pitch;
- switch (bpp)
- {
- case 1:
- for (; y1 <= y2; ++y1)
- {
- *p = CAST_U8(pixel);
- p += pitch;
- }
- break;
-
- case 2:
- for (; y1 <= y2; ++ y1)
- {
- *reinterpret_cast<uint16_t*>(p)
- = CAST_U16(pixel);
- p += pitch;
- }
- break;
-
- case 3:
- {
- const uint8_t b0 = CAST_U8((pixel >> 16) & 0xff);
- const uint8_t b1 = CAST_U8((pixel >> 8) & 0xff);
- const uint8_t b2 = CAST_U8(pixel & 0xff);
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- for (; y1 <= y2; ++y1)
- {
- p[0] = b0;
- p[1] = b1;
- p[2] = b2;
- p += pitch;
- }
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- for (; y1 <= y2; ++y1)
- {
- p[0] = b2;
- p[1] = b1;
- p[2] = b0;
- p += pitch;
- }
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
-
- break;
- }
-
- case 4:
- {
- if (mAlpha)
- {
- unsigned char a = CAST_U8(mColor.a);
- unsigned char a1 = CAST_U8(255U - a);
- const int b0 = (pixel & 0xff) * a;
- const int g0 = (pixel & 0xff00) * a;
- const int r0 = (pixel & 0xff0000) * a;
- for (; y1 <= y2; ++y1)
- {
- const unsigned int dst = *reinterpret_cast<uint32_t*>(p);
- const unsigned int b = (b0 + (dst & 0xff) * a1) >> 8;
- const unsigned int g = (g0 + (dst & 0xff00) * a1) >> 8;
- const unsigned int r = (r0 + (dst & 0xff0000) * a1) >> 8;
- *reinterpret_cast<uint32_t*>(p) =
- (b & 0xff) | (g & 0xff00) | (r & 0xff0000);
-
- p += pitch;
- }
- }
- else
- {
- for (; y1 <= y2; ++y1)
- {
- *reinterpret_cast<uint32_t*>(p) = pixel;
- p += pitch;
- }
- }
- break;
- }
-
- default:
- break;
- } // end switch
-
- SDL_UnlockSurface(mSurface);
-}
-
-void SDL2SoftwareGraphics::drawRectangle(const Rect &restrict rectangle)
- restrict2
-{
- const int x1 = rectangle.x;
- const int x2 = x1 + rectangle.width - 1;
- const int y1 = rectangle.y;
- const int y2 = y1 + rectangle.height - 1;
-
- drawHLine(x1, y1, x2);
- drawHLine(x1, y2, x2);
-
- drawVLine(x1, y1, y2);
- drawVLine(x2, y1, y2);
-}
-
-void SDL2SoftwareGraphics::drawLine(int x1, int y1,
- int x2, int y2) restrict2
-{
- if (x1 == x2)
- {
- drawVLine(x1, y1, y2);
- return;
- }
- if (y1 == y2)
- {
- drawHLine(x1, y1, x2);
- return;
- }
-}
-
-bool SDL2SoftwareGraphics::setVideoMode(const int w, const int h,
- const int scale,
- const int bpp,
- const bool fs,
- const bool hwaccel,
- const bool resize,
- const bool noFrame,
- const bool allowHighDPI) restrict2
-{
- setMainFlags(w, h,
- scale,
- bpp,
- fs,
- hwaccel,
- resize,
- noFrame,
- allowHighDPI);
-
- if (!(mWindow = graphicsManager.createWindow(w, h, bpp,
- getSoftwareFlags())))
- {
- mRect.w = 0;
- mRect.h = 0;
- mSurface = nullptr;
- return false;
- }
-
- mSurface = SDL_GetWindowSurface(mWindow);
- ImageHelper::dumpSurfaceFormat(mSurface);
- SDL2SoftwareImageHelper::setFormat(mSurface->format);
-
- int w1 = 0;
- int h1 = 0;
- SDL_GetWindowSize(mWindow, &w1, &h1);
- mRect.w = w1;
- mRect.h = h1;
-
- mRenderer = graphicsManager.createRenderer(mWindow, mRendererFlags);
- return videoInfo();
-}
-
-bool SDL2SoftwareGraphics::resizeScreen(const int width,
- const int height) restrict2
-{
- const bool ret = Graphics::resizeScreen(width, height);
-
- mSurface = SDL_GetWindowSurface(mWindow);
- SDL2SoftwareImageHelper::setFormat(mSurface->format);
- return ret;
-}
-
-void SDL2SoftwareGraphics::drawImageRect(const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- #include "render/graphics_drawImageRect.hpp"
-}
-
-void SDL2SoftwareGraphics::calcImageRect(ImageVertexes *restrict const vert,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect)
- restrict2
-{
- #include "render/graphics_calcImageRect.hpp"
-}
-
-#endif // USE_SDL2
diff --git a/src/render/sdl2softwaregraphics.h b/src/render/sdl2softwaregraphics.h
deleted file mode 100644
index 438b02674..000000000
--- a/src/render/sdl2softwaregraphics.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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 RENDER_SDL2SOFTWAREGRAPHICS_H
-#define RENDER_SDL2SOFTWAREGRAPHICS_H
-
-#ifdef USE_SDL2
-
-#include "render/graphics.h"
-
-#include "localconsts.h"
-
-class Image;
-class ImageCollection;
-class ImageVertexes;
-class MapLayer;
-
-struct SDL_Surface;
-
-/**
- * A central point of control for graphics.
- */
-class SDL2SoftwareGraphics final : public Graphics
-{
- public:
- friend class Sdl2SoftwareScreenshotHelper;
-
- /**
- * Constructor.
- */
- SDL2SoftwareGraphics();
-
- A_DELETE_COPY(SDL2SoftwareGraphics)
-
- /**
- * Destructor.
- */
- ~SDL2SoftwareGraphics();
-
- void setRendererFlags(const uint32_t flags)
- restrict2 noexcept2 override final
- { mRendererFlags = flags; }
-
- #include "render/graphicsdef.hpp"
- RENDER_GRAPHICSDEF_HPP
-
- #include "render/softwaregraphicsdef.hpp"
- RENDER_SOFTWAREGRAPHICSDEF_HPP
-
- bool resizeScreen(const int width,
- const int height) restrict2 override final;
-
- protected:
- int SDL_FakeUpperBlit(const SDL_Surface *restrict const src,
- SDL_Rect *restrict const srcrect,
- const SDL_Surface *restrict const dst,
- SDL_Rect *restrict dstrect) const restrict2;
-
- void drawHLine(int x1, int y, int x2) restrict2;
-
- void drawVLine(int x, int y1, int y2) restrict2;
-
- uint32_t mRendererFlags;
- SDL_Surface *mSurface;
- uint32_t mOldPixel;
- unsigned int mOldAlpha;
-};
-
-#endif // USE_SDL2
-#endif // RENDER_SDL2SOFTWAREGRAPHICS_H
diff --git a/src/render/sdlgraphics.cpp b/src/render/sdlgraphics.cpp
deleted file mode 100644
index b67e23d8e..000000000
--- a/src/render/sdlgraphics.cpp
+++ /dev/null
@@ -1,1518 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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 USE_SDL2
-
-#include "render/sdlgraphics.h"
-
-#include "graphicsmanager.h"
-
-#include "utils/sdlcheckutils.h"
-
-#include "utils/sdlpixel.h"
-
-#include "render/vertexes/imagecollection.h"
-
-#include "resources/imagerect.h"
-
-#include "resources/image/image.h"
-
-#include "debug.h"
-
-#ifndef SDL_BIG_ENDIAN
-#error missing SDL_endian.h
-#endif // SDL_BYTEORDER
-
-#if SDL_BYTEORDER == SDL_LIL_ENDIAN
-static unsigned int *cR = nullptr;
-static unsigned int *cG = nullptr;
-static unsigned int *cB = nullptr;
-#endif // SDL_BYTEORDER == SDL_LIL_ENDIAN
-
-SDLGraphics::SDLGraphics() :
- Graphics(),
- mOldPixel(0),
- mOldAlpha(0)
-{
- mOpenGL = RENDER_SOFTWARE;
- mName = "Software";
-}
-
-SDLGraphics::~SDLGraphics()
-{
-}
-
-void SDLGraphics::drawRescaledImage(const Image *restrict const image,
- int dstX, int dstY,
- const int desiredWidth,
- const int desiredHeight) restrict2
-{
- FUNC_BLOCK("Graphics::drawRescaledImage", 1)
- // Check that preconditions for blitting are met.
- if (mWindow == nullptr ||
- image == nullptr ||
- image->mSDLSurface == nullptr)
- {
- return;
- }
-
- Image *const tmpImage = image->SDLgetScaledImage(
- desiredWidth, desiredHeight);
-
- if ((tmpImage == nullptr) || (tmpImage->mSDLSurface == nullptr))
- return;
-
- const ClipRect &top = mClipStack.top();
- const SDL_Rect &bounds = image->mBounds;
-
- SDL_Rect srcRect =
- {
- CAST_S16(bounds.x),
- CAST_S16(bounds.y),
- CAST_U16(bounds.w),
- CAST_U16(bounds.h)
- };
-
- SDL_Rect dstRect =
- {
- CAST_S16(dstX + top.xOffset),
- CAST_S16(dstY + top.yOffset),
- 0,
- 0
- };
-
- SDL_BlitSurface(tmpImage->mSDLSurface, &srcRect, mWindow, &dstRect);
- delete tmpImage;
-}
-
-void SDLGraphics::drawImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void SDLGraphics::drawImageInline(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- FUNC_BLOCK("Graphics::drawImage", 1)
- // Check that preconditions for blitting are met.
- if (mWindow == nullptr ||
- image == nullptr ||
- image->mSDLSurface == nullptr)
- {
- return;
- }
-
- const ClipRect &top = mClipStack.top();
- const SDL_Rect &bounds = image->mBounds;
-
- SDL_Surface *const src = image->mSDLSurface;
-
- int srcX = bounds.x;
- int srcY = bounds.y;
- dstX += top.xOffset;
- dstY += top.yOffset;
-
- int w = bounds.w;
- int h = bounds.h;
- if (srcX < 0)
- {
- w += srcX;
- dstX -= CAST_S16(srcX);
- srcX = 0;
- }
- const int maxw = src->w - srcX;
- if (maxw < w)
- w = maxw;
-
- if (srcY < 0)
- {
- h += srcY;
- dstY -= CAST_S16(srcY);
- srcY = 0;
- }
- const int maxh = src->h - srcY;
- if (maxh < h)
- h = maxh;
-
- const SDL_Rect *const clip = &mWindow->clip_rect;
- const int clipX = clip->x;
- const int clipY = clip->y;
- int dx = clipX - dstX;
- if (dx > 0)
- {
- w -= dx;
- dstX += CAST_S16(dx);
- srcX += dx;
- }
- dx = dstX + w - clipX - clip->w;
- if (dx > 0)
- w -= dx;
-
- int dy = clipY - dstY;
- if (dy > 0)
- {
- h -= dy;
- dstY += CAST_S16(dy);
- srcY += dy;
- }
- dy = dstY + h - clipY - clip->h;
- if (dy > 0)
- h -= dy;
-
- if (w > 0 && h > 0)
- {
- SDL_Rect srcRect =
- {
- CAST_S16(srcX),
- CAST_S16(srcY),
- CAST_U16(w),
- CAST_U16(h)
- };
-
- SDL_Rect dstRect =
- {
- CAST_S16(dstX),
- CAST_S16(dstY),
- CAST_U16(w),
- CAST_U16(h)
- };
-
- SDL_LowerBlit(src, &srcRect, mWindow, &dstRect);
- }
-}
-
-void SDLGraphics::copyImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- drawImageInline(image, dstX, dstY);
-}
-
-void SDLGraphics::drawImageCached(const Image *restrict const image,
- int x, int y) restrict2
-{
- FUNC_BLOCK("Graphics::drawImageCached", 1)
- // Check that preconditions for blitting are met.
- if (mWindow == nullptr ||
- image == nullptr ||
- image->mSDLSurface == nullptr)
- {
- return;
- }
-
- const ClipRect &top = mClipStack.top();
- const SDL_Rect &bounds = image->mBounds;
-
- SDL_Surface *const src = image->mSDLSurface;
-
- int srcX = bounds.x;
- int srcY = bounds.y;
- x += top.xOffset;
- y += top.yOffset;
-
- int w = bounds.w;
- int h = bounds.h;
- if (srcX < 0)
- {
- w += srcX;
- x -= CAST_S16(srcX);
- srcX = 0;
- }
- const int maxw = src->w - srcX;
- if (maxw < w)
- w = maxw;
-
- if (srcY < 0)
- {
- h += srcY;
- y -= CAST_S16(srcY);
- srcY = 0;
- }
- const int maxh = src->h - srcY;
- if (maxh < h)
- h = maxh;
-
- const SDL_Rect *const clip = &mWindow->clip_rect;
- const int clipX = clip->x;
- const int clipY = clip->y;
- int dx = clipX - x;
- if (dx > 0)
- {
- w -= dx;
- x += CAST_S16(dx);
- srcX += dx;
- }
- dx = x + w - clipX - clip->w;
- if (dx > 0)
- w -= dx;
-
- int dy = clipY - y;
- if (dy > 0)
- {
- h -= dy;
- y += CAST_S16(dy);
- srcY += dy;
- }
- dy = y + h - clipY - clip->h;
- if (dy > 0)
- h -= dy;
-
- if (w > 0 && h > 0)
- {
- SDL_Rect srcRect =
- {
- CAST_S16(srcX),
- CAST_S16(srcY),
- CAST_U16(w),
- CAST_U16(h)
- };
-
- SDL_Rect dstRect =
- {
- CAST_S16(x),
- CAST_S16(y),
- CAST_U16(w),
- CAST_U16(h)
- };
-
- SDL_LowerBlit(src, &srcRect, mWindow, &dstRect);
- }
-}
-
-void SDLGraphics::drawPatternCached(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- FUNC_BLOCK("Graphics::drawPatternCached", 1)
- // Check that preconditions for blitting are met.
- if ((mWindow == nullptr) || (image == nullptr))
- return;
- if (image->mSDLSurface == nullptr)
- return;
-
- const SDL_Rect &bounds = image->mBounds;
- const int iw = bounds.w;
- const int ih = bounds.h;
- if (iw == 0 || ih == 0)
- return;
-
- const ClipRect &top = mClipStack.top();
- const int xOffset = top.xOffset + x;
- const int yOffset = top.yOffset + y;
- const int srcX = bounds.x;
- const int srcY = bounds.y;
- SDL_Surface *const src = image->mSDLSurface;
- const SDL_Rect *const clip = &mWindow->clip_rect;
- const int clipX = clip->x;
- const int clipY = clip->y;
-
- for (int py = 0; py < h; py += ih)
- {
- const int dh = (py + ih >= h) ? h - py : ih;
- int dstY = py + yOffset;
- int y2 = srcY;
- int h2 = dh;
- if (y2 < 0)
- {
- h2 += y2;
- dstY -= CAST_S16(y2);
- y2 = 0;
- }
- const int maxh = src->h - y2;
- if (maxh < h2)
- h2 = maxh;
-
- int dy = clipY - dstY;
- if (dy > 0)
- {
- h2 -= dy;
- dstY += CAST_S16(dy);
- y2 += dy;
- }
- dy = dstY + h2 - clipY - clip->h;
- if (dy > 0)
- h2 -= dy;
-
- if (h2 > 0)
- {
- for (int px = 0; px < w; px += iw)
- {
- const int dw = (px + iw >= w) ? w - px : iw;
- int dstX = px + xOffset;
- int x2 = srcX;
- int w2 = dw;
- if (x2 < 0)
- {
- w2 += x2;
- dstX -= CAST_S16(x2);
- x2 = 0;
- }
- const int maxw = src->w - x2;
- if (maxw < w2)
- w2 = maxw;
-
- int dx = clipX - dstX;
- if (dx > 0)
- {
- w2 -= dx;
- dstX += CAST_S16(dx);
- x2 += dx;
- }
- dx = dstX + w2 - clipX - clip->w;
- if (dx > 0)
- w2 -= dx;
-
- if (w2 > 0)
- {
- SDL_Rect srcRect =
- {
- CAST_S16(x2),
- CAST_S16(y2),
- CAST_U16(w2),
- CAST_U16(h2)
- };
-
- SDL_Rect dstRect =
- {
- CAST_S16(dstX),
- CAST_S16(dstY),
- CAST_U16(w2),
- CAST_U16(h2)
- };
-
- SDL_LowerBlit(src, &srcRect, mWindow, &dstRect);
- }
-
-// SDL_BlitSurface(image->mSDLSurface, &srcRect, mWindow, &dstRect);
- }
- }
- }
-}
-
-void SDLGraphics::completeCache() restrict2
-{
-}
-
-void SDLGraphics::drawPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- drawPatternInline(image, x, y, w, h);
-}
-
-void SDLGraphics::drawPatternInline(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) restrict2
-{
- FUNC_BLOCK("Graphics::drawPattern", 1)
- // Check that preconditions for blitting are met.
- if ((mWindow == nullptr) || (image == nullptr))
- return;
- if (image->mSDLSurface == nullptr)
- return;
-
- const SDL_Rect &bounds = image->mBounds;
- const int iw = bounds.w;
- const int ih = bounds.h;
- if (iw == 0 || ih == 0)
- return;
-
- const ClipRect &top = mClipStack.top();
- const int xOffset = top.xOffset + x;
- const int yOffset = top.yOffset + y;
- const int srcX = bounds.x;
- const int srcY = bounds.y;
- SDL_Surface *const src = image->mSDLSurface;
- const SDL_Rect *const clip = &mWindow->clip_rect;
- const int clipX = clip->x;
- const int clipY = clip->y;
-
- for (int py = 0; py < h; py += ih)
- {
- const int dh = (py + ih >= h) ? h - py : ih;
- int dstY = py + yOffset;
- int y2 = srcY;
- int h2 = dh;
- if (y2 < 0)
- {
- h2 += y2;
- dstY -= CAST_S16(y2);
- y2 = 0;
- }
- const int maxh = src->h - y2;
- if (maxh < h2)
- h2 = maxh;
-
- int dy = clipY - dstY;
- if (dy > 0)
- {
- h2 -= dy;
- dstY += CAST_S16(dy);
- y2 += dy;
- }
- dy = dstY + h2 - clipY - clip->h;
- if (dy > 0)
- h2 -= dy;
-
- if (h2 > 0)
- {
- for (int px = 0; px < w; px += iw)
- {
- const int dw = (px + iw >= w) ? w - px : iw;
- int dstX = px + xOffset;
- int x2 = srcX;
- int w2 = dw;
- if (x2 < 0)
- {
- w2 += x2;
- dstX -= CAST_S16(x2);
- x2 = 0;
- }
- const int maxw = src->w - x2;
- if (maxw < w2)
- w2 = maxw;
-
- int dx = clipX - dstX;
- if (dx > 0)
- {
- w2 -= dx;
- dstX += CAST_S16(dx);
- x2 += dx;
- }
- dx = dstX + w2 - clipX - clip->w;
- if (dx > 0)
- w2 -= dx;
-
- if (w2 > 0)
- {
- SDL_Rect srcRect =
- {
- CAST_S16(x2),
- CAST_S16(y2),
- CAST_U16(w2),
- CAST_U16(h2)
- };
-
- SDL_Rect dstRect =
- {
- CAST_S16(dstX),
- CAST_S16(dstY),
- CAST_U16(w2),
- CAST_U16(h2)
- };
-
- SDL_LowerBlit(src, &srcRect, mWindow, &dstRect);
- }
-
-// SDL_BlitSurface(image->mSDLSurface, &srcRect, mWindow, &dstRect);
- }
- }
- }
-}
-
-void SDLGraphics::drawRescaledPattern(const Image *restrict const image,
- const int x, const int y,
- const int w, const int h,
- const int scaledWidth,
- const int scaledHeight) restrict2
-{
- // Check that preconditions for blitting are met.
- if ((mWindow == nullptr) || (image == nullptr))
- return;
- if (image->mSDLSurface == nullptr)
- return;
-
- if (scaledHeight == 0 || scaledWidth == 0)
- return;
-
- Image *const tmpImage = image->SDLgetScaledImage(
- scaledWidth, scaledHeight);
- if (tmpImage == nullptr)
- return;
-
- const SDL_Rect &bounds = tmpImage->mBounds;
- const int iw = bounds.w;
- const int ih = bounds.h;
- if (iw == 0 || ih == 0)
- return;
-
- const ClipRect &top = mClipStack.top();
- const int xOffset = top.xOffset + x;
- const int yOffset = top.yOffset + y;
- const int srcX = bounds.x;
- const int srcY = bounds.y;
-
- for (int py = 0; py < h; py += ih) // Y position on pattern plane
- {
- const int dh = (py + ih >= h) ? h - py : ih;
- const int dstY = py + yOffset;
-
- for (int px = 0; px < w; px += iw) // X position on pattern plane
- {
- const int dw = (px + iw >= w) ? w - px : iw;
- const int dstX = px + xOffset;
-
- SDL_Rect srcRect =
- {
- CAST_S16(srcX),
- CAST_S16(srcY),
- CAST_U16(dw),
- CAST_U16(dh)
- };
-
- SDL_Rect dstRect =
- {
- CAST_S16(dstX),
- CAST_S16(dstY),
- 0,
- 0
- };
-
- SDL_BlitSurface(tmpImage->mSDLSurface, &srcRect,
- mWindow, &dstRect);
- }
- }
-
- delete tmpImage;
-}
-
-void SDLGraphics::calcPattern(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) const restrict2
-{
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void SDLGraphics::calcPatternInline(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) const restrict2
-{
- // Check that preconditions for blitting are met.
- if (vert == nullptr ||
- mWindow == nullptr ||
- image == nullptr ||
- image->mSDLSurface == nullptr)
- {
- return;
- }
-
- const SDL_Rect &bounds = image->mBounds;
- const int iw = bounds.w;
- const int ih = bounds.h;
- if (iw == 0 || ih == 0)
- return;
-
- const ClipRect &top = mClipStack.top();
- const int xOffset = top.xOffset + x;
- const int yOffset = top.yOffset + y;
- const int srcX = bounds.x;
- const int srcY = bounds.y;
-
- for (int py = 0; py < h; py += ih) // Y position on pattern plane
- {
- const int dh = (py + ih >= h) ? h - py : ih;
- const int dstY = py + yOffset;
-
- for (int px = 0; px < w; px += iw) // X position on pattern plane
- {
- const int dw = (px + iw >= w) ? w - px : iw;
- const int dstX = px + xOffset;
-
- DoubleRect *const r = new DoubleRect;
- SDL_Rect &srcRect = r->src;
- srcRect.x = CAST_S16(srcX);
- srcRect.y = CAST_S16(srcY);
- srcRect.w = CAST_U16(dw);
- srcRect.h = CAST_U16(dh);
- SDL_Rect &dstRect = r->dst;
- dstRect.x = CAST_S16(dstX);
- dstRect.y = CAST_S16(dstY);
-
- if (SDL_FakeUpperBlit(image->mSDLSurface, &srcRect,
- mWindow, &dstRect) == 1)
- {
- vert->sdl.push_back(r);
- }
- else
- {
- delete r;
- }
- }
- }
-}
-
-void SDLGraphics::calcPattern(ImageCollection *restrict const vertCol,
- const Image *restrict const image,
- const int x, const int y,
- const int w, const int h) const restrict2
-{
- if (vertCol == nullptr || image == nullptr)
- return;
-
- ImageVertexes *vert = nullptr;
- if (vertCol->currentImage != image)
- {
- vert = new ImageVertexes;
- vertCol->currentImage = image;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
-
- calcPatternInline(vert, image, x, y, w, h);
-}
-
-void SDLGraphics::calcTileVertexes(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- int x, int y) const restrict2
-{
- vert->image = image;
- calcTileSDL(vert, x, y);
-}
-
-void SDLGraphics::calcTileVertexesInline(ImageVertexes *restrict const vert,
- const Image *restrict const image,
- int x, int y) const restrict2
-{
- vert->image = image;
- calcTileSDL(vert, x, y);
-}
-
-void SDLGraphics::calcTileSDL(ImageVertexes *restrict const vert,
- int x, int y) const restrict2
-{
- // Check that preconditions for blitting are met.
- if (vert == nullptr ||
- vert->image == nullptr ||
- vert->image->mSDLSurface == nullptr)
- {
- return;
- }
-
- const Image *const image = vert->image;
- const ClipRect &top = mClipStack.top();
- const SDL_Rect &bounds = image->mBounds;
-
- DoubleRect *rect = new DoubleRect;
- rect->src.x = CAST_S16(bounds.x);
- rect->src.y = CAST_S16(bounds.y);
- rect->src.w = CAST_U16(bounds.w);
- rect->src.h = CAST_U16(bounds.h);
- rect->dst.x = CAST_S16(x + top.xOffset);
- rect->dst.y = CAST_S16(y + top.yOffset);
- if (SDL_FakeUpperBlit(image->mSDLSurface, &rect->src,
- mWindow, &rect->dst) == 1)
- {
- vert->sdl.push_back(rect);
- }
- else
- {
- delete rect;
- }
-}
-
-void SDLGraphics::calcTileCollection(ImageCollection *restrict const vertCol,
- const Image *restrict const image,
- int x, int y) restrict2
-{
- if (vertCol == nullptr)
- return;
- if (vertCol->currentImage != image)
- {
- ImageVertexes *const vert = new ImageVertexes;
- vertCol->currentImage = image;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- calcTileSDL(vert, x, y);
- }
- else
- {
- calcTileSDL(vertCol->currentVert, x, y);
- }
-}
-
-void SDLGraphics::drawTileCollection(const ImageCollection
- *restrict const vertCol) restrict2
-{
- const ImageVertexesVector &draws = vertCol->draws;
- const ImageCollectionCIter it_end = draws.end();
- for (ImageCollectionCIter it = draws.begin(); it != it_end; ++ it)
- {
- const ImageVertexes *const vert = *it;
- const Image *const img = vert->image;
- const DoubleRects *const rects = &vert->sdl;
- DoubleRects::const_iterator it2 = rects->begin();
- const DoubleRects::const_iterator it2_end = rects->end();
- while (it2 != it2_end)
- {
- SDL_LowerBlit(img->mSDLSurface, &(*it2)->src,
- mWindow, &(*it2)->dst);
- ++ it2;
- }
- }
-}
-
-void SDLGraphics::drawTileVertexes(const ImageVertexes *
- restrict const vert) restrict2
-{
- if (vert == nullptr)
- return;
- // vert and img must be != 0
- const Image *const img = vert->image;
- const DoubleRects *const rects = &vert->sdl;
- DoubleRects::const_iterator it = rects->begin();
- const DoubleRects::const_iterator it_end = rects->end();
- while (it != it_end)
- {
- SDL_LowerBlit(img->mSDLSurface, &(*it)->src, mWindow, &(*it)->dst);
- ++ it;
- }
-}
-
-void SDLGraphics::updateScreen() restrict2
-{
- BLOCK_START("Graphics::updateScreen")
- if (mDoubleBuffer)
- {
- SDL_Flip(mWindow);
- }
- else
- {
- SDL_UpdateRects(mWindow, 1, &mRect);
-// SDL_UpdateRect(mWindow, 0, 0, 0, 0);
- }
- BLOCK_END("Graphics::updateScreen")
-}
-
-void SDLGraphics::calcWindow(ImageCollection *restrict const vertCol,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect) restrict2
-{
- ImageVertexes *vert = nullptr;
- Image *const image = imgRect.grid[4];
- if (image == nullptr)
- return;
- if (vertCol->currentImage != image)
- {
- vert = new ImageVertexes;
- vertCol->currentImage = image;
- vertCol->currentVert = vert;
- vert->image = image;
- vertCol->draws.push_back(vert);
- }
- else
- {
- vert = vertCol->currentVert;
- }
- calcImageRect(vert, x, y, w, h, imgRect);
-}
-
-int SDLGraphics::SDL_FakeUpperBlit(const SDL_Surface *restrict const src,
- SDL_Rect *restrict const srcrect,
- const SDL_Surface *restrict const dst,
- SDL_Rect *restrict dstrect) const restrict2
-{
- int srcx, srcy, w, h;
-
- // Make sure the surfaces aren't locked
- if ((src == nullptr) || (dst == nullptr))
- return -1;
-
- if ((srcrect == nullptr) || (dstrect == nullptr))
- return -1;
-
- srcx = srcrect->x;
- w = srcrect->w;
- if (srcx < 0)
- {
- w += srcx;
- dstrect->x -= CAST_S16(srcx);
- srcx = 0;
- }
- int maxw = src->w - srcx;
- if (maxw < w)
- w = maxw;
-
- srcy = srcrect->y;
- h = srcrect->h;
- if (srcy < 0)
- {
- h += srcy;
- dstrect->y -= CAST_S16(srcy);
- srcy = 0;
- }
- int maxh = src->h - srcy;
- if (maxh < h)
- h = maxh;
-
- const SDL_Rect *const clip = &dst->clip_rect;
- const int clipX = clip->x;
- const int clipY = clip->y;
- int dx = clipX - dstrect->x;
- if (dx > 0)
- {
- w -= dx;
- dstrect->x += CAST_S16(dx);
- srcx += dx;
- }
- dx = dstrect->x + w - clipX - clip->w;
- if (dx > 0)
- w -= dx;
-
- int dy = clipY - dstrect->y;
- if (dy > 0)
- {
- h -= dy;
- dstrect->y += CAST_S16(dy);
- srcy += dy;
- }
- dy = dstrect->y + h - clipY - clip->h;
- if (dy > 0)
- h -= dy;
-
- if (w > 0 && h > 0)
- {
- srcrect->x = CAST_S16(srcx);
- srcrect->y = CAST_S16(srcy);
- srcrect->w = CAST_S16(w);
- srcrect->h = CAST_S16(h);
- dstrect->w = CAST_S16(w);
- dstrect->h = CAST_S16(h);
-
- return 1;
-// return SDL_LowerBlit(src, &sr, dst, dstrect);
- }
- dstrect->w = dstrect->h = 0;
- return 0;
-}
-
-void SDLGraphics::fillRectangle(const Rect &restrict rectangle) restrict2
-{
- FUNC_BLOCK("Graphics::fillRectangle", 1)
- if (mClipStack.empty())
- return;
-
- const ClipRect &restrict top = mClipStack.top();
-
- Rect area = rectangle;
- area.x += top.xOffset;
- area.y += top.yOffset;
-
- if (!area.isIntersecting(top))
- return;
-
- if (mAlpha)
- {
- const int x1 = area.x > top.x ? area.x : top.x;
- const int y1 = area.y > top.y ? area.y : top.y;
- const int x2 = area.x + area.width < top.x + top.width ?
- area.x + area.width : top.x + top.width;
- const int y2 = area.y + area.height < top.y + top.height ?
- area.y + area.height : top.y + top.height;
-
- SDL_LockSurface(mWindow);
-
- const int bpp = mWindow->format->BytesPerPixel;
- const uint32_t pixel = SDL_MapRGB(mWindow->format,
- CAST_U8(mColor.r), CAST_U8(mColor.g),
- CAST_U8(mColor.b));
-
- switch (bpp)
- {
- case 1:
- cilk_for (int y = y1; y < y2; y++)
- {
- uint8_t *const p = static_cast<uint8_t *>(mWindow->pixels)
- + CAST_SIZE(y * mWindow->pitch);
- for (int x = x1; x < x2; x++)
- {
- *(p + CAST_SIZE(x))
- = CAST_U8(pixel);
- }
- }
- break;
- case 2:
- cilk_for (int y = y1; y < y2; y++)
- {
- uint8_t *const p0 = static_cast<uint8_t *>(mWindow->pixels)
- + CAST_SIZE(y * mWindow->pitch);
- for (int x = x1; x < x2; x++)
- {
- uint8_t *const p = p0 + CAST_SIZE(x * 2);
- *reinterpret_cast<uint16_t *>(p) = SDLAlpha16(
- CAST_U16(pixel),
- *reinterpret_cast<uint16_t *>(p),
- CAST_U8(mColor.a), mWindow->format);
- }
- }
- break;
- case 3:
- {
- const int ca = 255 - mColor.a;
- const int cr = mColor.r * mColor.a;
- const int cg = mColor.g * mColor.a;
- const int cb = mColor.b * mColor.a;
-
- cilk_for (int y = y1; y < y2; y++)
- {
- uint8_t *const p0 = static_cast<uint8_t *>(mWindow->pixels)
- + CAST_SIZE(y * mWindow->pitch);
- for (int x = x1; x < x2; x++)
- {
- uint8_t *const p = p0 + CAST_SIZE(x * 3);
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- p[2] = CAST_U8((p[2] * ca + cb) >> 8);
- p[1] = CAST_U8((p[1] * ca + cg) >> 8);
- p[0] = CAST_U8((p[0] * ca + cr) >> 8);
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
- p[0] = CAST_U8((p[0] * ca + cb) >> 8);
- p[1] = CAST_U8((p[1] * ca + cg) >> 8);
- p[2] = CAST_U8((p[2] * ca + cr) >> 8);
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- }
- }
- break;
- }
- case 4:
- {
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- const unsigned pb = (pixel & 0xff) * mColor.a;
- const unsigned pg = (pixel & 0xff00) * mColor.a;
- const unsigned pr = (pixel & 0xff0000) * mColor.a;
- const unsigned a1 = (255 - mColor.a);
-
- cilk_for (int y = y1; y < y2; y++)
- {
- uint8_t *const p0 = static_cast<uint8_t *>(mWindow->pixels)
- + y * mWindow->pitch;
- for (int x = x1; x < x2; x++)
- {
- uint8_t *p = p0 + x * 4;
- uint32_t dst = *reinterpret_cast<uint32_t *>(p);
- const unsigned int b = (pb + (dst & 0xff) * a1) >> 8;
- const unsigned int g = (pg + (dst & 0xff00) * a1) >> 8;
- const unsigned int r = (pr
- + (dst & 0xff0000) * a1) >> 8;
-
- *reinterpret_cast<uint32_t *>(p) = ((b & 0xff)
- | (g & 0xff00) | (r & 0xff0000));
- }
- }
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
- if (cR == nullptr)
- {
- cR = new unsigned int[0x100];
- cG = new unsigned int[0x100];
- cB = new unsigned int[0x100];
- mOldPixel = 0;
- mOldAlpha = mColor.a;
- }
-
- const SDL_PixelFormat * const format = mWindow->format;
- const unsigned rMask = format->Rmask;
- const unsigned gMask = format->Gmask;
- const unsigned bMask = format->Bmask;
-// const unsigned aMask = format->Amask;
- unsigned rShift = rMask / 0xff;
- unsigned gShift = gMask / 0xff;
- unsigned bShift = bMask / 0xff;
- if (rShift == 0u)
- rShift = 1;
- if (gShift == 0u)
- gShift = 1;
- if (bShift == 0u)
- bShift = 1;
- if (pixel != mOldPixel || mColor.a != mOldAlpha)
- {
- const unsigned pb = (pixel & bMask) * mColor.a;
- const unsigned pg = (pixel & gMask) * mColor.a;
- const unsigned pr = (pixel & rMask) * mColor.a;
- const unsigned a0 = 255 - mColor.a;
-
- const unsigned int a1 = a0 * bShift;
- const unsigned int a2 = a0 * gShift;
- const unsigned int a3 = a0 * rShift;
-
- for (int f = 0; f <= 0xff; f ++)
- {
- cB[f] = ((pb + f * a1) >> 8) & bMask;
- cG[f] = ((pg + f * a2) >> 8) & gMask;
- cR[f] = ((pr + f * a3) >> 8) & rMask;
- }
-
- mOldPixel = pixel;
- mOldAlpha = mColor.a;
- }
-
- cilk_for (int y = y1; y < y2; y++)
- {
- uint32_t *const p0 = reinterpret_cast<uint32_t*>(
- static_cast<uint8_t*>(mWindow->pixels)
- + CAST_SIZE(y * mWindow->pitch));
- for (int x = x1; x < x2; x++)
- {
- uint32_t *const p = p0 + CAST_SIZE(x);
- const uint32_t dst = *p;
- *p = cB[dst & bMask / bShift]
- | cG[(dst & gMask) / gShift]
- | cR[(dst & rMask) / rShift];
- }
- }
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- break;
- }
- default:
- break;
- }
-
- SDL_UnlockSurface(mWindow);
- }
- else
- {
- SDL_Rect rect =
- {
- CAST_S16(area.x),
- CAST_S16(area.y),
- CAST_U16(area.width),
- CAST_U16(area.height)
- };
-
- const uint32_t color = SDL_MapRGBA(mWindow->format,
- CAST_S8(mColor.r),
- CAST_S8(mColor.g),
- CAST_S8(mColor.b),
- CAST_S8(mColor.a));
- SDL_FillRect(mWindow, &rect, color);
- }
-}
-
-void SDLGraphics::beginDraw() restrict2
-{
- pushClipArea(Rect(0, 0, mRect.w, mRect.h));
-}
-
-void SDLGraphics::endDraw() restrict2
-{
- popClipArea();
-}
-
-void SDLGraphics::pushClipArea(const Rect &restrict area) restrict2
-{
- Graphics::pushClipArea(area);
- const ClipRect &restrict carea = mClipStack.top();
- const SDL_Rect rect =
- {
- CAST_S16(carea.x),
- CAST_S16(carea.y),
- CAST_U16(carea.width),
- CAST_U16(carea.height)
- };
- SDL_SetClipRect(mWindow, &rect);
-}
-
-void SDLGraphics::popClipArea() restrict2
-{
- Graphics::popClipArea();
-
- if (mClipStack.empty())
- return;
-
- const ClipRect &restrict carea = mClipStack.top();
- const SDL_Rect rect =
- {
- CAST_S16(carea.x),
- CAST_S16(carea.y),
- CAST_U16(carea.width),
- CAST_U16(carea.height)
- };
-
- SDL_SetClipRect(mWindow, &rect);
-}
-
-void SDLGraphics::drawPoint(int x, int y) restrict2
-{
- if (mClipStack.empty())
- return;
-
- const ClipRect& top = mClipStack.top();
-
- x += top.xOffset;
- y += top.yOffset;
-
- if (!top.isPointInRect(x, y))
- return;
-
- if (mAlpha)
- SDLputPixelAlpha(mWindow, x, y, mColor);
- else
- SDLputPixel(mWindow, x, y, mColor);
-}
-
-void SDLGraphics::drawHLine(int x1, int y, int x2) restrict2
-{
- if (mClipStack.empty())
- return;
-
- const ClipRect& top = mClipStack.top();
-
- const int xOffset = top.xOffset;
- x1 += xOffset;
- y += top.yOffset;
- x2 += xOffset;
-
- const int topY = top.y;
- if (y < topY || y >= topY + top.height)
- return;
-
- if (x1 > x2)
- {
- x1 ^= x2;
- x2 ^= x1;
- x1 ^= x2;
- }
-
- const int topX = top.x;
- if (topX > x1)
- {
- if (topX > x2)
- return;
-
- x1 = topX;
- }
-
- const int sumX = topX + top.width;
- if (sumX <= x2)
- {
- if (sumX <= x1)
- return;
-
- x2 = sumX -1;
- }
-
- const int bpp = mWindow->format->BytesPerPixel;
-
- SDL_LockSurface(mWindow);
-
- uint8_t *p = static_cast<uint8_t*>(mWindow->pixels)
- + CAST_SIZE(y * mWindow->pitch + x1 * bpp);
-
- const uint32_t pixel = SDL_MapRGB(mWindow->format,
- CAST_U8(mColor.r),
- CAST_U8(mColor.g),
- CAST_U8(mColor.b));
- switch (bpp)
- {
- case 1:
- for (; x1 <= x2; ++x1)
- *(p++) = CAST_U8(pixel);
- break;
-
- case 2:
- {
- uint16_t* q = reinterpret_cast<uint16_t*>(p);
- const uint16_t pixel1 = CAST_U16(pixel);
- for (; x1 <= x2; ++x1)
- *(q++) = pixel1;
- break;
- }
-
- case 3:
- {
- const uint8_t b0 = CAST_U8((pixel >> 16) & 0xff);
- const uint8_t b1 = CAST_U8((pixel >> 8) & 0xff);
- const uint8_t b2 = CAST_U8(pixel & 0xff);
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- for (; x1 <= x2; ++x1)
- {
- p[0] = b0;
- p[1] = b1;
- p[2] = b2;
- p += 3;
- }
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
- for (; x1 <= x2; ++x1)
- {
- p[0] = b2;
- p[1] = b1;
- p[2] = b0;
- p += 3;
- }
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- break;
- }
-
- case 4:
- {
- uint32_t *q = reinterpret_cast<uint32_t*>(p);
- if (mAlpha)
- {
- unsigned char a = CAST_U8(mColor.a);
- unsigned char a1 = CAST_U8(255U - a);
- const int b0 = (pixel & 0xff) * a;
- const int g0 = (pixel & 0xff00) * a;
- const int r0 = (pixel & 0xff0000) * a;
- for (; x1 <= x2; ++x1)
- {
- const unsigned int b = (b0 + (*q & 0xff) * a1) >> 8;
- const unsigned int g = (g0 + (*q & 0xff00) * a1) >> 8;
- const unsigned int r = (r0 + (*q & 0xff0000) * a1) >> 8;
- *q = (b & 0xff) | (g & 0xff00) | (r & 0xff0000);
-
- q++;
- }
- }
- else
- {
- for (; x1 <= x2; ++x1)
- *(q++) = pixel;
- }
- break;
- }
- default:
- break;
- } // end switch
-
- SDL_UnlockSurface(mWindow);
-}
-
-void SDLGraphics::drawVLine(int x, int y1, int y2) restrict2
-{
- if (mClipStack.empty())
- return;
-
- const ClipRect &restrict top = mClipStack.top();
-
- const int yOffset = top.yOffset;
- x += top.xOffset;
- y1 += yOffset;
- y2 += yOffset;
-
- if (x < top.x || x >= top.x + top.width)
- return;
-
- if (y1 > y2)
- {
- y1 ^= y2;
- y2 ^= y1;
- y1 ^= y2;
- }
-
- if (top.y > y1)
- {
- if (top.y > y2)
- return;
-
- y1 = top.y;
- }
-
- const int sumY = top.y + top.height;
- if (sumY <= y2)
- {
- if (sumY <= y1)
- return;
-
- y2 = sumY - 1;
- }
-
- const int bpp = mWindow->format->BytesPerPixel;
-
- SDL_LockSurface(mWindow);
-
- uint8_t *p = static_cast<uint8_t*>(mWindow->pixels)
- + CAST_SIZE(y1 * mWindow->pitch + x * bpp);
-
- const uint32_t pixel = SDL_MapRGB(mWindow->format,
- CAST_U8(mColor.r),
- CAST_U8(mColor.g),
- CAST_U8(mColor.b));
-
- const int pitch = mWindow->pitch;
- switch (bpp)
- {
- case 1:
- for (; y1 <= y2; ++y1)
- {
- *p = CAST_U8(pixel);
- p += pitch;
- }
- break;
-
- case 2:
- for (; y1 <= y2; ++ y1)
- {
- *reinterpret_cast<uint16_t*>(p)
- = CAST_U16(pixel);
- p += pitch;
- }
- break;
-
- case 3:
- {
- const uint8_t b0 = CAST_U8((pixel >> 16) & 0xff);
- const uint8_t b1 = CAST_U8((pixel >> 8) & 0xff);
- const uint8_t b2 = CAST_U8(pixel & 0xff);
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
- for (; y1 <= y2; ++y1)
- {
- p[0] = b0;
- p[1] = b1;
- p[2] = b2;
- p += pitch;
- }
-#else // SDL_BYTEORDER == SDL_BIG_ENDIAN
- for (; y1 <= y2; ++y1)
- {
- p[0] = b2;
- p[1] = b1;
- p[2] = b0;
- p += pitch;
- }
-#endif // SDL_BYTEORDER == SDL_BIG_ENDIAN
- break;
- }
-
- case 4:
- {
- if (mAlpha)
- {
- unsigned char a = CAST_U8(mColor.a);
- unsigned char a1 = CAST_U8(255U - a);
- const int b0 = (pixel & 0xff) * a;
- const int g0 = (pixel & 0xff00) * a;
- const int r0 = (pixel & 0xff0000) * a;
- for (; y1 <= y2; ++y1)
- {
- const unsigned int dst = *reinterpret_cast<uint32_t*>(p);
- const unsigned int b = (b0 + (dst & 0xff) * a1) >> 8;
- const unsigned int g = (g0 + (dst & 0xff00) * a1) >> 8;
- const unsigned int r = (r0 + (dst & 0xff0000) * a1) >> 8;
- *reinterpret_cast<uint32_t*>(p) =
- (b & 0xff) | (g & 0xff00) | (r & 0xff0000);
-
- p += pitch;
- }
- }
- else
- {
- for (; y1 <= y2; ++y1)
- {
- *reinterpret_cast<uint32_t*>(p) = pixel;
- p += pitch;
- }
- }
- break;
- }
-
- default:
- break;
- } // end switch
-
- SDL_UnlockSurface(mWindow);
-}
-
-void SDLGraphics::drawRectangle(const Rect &restrict rectangle) restrict2
-{
- const int x1 = rectangle.x;
- const int x2 = x1 + rectangle.width - 1;
- const int y1 = rectangle.y;
- const int y2 = y1 + rectangle.height - 1;
-
- drawHLine(x1, y1, x2);
- drawHLine(x1, y2, x2);
-
- drawVLine(x1, y1, y2);
- drawVLine(x2, y1, y2);
-}
-
-void SDLGraphics::drawLine(int x1, int y1,
- int x2, int y2) restrict2
-{
- if (x1 == x2)
- {
- drawVLine(x1, y1, y2);
- return;
- }
- if (y1 == y2)
- {
- drawHLine(x1, y1, x2);
- return;
- }
-
- // other cases not implemented
-}
-
-bool SDLGraphics::setVideoMode(const int w, const int h,
- const int scale,
- const int bpp,
- const bool fs,
- const bool hwaccel,
- const bool resize,
- const bool noFrame,
- const bool allowHighDPI) restrict2
-{
- setMainFlags(w, h,
- scale,
- bpp,
- fs,
- hwaccel,
- resize,
- noFrame,
- allowHighDPI);
-
- if ((mWindow = graphicsManager.createWindow(w, h, bpp,
- getSoftwareFlags())) == nullptr)
- {
- mRect.w = 0;
- mRect.h = 0;
- return false;
- }
-
- mRect.w = CAST_U16(mWindow->w);
- mRect.h = CAST_U16(mWindow->h);
-
- return videoInfo();
-}
-
-void SDLGraphics::drawImageRect(const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect) restrict2
-{
- #include "render/graphics_drawImageRect.hpp"
-}
-
-void SDLGraphics::calcImageRect(ImageVertexes *restrict const vert,
- const int x, const int y,
- const int w, const int h,
- const ImageRect &restrict imgRect) restrict2
-{
- #include "render/graphics_calcImageRect.hpp"
-}
-
-#endif // USE_SDL2
diff --git a/src/render/sdlgraphics.h b/src/render/sdlgraphics.h
deleted file mode 100644
index e93c5df06..000000000
--- a/src/render/sdlgraphics.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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 RENDER_SDLGRAPHICS_H
-#define RENDER_SDLGRAPHICS_H
-
-#ifdef USE_SDL2
-#include "render/sdl2graphics.h"
-RENDER_SDL2GRAPHICS_H
-
-#else
-
-#include "render/graphics.h"
-
-#include "localconsts.h"
-
-/**
- * A central point of control for graphics.
- */
-class SDLGraphics final : public Graphics
-{
- public:
- /**
- * Constructor.
- */
- SDLGraphics();
-
- A_DELETE_COPY(SDLGraphics)
-
- /**
- * Destructor.
- */
- ~SDLGraphics();
-
- #include "render/graphicsdef.hpp"
- RENDER_GRAPHICSDEF_HPP
-
- #include "render/softwaregraphicsdef.hpp"
- RENDER_SOFTWAREGRAPHICSDEF_HPP
-
- protected:
- int SDL_FakeUpperBlit(const SDL_Surface *restrict const src,
- SDL_Rect *restrict const srcrect,
- const SDL_Surface *restrict const dst,
- SDL_Rect *restrict dstrect) const restrict2;
-
- void drawHLine(int x1, int y, int x2) restrict2;
-
- void drawVLine(int x, int y1, int y2) restrict2;
-
- uint32_t mOldPixel;
- unsigned int mOldAlpha;
-};
-
-#endif // USE_SDL2
-#endif // RENDER_SDLGRAPHICS_H
diff --git a/src/render/shaders/shader.cpp b/src/render/shaders/shader.cpp
deleted file mode 100644
index f3cb54833..000000000
--- a/src/render/shaders/shader.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2014-2017 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/>.
- */
-
-#ifdef USE_OPENGL
-
-#include "render/shaders/shader.h"
-
-#include "render/opengl/mgl.h"
-
-#include "debug.h"
-
-Shader::Shader(const unsigned int id) :
- Resource(),
- mShaderId(id)
-{
-}
-
-Shader::~Shader()
-{
- if (mShaderId != 0u)
- mglDeleteShader(mShaderId);
-}
-
-#endif // USE_OPENGL
diff --git a/src/render/shaders/shader.h b/src/render/shaders/shader.h
deleted file mode 100644
index f11d9d44e..000000000
--- a/src/render/shaders/shader.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2014-2017 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 RENDER_SHADERS_SHADER_H
-#define RENDER_SHADERS_SHADER_H
-
-#ifdef USE_OPENGL
-
-#include "resources/resource.h"
-
-class Shader final : public Resource
-{
- public:
- explicit Shader(const unsigned int id);
-
- ~Shader();
-
- A_DELETE_COPY(Shader)
-
- unsigned int getShaderId() const noexcept2
- { return mShaderId; }
-
- protected:
- unsigned int mShaderId;
-};
-
-#endif // USE_OPENGL
-#endif // RENDER_SHADERS_SHADER_H
diff --git a/src/render/shaders/shaderprogram.cpp b/src/render/shaders/shaderprogram.cpp
deleted file mode 100644
index 52cb025d7..000000000
--- a/src/render/shaders/shaderprogram.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2014-2017 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/>.
- */
-
-#ifdef USE_OPENGL
-
-#include "render/shaders/shaderprogram.h"
-
-#include "render/opengl/mgl.h"
-#ifdef __native_client__
-#include "render/opengl/naclglfunctions.h"
-#endif // __native_client__
-
-#include "render/shaders/shader.h"
-
-#include "debug.h"
-
-ShaderProgram::ShaderProgram(const unsigned int id,
- Shader *const vertex,
- Shader *const fragment) :
- Resource(),
- mProgramId(id),
- mVertex(vertex),
- mFragment(fragment)
-{
-}
-
-ShaderProgram::~ShaderProgram()
-{
- if (mProgramId != 0u)
- mglDeleteProgram(mProgramId);
- if (mVertex != nullptr)
- mVertex->decRef();
- if (mFragment != nullptr)
- mFragment->decRef();
-}
-
-#endif // USE_OPENGL
diff --git a/src/render/shaders/shaderprogram.h b/src/render/shaders/shaderprogram.h
deleted file mode 100644
index b8d8e4bc3..000000000
--- a/src/render/shaders/shaderprogram.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2014-2017 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 RENDER_SHADERS_SHADERPROGRAM_H
-#define RENDER_SHADERS_SHADERPROGRAM_H
-
-#ifdef USE_OPENGL
-
-#include "resources/resource.h"
-
-class Shader;
-
-class ShaderProgram final : public Resource
-{
- public:
- ShaderProgram(const unsigned int id,
- Shader *const vertex,
- Shader *const fragment);
-
- ~ShaderProgram();
-
- A_DELETE_COPY(ShaderProgram)
-
- unsigned int getProgramId() const noexcept2
- { return mProgramId; }
-
- protected:
- unsigned int mProgramId;
- Shader *mVertex;
- Shader *mFragment;
-};
-
-#endif // USE_OPENGL
-#endif // RENDER_SHADERS_SHADERPROGRAM_H
diff --git a/src/render/shaders/shadersmanager.cpp b/src/render/shaders/shadersmanager.cpp
deleted file mode 100644
index 8c4cd79e6..000000000
--- a/src/render/shaders/shadersmanager.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2014-2017 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/>.
- */
-
-#include "render/shaders/shadersmanager.h"
-
-#ifdef USE_OPENGL
-
-#include "configuration.h"
-#include "logger.h"
-
-#include "fs/virtfs/tools.h"
-
-#include "utils/cast.h"
-
-#include "render/opengl/mgl.h"
-#ifdef __native_client__
-#include "render/opengl/naclglfunctions.h"
-#endif // __native_client__
-
-#include "render/shaders/shader.h"
-#include "render/shaders/shaderprogram.h"
-
-#include "resources/loaders/shaderloader.h"
-
-#include "debug.h"
-
-ShadersManager shaders;
-
-Shader *ShadersManager::createShader(const unsigned int type,
- const std::string &fileName)
-{
- const std::string str = VirtFs::loadTextFileString(fileName);
- const char *ptrStr = str.c_str();
- GLuint shaderId = mglCreateShader(type);
- mglShaderSource(shaderId, 1, &ptrStr, nullptr);
- mglCompileShader(shaderId);
-
- GLint isCompiled = 0;
- mglGetShaderiv(shaderId, GL_COMPILE_STATUS, &isCompiled);
- if (isCompiled == GL_TRUE)
- return new Shader(shaderId);
- GLint len = 0;
- mglGetShaderiv(shaderId, GL_INFO_LOG_LENGTH, &len);
- char *buf = new char[CAST_SIZE(len) + 1];
- mglGetShaderInfoLog(shaderId, len, &len, buf);
- buf[len] = 0;
- logger->log("Shader '%s' compilation error: %s", fileName.c_str(), buf);
- delete [] buf;
- mglDeleteShader(shaderId);
- return nullptr;
-}
-
-ShaderProgram *ShadersManager::createProgram(const std::string &vertex,
- const std::string &fragment,
- const bool isNewShader)
-{
- Shader *const vertexShader = static_cast<Shader*>(
- Loader::getShader(GL_VERTEX_SHADER, vertex));
- if (vertexShader == nullptr)
- return nullptr;
-
- Shader *const fragmentShader = static_cast<Shader*>(
- Loader::getShader(GL_FRAGMENT_SHADER, fragment));
-
- if (fragmentShader == nullptr)
- {
- vertexShader->decRef();
- return nullptr;
- }
-
- GLuint programId = mglCreateProgram();
- if (programId == 0u)
- {
- vertexShader->decRef();
- fragmentShader->decRef();
- return nullptr;
- }
-
- mglAttachShader(programId, vertexShader->getShaderId());
- mglAttachShader(programId, fragmentShader->getShaderId());
- if (isNewShader)
- mglBindFragDataLocation(programId, 0, "outColor");
- else
- mglBindAttribLocation(programId, 0, "position");
- mglLinkProgram(programId);
- GLint isLinked = 0;
- mglGetProgramiv(programId, GL_LINK_STATUS, &isLinked);
- if (isLinked == GL_TRUE)
- {
- mglValidateProgram(programId);
- GLint isValidated = 0;
- mglGetProgramiv(programId, GL_VALIDATE_STATUS, &isValidated);
- if (isValidated == GL_TRUE)
- return new ShaderProgram(programId, vertexShader, fragmentShader);
- mglDeleteProgram(programId);
- return nullptr;
- }
-
- GLint len = 0;
- mglGetProgramiv(programId, GL_INFO_LOG_LENGTH, &len);
- char *buf = new char[CAST_SIZE(len) + 1];
- mglGetProgramInfoLog(programId, len, &len, buf);
- buf[len] = 0;
- logger->log("Program '%s, %s' compilation error: %s",
- vertexShader->mIdPath.c_str(),
- fragmentShader->mIdPath.c_str(),
- buf);
- delete [] buf;
- mglDeleteProgram(programId);
- return nullptr;
-}
-
-ShaderProgram *ShadersManager::getSimpleProgram()
-{
- const std::string dir = paths.getStringValue("shaders");
- return createProgram(dir + paths.getStringValue("simpleVertexShader"),
- dir + paths.getStringValue("simpleFragmentShader"),
- true);
-}
-
-ShaderProgram *ShadersManager::getGles2Program()
-{
- const std::string dir = paths.getStringValue("shaders");
- return createProgram(dir + paths.getStringValue("gles2VertexShader"),
- dir + paths.getStringValue("gles2FragmentShader"),
- false);
-}
-
-#endif // USE_OPENGL
diff --git a/src/render/shaders/shadersmanager.h b/src/render/shaders/shadersmanager.h
deleted file mode 100644
index 8e45290c4..000000000
--- a/src/render/shaders/shadersmanager.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2014-2017 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 RENDER_SHADERS_SHADERSMANAGER_H
-#define RENDER_SHADERS_SHADERSMANAGER_H
-
-#ifdef USE_OPENGL
-
-#include <string>
-
-#include "localconsts.h"
-
-class Shader;
-class ShaderProgram;
-
-class ShadersManager final
-{
- public:
- ShadersManager()
- { }
-
- A_DELETE_COPY(ShadersManager)
-
- Shader *createShader(const unsigned int type,
- const std::string &fileName) A_WARN_UNUSED;
-
- ShaderProgram *createProgram(const std::string &vertex,
- const std::string &fragment,
- const bool isNewShader)
- A_WARN_UNUSED;
-
- ShaderProgram *getSimpleProgram();
-
- ShaderProgram *getGles2Program();
-};
-
-extern ShadersManager shaders;
-
-#endif // USE_OPENGL
-#endif // RENDER_SHADERS_SHADERSMANAGER_H
diff --git a/src/render/softwaregraphicsdef.hpp b/src/render/softwaregraphicsdef.hpp
deleted file mode 100644
index b630a0657..000000000
--- a/src/render/softwaregraphicsdef.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-#define RENDER_SOFTWAREGRAPHICSDEF_HPP
-
-public:
- void calcTileSDL(ImageVertexes *restrict const vert,
- int x, int y) const restrict2 override final;
diff --git a/src/render/surfacegraphics.cpp b/src/render/surfacegraphics.cpp
deleted file mode 100644
index 52d0db57f..000000000
--- a/src/render/surfacegraphics.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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/>.
- */
-
-#include "render/surfacegraphics.h"
-
-#ifndef USE_SDL2
-#include "resources/surfaceimagehelper.h"
-#endif // USE_SDL2
-
-#include "resources/image/image.h"
-
-#include "debug.h"
-
-SurfaceGraphics::SurfaceGraphics() :
- Graphics(),
- mBlitMode(BlitMode::BLIT_NORMAL),
- mTarget(nullptr)
-{
- mOpenGL = RENDER_SOFTWARE;
- mName = "Surface";
-}
-
-SurfaceGraphics::~SurfaceGraphics()
-{
-}
-
-void SurfaceGraphics::drawImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- FUNC_BLOCK("Graphics::drawImage", 1)
- // Check that preconditions for blitting are met.
- if (mTarget == nullptr ||
- image == nullptr ||
- image->mSDLSurface == nullptr)
- {
- return;
- }
-
- const SDL_Rect &imageRect = image->mBounds;
- SDL_Rect dstRect;
- SDL_Rect srcRect;
- dstRect.x = CAST_S16(dstX);
- dstRect.y = CAST_S16(dstY);
- srcRect.x = CAST_S16(imageRect.x);
- srcRect.y = CAST_S16(imageRect.y);
- srcRect.w = CAST_U16(imageRect.w);
- srcRect.h = CAST_U16(imageRect.h);
-
-#ifdef USE_SDL2
- SDL_BlitSurface(image->mSDLSurface, &srcRect, mTarget, &dstRect);
-#else // USE_SDL2
-
- if (mBlitMode == BlitMode::BLIT_NORMAL)
- {
- SDL_BlitSurface(image->mSDLSurface, &srcRect, mTarget, &dstRect);
- }
- else
- {
- SurfaceImageHelper::combineSurface(image->mSDLSurface,
- &srcRect, mTarget, &dstRect);
- }
-#endif // USE_SDL2
-}
-
-void SurfaceGraphics::copyImage(const Image *restrict const image,
- int dstX, int dstY) restrict2
-{
- FUNC_BLOCK("Graphics::drawImage", 1)
- // Check that preconditions for blitting are met.
- if (mTarget == nullptr ||
- image == nullptr ||
- image->mSDLSurface == nullptr)
- {
- return;
- }
-
- const SDL_Rect &imageRect = image->mBounds;
- SDL_Rect dstRect;
- SDL_Rect srcRect;
- dstRect.x = CAST_S16(dstX);
- dstRect.y = CAST_S16(dstY);
- srcRect.x = CAST_S16(imageRect.x);
- srcRect.y = CAST_S16(imageRect.y);
- srcRect.w = CAST_U16(imageRect.w);
- srcRect.h = CAST_U16(imageRect.h);
-
-#ifdef USE_SDL2
- // probably need change some flags
- SDL_BlitSurface(image->mSDLSurface, &srcRect, mTarget, &dstRect);
-#else // USE_SDL2
-
- SDL_BlitSurface(image->mSDLSurface, &srcRect, mTarget, &dstRect);
-#endif // USE_SDL2
-}
-
-void SurfaceGraphics::drawImageCached(const Image *restrict const image,
- int x, int y) restrict2
-{
- FUNC_BLOCK("Graphics::drawImageCached", 1)
- // Check that preconditions for blitting are met.
- if (mTarget == nullptr ||
- image == nullptr ||
- image->mSDLSurface == nullptr)
- {
- return;
- }
-
- const SDL_Rect &rect = image->mBounds;
-
- SDL_Rect dstRect;
- SDL_Rect srcRect;
- dstRect.x = CAST_S16(x);
- dstRect.y = CAST_S16(y);
- srcRect.x = CAST_S16(rect.x);
- srcRect.y = CAST_S16(rect.y);
- srcRect.w = CAST_U16(rect.w);
- srcRect.h = CAST_U16(rect.h);
-
-#ifdef USE_SDL2
- SDL_BlitSurface(image->mSDLSurface, &srcRect, mTarget, &dstRect);
-#else // USE_SDL2
-
- if (mBlitMode == BlitMode::BLIT_NORMAL)
- {
- SDL_BlitSurface(image->mSDLSurface, &srcRect, mTarget, &dstRect);
- }
- else
- {
- SurfaceImageHelper::combineSurface(image->mSDLSurface, &srcRect,
- mTarget, &dstRect);
- }
-#endif // USE_SDL2
-}
-
-void SurfaceGraphics::completeCache() restrict2
-{
-}
diff --git a/src/render/surfacegraphics.h b/src/render/surfacegraphics.h
deleted file mode 100644
index 2e46c9f1e..000000000
--- a/src/render/surfacegraphics.h
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 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 RENDER_SURFACEGRAPHICS_H
-#define RENDER_SURFACEGRAPHICS_H
-
-#include "enums/render/blitmode.h"
-
-#include "render/graphics.h"
-
-#include "localconsts.h"
-
-class Image;
-class ImageCollection;
-class ImageVertexes;
-
-/**
- * A central point of control for graphics.
- */
-class SurfaceGraphics final : public Graphics
-{
- public:
- SurfaceGraphics();
-
- A_DELETE_COPY(SurfaceGraphics)
-
- ~SurfaceGraphics();
-
- void setTarget(SDL_Surface *restrict const target) restrict2 noexcept2
- { mTarget = target; }
-
- SDL_Surface *getTarget() const restrict2 noexcept2
- { return mTarget; }
-
- void beginDraw() restrict2 override final
- { }
-
- void endDraw() restrict2 override final
- { }
-
- void pushClipArea(const Rect &restrict rect A_UNUSED)
- restrict2 override final
- { }
-
- void popClipArea() restrict2 override final
- { }
-
- void drawRescaledImage(const Image *restrict const image A_UNUSED,
- int dstX A_UNUSED, int dstY A_UNUSED,
- const int desiredWidth A_UNUSED,
- const int desiredHeight A_UNUSED)
- restrict2 override final
- { }
-
- void drawPattern(const Image *restrict const image A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED) restrict2 override final
- { }
-
- void drawRescaledPattern(const Image *const image A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED,
- const int scaledWidth A_UNUSED,
- const int scaledHeight A_UNUSED)
- override final
- { }
-
- void calcPattern(ImageVertexes *restrict const vert A_UNUSED,
- const Image *restrict const image A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED) const restrict2 override final
- { }
-
- void calcPattern(ImageCollection *restrict const vert A_UNUSED,
- const Image *restrict const image A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED) const restrict2 override final
- { }
-
- void calcTileVertexes(ImageVertexes *restrict const vert A_UNUSED,
- const Image *restrict const image A_UNUSED,
- int x A_UNUSED,
- int y A_UNUSED) const restrict2 override final
- A_NONNULL(2, 3)
- { }
-
- void calcTileSDL(ImageVertexes *restrict const vert A_UNUSED,
- int x A_UNUSED,
- int y A_UNUSED) const restrict2 override final
- { }
-
- void calcTileCollection(ImageCollection *restrict const
- vertCol A_UNUSED,
- const Image *restrict const image A_UNUSED,
- int x A_UNUSED,
- int y A_UNUSED) restrict2 override final
- { }
-
- void drawTileVertexes(const ImageVertexes *restrict const
- vert A_UNUSED) restrict2 override final
- { }
-
- void drawTileCollection(const ImageCollection *restrict const
- vertCol A_UNUSED)
- restrict2 override final A_NONNULL(2)
- { }
-
- void updateScreen() override final
- { }
-
- void drawNet(const int x1 A_UNUSED,
- const int y1 A_UNUSED,
- const int x2 A_UNUSED,
- const int y2 A_UNUSED,
- const int width A_UNUSED,
- const int height A_UNUSED) restrict2 override final
- { }
-
- void calcWindow(ImageCollection *restrict const vertCol A_UNUSED,
- const int x A_UNUSED, const int y A_UNUSED,
- const int w A_UNUSED, const int h A_UNUSED,
- const ImageRect &restrict imgRect A_UNUSED)
- restrict2 override final A_NONNULL(2)
- { }
-
- void setBlitMode(const BlitModeT mode) restrict2 noexcept2
- { mBlitMode = mode; }
-
- BlitModeT getBlitMode() const restrict2 noexcept2 A_WARN_UNUSED
- { return mBlitMode; }
-
- void fillRectangle(const Rect &restrict rect A_UNUSED)
- restrict2 override final
- { }
-
- void drawRectangle(const Rect &restrict rect A_UNUSED)
- restrict2 override final
- { }
-
- void drawPoint(int x A_UNUSED, int y A_UNUSED) restrict2 override final
- { }
-
- void drawLine(int x1 A_UNUSED, int y1 A_UNUSED,
- int x2 A_UNUSED, int y2 A_UNUSED)
- restrict2 override final
- { }
-
- bool setVideoMode(const int w A_UNUSED, const int h A_UNUSED,
- const int scale A_UNUSED,
- const int bpp A_UNUSED,
- const bool fs A_UNUSED, const bool hwaccel A_UNUSED,
- const bool resize A_UNUSED,
- const bool noFrame A_UNUSED,
- const bool allowHighDPI A_UNUSED)
- restrict2 override final
- { return false; }
-
- void drawImage(const Image *restrict const image,
- int dstX, int dstY) restrict2 override final;
-
- void copyImage(const Image *restrict const image,
- int dstX, int dstY) restrict2 override final;
-
- void drawImageCached(const Image *restrict const image,
- int x, int y) restrict2 override final;
-
- void drawPatternCached(const Image *restrict const image A_UNUSED,
- const int x A_UNUSED,
- const int y A_UNUSED,
- const int w A_UNUSED,
- const int h A_UNUSED) restrict2 override final
- { }
-
- void completeCache() restrict2 override final;
-
- /**
- * Draws a rectangle using images. 4 corner images, 4 side images and 1
- * image for the inside.
- */
- void drawImageRect(const int x A_UNUSED, const int y A_UNUSED,
- const int w A_UNUSED, const int h A_UNUSED,
- const ImageRect &restrict imgRect A_UNUSED)
- restrict2 override final
- { }
-
- protected:
- BlitModeT mBlitMode;
- SDL_Surface *mTarget;
-};
-
-#endif // RENDER_SURFACEGRAPHICS_H
diff --git a/src/render/vertexes/imagecollection.cpp b/src/render/vertexes/imagecollection.cpp
deleted file mode 100644
index 2c626e03d..000000000
--- a/src/render/vertexes/imagecollection.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 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/>.
- */
-
-#include "render/vertexes/imagecollection.h"
-
-#include "utils/dtor.h"
-
-#include "debug.h"
-
-ImageCollection::ImageCollection() :
-#ifdef USE_OPENGL
- currentGLImage(0),
-#endif // USE_OPENGL
- currentImage(nullptr),
- currentVert(nullptr),
- draws()
-{
-}
-
-ImageCollection::~ImageCollection()
-{
- clear();
-}
-
-void ImageCollection::clear() restrict2
-{
-#ifdef USE_OPENGL
- currentGLImage = 0;
-#endif // USE_OPENGL
- currentImage = nullptr;
- currentVert = nullptr;
-
- delete_all(draws);
- draws.clear();
-}
diff --git a/src/render/vertexes/imagecollection.h b/src/render/vertexes/imagecollection.h
deleted file mode 100644
index c5b9dfe55..000000000
--- a/src/render/vertexes/imagecollection.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 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 RENDER_VERTEXES_IMAGECOLLECTION_H
-#define RENDER_VERTEXES_IMAGECOLLECTION_H
-
-#include "render/vertexes/imagevertexes.h"
-
-#include "localconsts.h"
-
-class Image;
-
-class ImageCollection final
-{
- public:
- ImageCollection();
-
- A_DELETE_COPY(ImageCollection)
-
- ~ImageCollection();
-
- void clear() restrict2;
-
-#ifdef USE_OPENGL
- GLuint currentGLImage;
-#endif // USE_OPENGL
-
- const Image *restrict currentImage;
-
- ImageVertexes *restrict currentVert;
-
- ImageVertexesVector draws;
-};
-
-#endif // RENDER_VERTEXES_IMAGECOLLECTION_H
diff --git a/src/render/vertexes/imagevertexes.cpp b/src/render/vertexes/imagevertexes.cpp
deleted file mode 100644
index 3aff57636..000000000
--- a/src/render/vertexes/imagevertexes.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 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/>.
- */
-
-#include "render/vertexes/imagevertexes.h"
-
-#include "utils/dtor.h"
-
-#include "debug.h"
-
-ImageVertexes::ImageVertexes() :
- image(nullptr),
-#ifdef USE_OPENGL
- ogl(),
-#endif // USE_OPENGL
- sdl()
-{
- sdl.reserve(30);
-}
-
-ImageVertexes::~ImageVertexes()
-{
- delete_all(sdl);
- sdl.clear();
-}
diff --git a/src/render/vertexes/imagevertexes.h b/src/render/vertexes/imagevertexes.h
deleted file mode 100644
index 01390c450..000000000
--- a/src/render/vertexes/imagevertexes.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 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 RENDER_VERTEXES_IMAGEVERTEXES_H
-#define RENDER_VERTEXES_IMAGEVERTEXES_H
-
-#include "resources/rect/doublerect.h"
-
-#ifdef USE_OPENGL
-#include "render/vertexes/openglgraphicsvertexes.h"
-#else // USE_OPENGL
-#include "utils/vector.h"
-#endif // USE_OPENGL
-
-#include "localconsts.h"
-
-class Image;
-
-typedef STD_VECTOR<DoubleRect*> DoubleRects;
-
-class ImageVertexes final
-{
- public:
- ImageVertexes();
-
- A_DELETE_COPY(ImageVertexes)
-
- ~ImageVertexes();
-
- const Image *restrict image;
-#ifdef USE_OPENGL
- OpenGLGraphicsVertexes ogl;
-#endif // USE_OPENGL
-
- DoubleRects sdl;
-};
-
-typedef STD_VECTOR<ImageVertexes*> ImageVertexesVector;
-typedef ImageVertexesVector::iterator ImageCollectionIter;
-typedef ImageVertexesVector::const_iterator ImageCollectionCIter;
-
-#endif // RENDER_VERTEXES_IMAGEVERTEXES_H
diff --git a/src/render/vertexes/openglgraphicsvertexes.cpp b/src/render/vertexes/openglgraphicsvertexes.cpp
deleted file mode 100644
index a65f0e2b9..000000000
--- a/src/render/vertexes/openglgraphicsvertexes.cpp
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 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/>.
- */
-
-#ifdef USE_OPENGL
-
-#include "render/vertexes/openglgraphicsvertexes.h"
-
-#include "render/graphics.h"
-
-#include "debug.h"
-
-unsigned int vertexBufSize = 500;
-
-OpenGLGraphicsVertexes::OpenGLGraphicsVertexes() :
- ptr(0),
- mFloatTexArray(nullptr),
- mIntTexArray(nullptr),
- mIntVertArray(nullptr),
- mShortVertArray(nullptr),
- mVp(),
- mFloatTexPool(),
- mIntVertPool(),
- mShortVertPool(),
- mIntTexPool(),
- mVbo()
-{
- mFloatTexPool.reserve(30);
- mIntVertPool.reserve(30);
- mShortVertPool.reserve(30);
- mIntTexPool.reserve(30);
- mVp.reserve(30);
- mVbo.reserve(30);
-}
-
-OpenGLGraphicsVertexes::~OpenGLGraphicsVertexes()
-{
- clear();
-}
-
-void OpenGLGraphicsVertexes::clear() restrict2
-{
- for (STD_VECTOR<GLfloat*>::iterator it = mFloatTexPool.begin();
- it != mFloatTexPool.end(); ++ it)
- {
- delete [] (*it);
- }
- mFloatTexPool.clear();
-
- for (STD_VECTOR<GLint*>::iterator it = mIntVertPool.begin();
- it != mIntVertPool.end(); ++ it)
- {
- delete [] (*it);
- }
- mIntVertPool.clear();
-
- for (STD_VECTOR<GLshort*>::iterator it = mShortVertPool.begin();
- it != mShortVertPool.end(); ++ it)
- {
- delete [] (*it);
- }
- mShortVertPool.clear();
-
- for (STD_VECTOR<GLint*>::iterator it = mIntTexPool.begin();
- it != mIntTexPool.end(); ++ it)
- {
- delete [] (*it);
- }
- mIntTexPool.clear();
-
- const int sz = CAST_S32(mVbo.size());
- if (sz > 0)
- {
- mainGraphics->removeArray(sz, &mVbo[0]);
- mVbo.clear();
- }
-
- mVp.clear();
- if (ptr != 0)
- {
- ptr = 0;
- delete []mFloatTexArray;
- mFloatTexArray = nullptr;
- delete []mIntTexArray;
- mIntTexArray = nullptr;
- delete []mIntVertArray;
- mIntVertArray = nullptr;
- delete []mShortVertArray;
- mShortVertArray = nullptr;
- }
-}
-
-void OpenGLGraphicsVertexes::init() restrict2
-{
- clear();
-}
-
-GLfloat *OpenGLGraphicsVertexes::switchFloatTexArray() restrict2
-{
- mFloatTexArray = new GLfloat[CAST_SIZE(vertexBufSize * 4 + 30)];
- mFloatTexPool.push_back(mFloatTexArray);
- return mFloatTexArray;
-}
-
-GLint *OpenGLGraphicsVertexes::switchIntVertArray() restrict2
-{
- mIntVertArray = new GLint[CAST_SIZE(vertexBufSize * 4 + 30)];
- mIntVertPool.push_back(mIntVertArray);
- return mIntVertArray;
-}
-
-GLshort *OpenGLGraphicsVertexes::switchShortVertArray() restrict2
-{
- mShortVertArray = new GLshort[CAST_SIZE(vertexBufSize * 4 + 30)];
- mShortVertPool.push_back(mShortVertArray);
- return mShortVertArray;
-}
-
-GLint *OpenGLGraphicsVertexes::switchIntTexArray() restrict2
-{
- mIntTexArray = new GLint[CAST_SIZE(vertexBufSize * 4 + 30)];
- mIntTexPool.push_back(mIntTexArray);
- return mIntTexArray;
-}
-
-void OpenGLGraphicsVertexes::switchVp(const int n) restrict2
-{
- mVp.push_back(n);
-}
-
-int OpenGLGraphicsVertexes::continueVp() restrict2
-{
- if (mVp.empty())
- {
- return 0;
- }
- else
- {
- const int val = mVp.back();
- mVp.pop_back();
- return val;
- }
-}
-
-void OpenGLGraphicsVertexes::updateVp(const int n) restrict2
-{
- if (!mVp.empty())
- mVp.pop_back();
- mVp.push_back(n);
-}
-
-GLfloat *OpenGLGraphicsVertexes::continueFloatTexArray() restrict2
-{
- if (mFloatTexPool.empty())
- {
- mFloatTexArray = new GLfloat[CAST_SIZE(
- vertexBufSize * 4 + 30)];
- mFloatTexPool.push_back(mFloatTexArray);
- }
- else
- {
- mFloatTexArray = mFloatTexPool.back();
- }
- return mFloatTexArray;
-}
-
-GLint *OpenGLGraphicsVertexes::continueIntVertArray() restrict2
-{
- if (mIntVertPool.empty())
- {
- mIntVertArray = new GLint[CAST_SIZE(vertexBufSize * 4 + 30)];
- mIntVertPool.push_back(mIntVertArray);
- }
- else
- {
- mIntVertArray = mIntVertPool.back();
- }
- return mIntVertArray;
-}
-
-GLshort *OpenGLGraphicsVertexes::continueShortVertArray() restrict2
-{
- if (mShortVertPool.empty())
- {
- mShortVertArray = new GLshort[CAST_SIZE(
- vertexBufSize * 4 + 30)];
- mShortVertPool.push_back(mShortVertArray);
- }
- else
- {
- mShortVertArray = mShortVertPool.back();
- }
- return mShortVertArray;
-}
-
-GLint *OpenGLGraphicsVertexes::continueIntTexArray() restrict2
-{
- if (mIntTexPool.empty())
- {
- mIntTexArray = new GLint[CAST_SIZE(vertexBufSize * 4 + 30)];
- mIntTexPool.push_back(mIntTexArray);
- }
- else
- {
- mIntTexArray = mIntTexPool.back();
- }
- return mIntTexArray;
-}
-#endif // USE_OPENGL
diff --git a/src/render/vertexes/openglgraphicsvertexes.h b/src/render/vertexes/openglgraphicsvertexes.h
deleted file mode 100644
index 023abf139..000000000
--- a/src/render/vertexes/openglgraphicsvertexes.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2011-2017 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 RENDER_VERTEXES_OPENGLGRAPHICSVERTEXES_H
-#define RENDER_VERTEXES_OPENGLGRAPHICSVERTEXES_H
-
-#ifdef USE_OPENGL
-
-#include "localconsts.h"
-
-#ifdef ANDROID
-#include <GLES/gl.h>
-#else // ANDROID
-#ifndef USE_SDL2
-#define GL_GLEXT_PROTOTYPES 1
-#endif // USE_SDL2
-PRAGMA48(GCC diagnostic push)
-PRAGMA48(GCC diagnostic ignored "-Wshadow")
-#include <SDL_opengl.h>
-PRAGMA48(GCC diagnostic pop)
-#endif // ANDROID
-
-#include "utils/vector.h"
-
-class OpenGLGraphicsVertexes final
-{
- public:
- OpenGLGraphicsVertexes();
-
- A_DELETE_COPY(OpenGLGraphicsVertexes)
-
- ~OpenGLGraphicsVertexes();
-
- GLfloat *switchFloatTexArray() restrict2;
-
- GLint *switchIntVertArray() restrict2;
-
- GLint *switchIntTexArray() restrict2;
-
- GLshort *switchShortVertArray() restrict2;
-
- STD_VECTOR<GLfloat*> *getFloatTexPool() restrict2 A_WARN_UNUSED
- { return &mFloatTexPool; }
-
- STD_VECTOR<GLint*> *getIntVertPool() restrict2 A_WARN_UNUSED
- { return &mIntVertPool; }
-
- STD_VECTOR<GLshort*> *getShortVertPool() restrict2 A_WARN_UNUSED
- { return &mShortVertPool; }
-
- STD_VECTOR<GLint*> *getIntTexPool() restrict2 A_WARN_UNUSED
- { return &mIntTexPool; }
-
- void switchVp(const int n) restrict2;
-
- GLfloat *continueFloatTexArray() restrict2 RETURNS_NONNULL;
-
- GLint *continueIntVertArray() restrict2 RETURNS_NONNULL;
-
- GLshort *continueShortVertArray() restrict2 RETURNS_NONNULL;
-
- GLint *continueIntTexArray() restrict2 RETURNS_NONNULL;
-
- int continueVp() restrict2;
-
- void updateVp(const int n) restrict2;
-
- STD_VECTOR<int> *getVp() restrict2 A_WARN_UNUSED
- { return &mVp; }
-
- void init() restrict2;
-
- void clear() restrict2;
-
- int ptr;
-
- GLfloat *mFloatTexArray;
- GLint *mIntTexArray;
- GLint *mIntVertArray;
- GLshort *mShortVertArray;
- STD_VECTOR<int> mVp;
- STD_VECTOR<GLfloat*> mFloatTexPool;
- STD_VECTOR<GLint*> mIntVertPool;
- STD_VECTOR<GLshort*> mShortVertPool;
- STD_VECTOR<GLint*> mIntTexPool;
- STD_VECTOR<GLuint> mVbo;
-};
-
-extern unsigned int vertexBufSize;
-#endif // USE_OPENGL
-
-#endif // RENDER_VERTEXES_OPENGLGRAPHICSVERTEXES_H