summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2013-09-01 17:40:11 +0300
committerAndrei Karas <akaras@inbox.ru>2013-09-01 17:57:47 +0300
commit5359b7c20b9ee93989a840e555f0a2102b7bb806 (patch)
treea95017d22a4f3e2f57be59dd4826f3b823a65656
parent222748a7e0c79225c66485898b913aa60f56cfe2 (diff)
downloadmv-5359b7c20b9ee93989a840e555f0a2102b7bb806.tar.gz
mv-5359b7c20b9ee93989a840e555f0a2102b7bb806.tar.bz2
mv-5359b7c20b9ee93989a840e555f0a2102b7bb806.tar.xz
mv-5359b7c20b9ee93989a840e555f0a2102b7bb806.zip
add SDL2 default render mode.
in this mode SDL using own driver with hardware acceleration.
-rw-r--r--src/CMakeLists.txt3
-rw-r--r--src/Makefile.am3
-rw-r--r--src/client.cpp3
-rw-r--r--src/graphicsmanager.cpp16
-rw-r--r--src/gui/debugwindow.cpp4
-rw-r--r--src/gui/setup_video.cpp2
-rw-r--r--src/render/graphics.h3
-rw-r--r--src/render/renderers.h3
-rw-r--r--src/render/rendererslistsdl.h (renamed from src/render/rendererslist.h)40
-rw-r--r--src/render/rendererslistsdl2.h133
-rw-r--r--src/render/sdl2graphics.cpp3
-rw-r--r--src/render/sdl2graphics.h4
-rw-r--r--src/resources/image.cpp4
-rw-r--r--src/resources/openglimagehelper.cpp1
14 files changed, 198 insertions, 24 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 5c61747fe..6e2aede86 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -682,7 +682,8 @@ SET(SRCS
render/nullopenglgraphics.h
render/renderers.cpp
render/renderers.h
- render/rendererslist.h
+ render/rendererslistsdl.h
+ render/rendererslistsdl2.h
particle/particle.cpp
particle/particle.h
particle/particlecontainer.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index 4e9dec8bb..84a9444a9 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -691,7 +691,8 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \
render/nullopenglgraphics.h \
render/renderers.cpp \
render/renderers.h \
- render/rendererslist.h \
+ render/rendererslistsdl.h \
+ render/rendererslistsdl2.h \
particle/particle.cpp \
particle/particle.h \
particle/particlecontainer.cpp \
diff --git a/src/client.cpp b/src/client.cpp
index fef14b6e6..0f9af3d8a 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -572,15 +572,14 @@ void Client::gameInit()
}
#endif
-#ifdef USE_OPENGL
openGLMode = intToRenderType(config.getIntValue("opengl"));
+#ifdef USE_OPENGL
OpenGLImageHelper::setBlur(config.getBoolValue("blur"));
SurfaceImageHelper::SDLSetEnableAlphaCache(
config.getBoolValue("alphaCache") && !openGLMode);
ImageHelper::setEnableAlpha(config.getFloatValue("guialpha") != 1.0f
|| openGLMode);
#else
- openGLMode = RENDER_SOFTWARE;
SurfaceImageHelper::SDLSetEnableAlphaCache(
config.getBoolValue("alphaCache"));
ImageHelper::setEnableAlpha(config.getFloatValue("guialpha") != 1.0f);
diff --git a/src/graphicsmanager.cpp b/src/graphicsmanager.cpp
index 5304c69c5..1c6f81233 100644
--- a/src/graphicsmanager.cpp
+++ b/src/graphicsmanager.cpp
@@ -241,6 +241,9 @@ void GraphicsManager::initGraphics(const bool noOpenGL)
mUseTextureSampler = false;
break;
case RENDER_NORMAL_OPENGL:
+#ifndef USE_SDL2
+ case RENDER_SDL2_DEFAULT:
+#endif
default:
#ifndef ANDROID
imageHelper = new OpenGLImageHelper;
@@ -261,8 +264,19 @@ void GraphicsManager::initGraphics(const bool noOpenGL)
mainGraphics = new MobileOpenGLGraphics;
mUseTextureSampler = false;
break;
+#ifdef USE_SDL2
+ case RENDER_SDL2_DEFAULT:
+ // for debug SDL2 default is same as software mode
+ imageHelper = new SDLImageHelper;
+ surfaceImageHelper = new SurfaceImageHelper;
+ mainGraphics = new SDLGraphics;
+ mainGraphics->setRendererFlags(SDL_RENDERER_ACCELERATED);
+ mUseTextureSampler = false;
+ break;
+#endif
};
- mUseAtlases = imageHelper->useOpenGL() != RENDER_SOFTWARE
+ mUseAtlases = (useOpenGL == RENDER_NORMAL_OPENGL
+ || useOpenGL == RENDER_SAFE_OPENGL || useOpenGL == RENDER_GLES_OPENGL)
&& config.getBoolValue("useAtlases");
#else
void GraphicsManager::initGraphics(const bool noOpenGL A_UNUSED)
diff --git a/src/gui/debugwindow.cpp b/src/gui/debugwindow.cpp
index fdd68092a..39d731bae 100644
--- a/src/gui/debugwindow.cpp
+++ b/src/gui/debugwindow.cpp
@@ -219,6 +219,10 @@ MapDebugTab::MapDebugTab(const Widget2 *const widget) :
// TRANSLATORS: debug window label
mFPSText = _("%d FPS (mobile OpenGL)");
break;
+ case RENDER_SDL2_DEFAULT:
+ // TRANSLATORS: debug window label
+ mFPSText = _("%d FPS (SDL2 default)");
+ break;
};
#else
// TRANSLATORS: debug window label
diff --git a/src/gui/setup_video.cpp b/src/gui/setup_video.cpp
index f9a7535d0..9dd2484df 100644
--- a/src/gui/setup_video.cpp
+++ b/src/gui/setup_video.cpp
@@ -45,7 +45,7 @@
#include "gui/widgets/textfield.h"
#include "gui/widgets/dropdown.h"
-#include "render/rendererslist.h"
+#include "render/rendererslistsdl.h"
#include "resources/image.h"
#include "utils/gettext.h"
diff --git a/src/render/graphics.h b/src/render/graphics.h
index 7dafcbc45..5025709ec 100644
--- a/src/render/graphics.h
+++ b/src/render/graphics.h
@@ -365,6 +365,9 @@ class Graphics : public gcn::Graphics
#ifdef USE_SDL2
void dumpRendererInfo(const char *const str,
const SDL_RendererInfo &info);
+
+ virtual void setRendererFlags(const uint32_t flags A_UNUSED)
+ { }
#endif
int mWidth;
int mHeight;
diff --git a/src/render/renderers.h b/src/render/renderers.h
index 8922f3d10..f7d58b5e9 100644
--- a/src/render/renderers.h
+++ b/src/render/renderers.h
@@ -26,11 +26,10 @@
enum RenderType
{
RENDER_SOFTWARE = 0,
-#ifdef USE_OPENGL
RENDER_NORMAL_OPENGL = 1,
RENDER_SAFE_OPENGL = 2,
RENDER_GLES_OPENGL = 3,
-#endif
+ RENDER_SDL2_DEFAULT = 4,
RENDER_LAST
};
diff --git a/src/render/rendererslist.h b/src/render/rendererslistsdl.h
index 6c4e3fd0e..aa68eeb6b 100644
--- a/src/render/rendererslist.h
+++ b/src/render/rendererslistsdl.h
@@ -20,17 +20,23 @@
#include "utils/gettext.h"
-#ifndef RENDER_RENDERERSLIST_H
-#define RENDER_RENDERERSLIST_H
+#ifndef RENDER_RENDERERSLISTSDL_H
+#define RENDER_RENDERERSLISTSDL_H
+
+#ifdef USE_SDL2
+#include "render/rendererslistsdl2.h"
+
+#else // USE_SDL2
#ifdef USE_OPENGL
#ifdef ANDROID
+// defined OPENGL ANDROID
// map for index to RenderType
const RenderType indexToRender[] =
{
RENDER_SOFTWARE,
- RENDER_GLES_OPENGL,
+ RENDER_GLES_OPENGL
};
const char *OPENGL_NAME[] =
@@ -38,7 +44,7 @@ const char *OPENGL_NAME[] =
// TRANSLATORS: draw backend
N_("Software"),
// TRANSLATORS: draw backend
- N_("Mobile OpenGL"),
+ N_("Mobile OpenGL")
};
const int renderModesListSize = 2;
@@ -46,12 +52,14 @@ const int renderModesListSize = 2;
const int renderToIndex[] =
{
0, // RENDER_SOFTWARE
- 3, // RENDER_GLES_OPENGL
- 3, // RENDER_GLES_OPENGL
- 3 // RENDER_GLES_OPENGL
+ 1, // RENDER_NORMAL_OPENGL
+ 1, // RENDER_SAFE_OPENGL
+ 1, // RENDER_GLES_OPENGL
+ 1 // RENDER_SDL2_DEFAULT
};
#else // ANDROID
+// defined OPENGL
// map for index to RenderType
const RenderType indexToRender[] =
@@ -59,7 +67,7 @@ const RenderType indexToRender[] =
RENDER_SOFTWARE,
RENDER_NORMAL_OPENGL,
RENDER_SAFE_OPENGL,
- RENDER_GLES_OPENGL,
+ RENDER_GLES_OPENGL
};
const char *OPENGL_NAME[] =
@@ -71,7 +79,7 @@ const char *OPENGL_NAME[] =
// TRANSLATORS: draw backend
N_("Safe OpenGL"),
// TRANSLATORS: draw backend
- N_("Mobile OpenGL"),
+ N_("Mobile OpenGL")
};
const int renderModesListSize = 4;
@@ -81,12 +89,14 @@ const int renderToIndex[] =
0, // RENDER_SOFTWARE
1, // RENDER_NORMAL_OPENGL
2, // RENDER_SAFE_OPENGL
- 3 // RENDER_GLES_OPENGL
+ 3, // RENDER_GLES_OPENGL
+ 0 // RENDER_SDL2_DEFAULT
};
#endif // ANDROID
#else // USE_OPENGL
+// no defines
// map for index to RenderType
const RenderType indexToRender[] =
@@ -105,11 +115,13 @@ const int renderModesListSize = 1;
const int renderToIndex[] =
{
0, // RENDER_SOFTWARE
- 0, // RENDER_SOFTWARE
- 0, // RENDER_SOFTWARE
- 0 // RENDER_SOFTWARE
+ 0, // RENDER_NORMAL_OPENGL
+ 0, // RENDER_SAFE_OPENGL
+ 0, // RENDER_GLES_OPENGL
+ 0 // RENDER_SDL2_DEFAULT
};
#endif // USE_OPENGL
-#endif // RENDER_RENDERERSLIST_H
+#endif // USE_SDL2
+#endif // RENDER_RENDERERSLISTSDL_H
diff --git a/src/render/rendererslistsdl2.h b/src/render/rendererslistsdl2.h
new file mode 100644
index 000000000..966b53726
--- /dev/null
+++ b/src/render/rendererslistsdl2.h
@@ -0,0 +1,133 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2013 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 "utils/gettext.h"
+
+#ifndef RENDER_RENDERERSLISTSDL2_H
+#define RENDER_RENDERERSLISTSDL2_H
+
+#ifdef USE_SDL2
+
+#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")
+};
+
+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
+};
+
+#else // ANDROID
+// defined OPENGL
+
+// map for index to RenderType
+const RenderType indexToRender[] =
+{
+ RENDER_SOFTWARE,
+ RENDER_SDL2_DEFAULT,
+ RENDER_NORMAL_OPENGL,
+ RENDER_SAFE_OPENGL,
+ RENDER_GLES_OPENGL
+};
+
+const char *OPENGL_NAME[] =
+{
+ // TRANSLATORS: draw backend
+ N_("Software"),
+ // TRANSLATORS: draw backend
+ N_("SDL2 default"),
+ // TRANSLATORS: draw backend
+ N_("Fast OpenGL"),
+ // TRANSLATORS: draw backend
+ N_("Safe OpenGL"),
+ // TRANSLATORS: draw backend
+ N_("Mobile OpenGL")
+};
+
+const int renderModesListSize = 5;
+
+const int renderToIndex[] =
+{
+ 0, // RENDER_SOFTWARE
+ 2, // RENDER_NORMAL_OPENGL
+ 3, // RENDER_SAFE_OPENGL
+ 4, // RENDER_GLES_OPENGL
+ 1 // RENDER_SDL2_DEFAULT
+};
+
+#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
+};
+
+#endif // USE_OPENGL
+
+#endif // USE_SDL2
+#endif // RENDER_RENDERERSLISTSDL2_H
diff --git a/src/render/sdl2graphics.cpp b/src/render/sdl2graphics.cpp
index 218f2cad7..82ad78198 100644
--- a/src/render/sdl2graphics.cpp
+++ b/src/render/sdl2graphics.cpp
@@ -70,6 +70,7 @@ static int FakeSDL_RenderCopy(SDL_Renderer *const renderer,
SDLGraphics::SDLGraphics() :
Graphics(),
+ mRendererFlags(SDL_RENDERER_SOFTWARE),
mOldPixel(0),
mOldAlpha(0)
{
@@ -633,7 +634,7 @@ bool SDLGraphics::setVideoMode(const int w, const int h, const int bpp,
mRect.w = w1;
mRect.h = h1;
- mRenderer = graphicsManager.createRenderer(mWindow, SDL_RENDERER_SOFTWARE);
+ mRenderer = graphicsManager.createRenderer(mWindow, mRendererFlags);
SDLImageHelper::setRenderer(mRenderer);
return videoInfo();
}
diff --git a/src/render/sdl2graphics.h b/src/render/sdl2graphics.h
index f3835e904..383e93540 100644
--- a/src/render/sdl2graphics.h
+++ b/src/render/sdl2graphics.h
@@ -128,6 +128,9 @@ class SDLGraphics : public Graphics
const bool fs, const bool hwaccel,
const bool resize, const bool noFrame);
+ void setRendererFlags(const uint32_t flags)
+ { mRendererFlags = flags; }
+
protected:
virtual bool drawImage2(const Image *const image,
int srcX, int srcY,
@@ -135,6 +138,7 @@ class SDLGraphics : public Graphics
const int width, const int height,
const bool useColor);
+ uint32_t mRendererFlags;
uint32_t mOldPixel;
int mOldAlpha;
};
diff --git a/src/resources/image.cpp b/src/resources/image.cpp
index 3d5d58620..c289c90cd 100644
--- a/src/resources/image.cpp
+++ b/src/resources/image.cpp
@@ -413,7 +413,9 @@ Image *Image::getSubImage(const int x, const int y,
{
// Create a new clipped sub-image
#ifdef USE_OPENGL
- if (OpenGLImageHelper::mUseOpenGL != RENDER_SOFTWARE)
+ const RenderType mode = OpenGLImageHelper::mUseOpenGL;
+ if (mode == RENDER_NORMAL_OPENGL || mode == RENDER_SAFE_OPENGL
+ || mode == RENDER_GLES_OPENGL)
{
return new SubImage(this, mGLImage, x, y, width, height,
mTexWidth, mTexHeight);
diff --git a/src/resources/openglimagehelper.cpp b/src/resources/openglimagehelper.cpp
index e686d6f5a..c41538b2e 100644
--- a/src/resources/openglimagehelper.cpp
+++ b/src/resources/openglimagehelper.cpp
@@ -215,6 +215,7 @@ Image *OpenGLImageHelper::glLoad(SDL_Surface *tmpImage,
MobileOpenGLGraphics::bindTexture(mTextureType, texture);
break;
case RENDER_SOFTWARE:
+ case RENDER_SDL2_DEFAULT:
default:
logger->log("Unknown OpenGL backend: %d", mUseOpenGL);
break;