From 410dd6c3d845cc0e19fd678090d95669bdeb5885 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 8 Jun 2014 01:04:33 +0300 Subject: Add Modern OpenGL render type. Now it using normal OpenGL renderer. --- src/graphicsmanager.cpp | 25 ++++++++++++++++++------- src/gui/widgets/tabs/debugwindowtabs.cpp | 4 ++++ src/render/graphics.cpp | 1 + src/render/renderers.cpp | 14 ++++++++++---- src/render/rendererslistsdl.h | 18 ++++++++++++------ src/render/rendererslistsdl2.h | 18 ++++++++++++------ src/render/rendertype.h | 3 ++- src/resources/image.cpp | 6 ++++-- src/resources/map/map.cpp | 7 +++++-- src/resources/openglimagehelper.cpp | 2 ++ src/test/testmain.cpp | 5 +++-- 11 files changed, 73 insertions(+), 30 deletions(-) diff --git a/src/graphicsmanager.cpp b/src/graphicsmanager.cpp index 90f723f82..33cbd0224 100644 --- a/src/graphicsmanager.cpp +++ b/src/graphicsmanager.cpp @@ -272,6 +272,7 @@ void GraphicsManager::createRenderers() mUseTextureSampler = false; break; case RENDER_NORMAL_OPENGL: + case RENDER_MODERN_OPENGL: #ifndef USE_SDL2 case RENDER_SDL2_DEFAULT: #endif @@ -328,6 +329,7 @@ void GraphicsManager::createRenderers() case RENDER_SOFTWARE: case RENDER_SAFE_OPENGL: case RENDER_GLES_OPENGL: + case RENDER_MODERN_OPENGL: case RENDER_NORMAL_OPENGL: case RENDER_NULL: case RENDER_LAST: @@ -450,18 +452,30 @@ void GraphicsManager::initGraphics() detectPixelSize(); setVideoMode(); #ifdef USE_OPENGL + const RenderType oldOpenGLMode = openGLMode; + if (openGLMode == RENDER_MODERN_OPENGL) + { + if (!checkGLVersion(3, 0)) + { + logger->log("Fallback to normal OpenGL mode"); + openGLMode = RENDER_NORMAL_OPENGL; + } + } if (openGLMode == RENDER_NORMAL_OPENGL || openGLMode == RENDER_GLES_OPENGL) { if (!checkGLVersion(2, 0)) { logger->log("Fallback to safe OpenGL mode"); openGLMode = RENDER_SAFE_OPENGL; - deleteRenderers(); - createRenderers(); - detectPixelSize(); - setVideoMode(); } } + if (openGLMode != oldOpenGLMode) + { + deleteRenderers(); + createRenderers(); + detectPixelSize(); + setVideoMode(); + } #endif } @@ -688,9 +702,6 @@ void GraphicsManager::updateTextureFormat() const logger->log1("using 4 texture format"); } } -#endif - -#ifdef USE_OPENGL void GraphicsManager::logString(const char *const format, const int num) { diff --git a/src/gui/widgets/tabs/debugwindowtabs.cpp b/src/gui/widgets/tabs/debugwindowtabs.cpp index 9f987c721..d538ba91a 100644 --- a/src/gui/widgets/tabs/debugwindowtabs.cpp +++ b/src/gui/widgets/tabs/debugwindowtabs.cpp @@ -109,6 +109,10 @@ MapDebugTab::MapDebugTab(const Widget2 *const widget) : // TRANSLATORS: debug window label mFPSText = _("%d FPS (mobile OpenGL)"); break; + case RENDER_MODERN_OPENGL: + // TRANSLATORS: debug window label + mFPSText = _("%d FPS (modern OpenGL)"); + break; case RENDER_SDL2_DEFAULT: // TRANSLATORS: debug window label mFPSText = _("%d FPS (SDL2 default)"); diff --git a/src/render/graphics.cpp b/src/render/graphics.cpp index 44307add7..5bb90e753 100644 --- a/src/render/graphics.cpp +++ b/src/render/graphics.cpp @@ -303,6 +303,7 @@ bool Graphics::setOpenGLMode() if (rectTex && OpenGLImageHelper::getInternalTextureType() == 4 && getOpenGL() != RENDER_GLES_OPENGL + && getOpenGL() != RENDER_MODERN_OPENGL && config.getBoolValue("rectangulartextures") && !graphicsManager.isUseTextureSampler()) { diff --git a/src/render/renderers.cpp b/src/render/renderers.cpp index a26cb8b96..76aef6468 100644 --- a/src/render/renderers.cpp +++ b/src/render/renderers.cpp @@ -42,18 +42,24 @@ RenderType intToRenderType(const int mode) if (mode != RENDER_SOFTWARE #if defined(USE_OPENGL) && defined(ANDROID) && defined(USE_SDL2) - && mode != RENDER_GLES_OPENGL && mode != RENDER_SDL2_DEFAULT) + && mode != RENDER_GLES_OPENGL + && mode != RENDER_SDL2_DEFAULT) #elif defined(USE_OPENGL) && defined(ANDROID) && !defined(USE_SDL2) && mode != RENDER_GLES_OPENGL) #elif defined(USE_OPENGL) && !defined(ANDROID) && defined(USE_SDL2) - && mode != RENDER_NORMAL_OPENGL && mode != RENDER_SAFE_OPENGL - && mode != RENDER_GLES_OPENGL && mode != RENDER_SDL2_DEFAULT) + && mode != RENDER_NORMAL_OPENGL + && mode != RENDER_MODERN_OPENGL + && mode != RENDER_SAFE_OPENGL + && mode != RENDER_GLES_OPENGL + && mode != RENDER_SDL2_DEFAULT) #elif !defined(USE_OPENGL) && defined(USE_SDL2) && mode != RENDER_SDL2_DEFAULT) #elif !defined(USE_OPENGL) && !defined(USE_SDL2) ) #elif defined(USE_OPENGL) && !defined(ANDROID) && !defined(USE_SDL2) - && mode != RENDER_NORMAL_OPENGL && mode != RENDER_SAFE_OPENGL + && mode != RENDER_NORMAL_OPENGL + && mode != RENDER_MODERN_OPENGL + && mode != RENDER_SAFE_OPENGL && mode != RENDER_GLES_OPENGL) #endif { diff --git a/src/render/rendererslistsdl.h b/src/render/rendererslistsdl.h index b2c3b2354..18960beda 100644 --- a/src/render/rendererslistsdl.h +++ b/src/render/rendererslistsdl.h @@ -57,7 +57,8 @@ const int renderToIndex[] = 1, // RENDER_NORMAL_OPENGL 1, // RENDER_SAFE_OPENGL 1, // RENDER_GLES_OPENGL - 1 // RENDER_SDL2_DEFAULT + 1, // RENDER_SDL2_DEFAULT + 1 // RENDER_MODERN_OPENGL }; #else // ANDROID @@ -69,7 +70,8 @@ const RenderType indexToRender[] = RENDER_SOFTWARE, RENDER_NORMAL_OPENGL, RENDER_SAFE_OPENGL, - RENDER_GLES_OPENGL + RENDER_GLES_OPENGL, + RENDER_MODERN_OPENGL }; const char *OPENGL_NAME[] = @@ -81,10 +83,12 @@ const char *OPENGL_NAME[] = // TRANSLATORS: draw backend N_("Safe OpenGL"), // TRANSLATORS: draw backend - N_("Mobile OpenGL") + N_("Mobile OpenGL"), + // TRANSLATORS: draw backend + N_("Modern OpenGL") }; -const int renderModesListSize = 4; +const int renderModesListSize = 5; const int renderToIndex[] = { @@ -92,7 +96,8 @@ const int renderToIndex[] = 1, // RENDER_NORMAL_OPENGL 2, // RENDER_SAFE_OPENGL 3, // RENDER_GLES_OPENGL - 0 // RENDER_SDL2_DEFAULT + 0, // RENDER_SDL2_DEFAULT + 4 // RENDER_MODERN_OPENGL }; #endif // ANDROID @@ -120,7 +125,8 @@ const int renderToIndex[] = 0, // RENDER_NORMAL_OPENGL 0, // RENDER_SAFE_OPENGL 0, // RENDER_GLES_OPENGL - 0 // RENDER_SDL2_DEFAULT + 0, // RENDER_SDL2_DEFAULT + 0 // RENDER_MODERN_OPENGL }; #endif // USE_OPENGL diff --git a/src/render/rendererslistsdl2.h b/src/render/rendererslistsdl2.h index 1ebe4b242..2bb309f91 100644 --- a/src/render/rendererslistsdl2.h +++ b/src/render/rendererslistsdl2.h @@ -57,7 +57,8 @@ const int renderToIndex[] = 2, // RENDER_NORMAL_OPENGL 2, // RENDER_SAFE_OPENGL 2, // RENDER_GLES_OPENGL - 1 // RENDER_SDL2_DEFAULT + 1, // RENDER_SDL2_DEFAULT + 2 // RENDER_MODERN_OPENGL }; #else // ANDROID @@ -70,7 +71,8 @@ const RenderType indexToRender[] = RENDER_SDL2_DEFAULT, RENDER_NORMAL_OPENGL, RENDER_SAFE_OPENGL, - RENDER_GLES_OPENGL + RENDER_GLES_OPENGL, + RENDER_MODERN_OPENGL }; const char *OPENGL_NAME[] = @@ -84,10 +86,12 @@ const char *OPENGL_NAME[] = // TRANSLATORS: draw backend N_("Safe OpenGL"), // TRANSLATORS: draw backend - N_("Mobile OpenGL") + N_("Mobile OpenGL"), + // TRANSLATORS: draw backend + N_("Modern OpenGL") }; -const int renderModesListSize = 5; +const int renderModesListSize = 6; const int renderToIndex[] = { @@ -95,7 +99,8 @@ const int renderToIndex[] = 2, // RENDER_NORMAL_OPENGL 3, // RENDER_SAFE_OPENGL 4, // RENDER_GLES_OPENGL - 1 // RENDER_SDL2_DEFAULT + 1, // RENDER_SDL2_DEFAULT + 5 // RENDER_MODERN_OPENGL }; #endif // ANDROID @@ -126,7 +131,8 @@ const int renderToIndex[] = 0, // RENDER_NORMAL_OPENGL 0, // RENDER_SAFE_OPENGL 0, // RENDER_GLES_OPENGL - 1 // RENDER_SDL2_DEFAULT + 1, // RENDER_SDL2_DEFAULT + 0 // RENDER_MODERN_OPENGL }; #endif // USE_OPENGL diff --git a/src/render/rendertype.h b/src/render/rendertype.h index cb4150188..cf8160c52 100644 --- a/src/render/rendertype.h +++ b/src/render/rendertype.h @@ -28,7 +28,8 @@ enum RenderType RENDER_SAFE_OPENGL = 2, RENDER_GLES_OPENGL = 3, RENDER_SDL2_DEFAULT = 4, - RENDER_NULL = 5, + RENDER_MODERN_OPENGL = 5, + RENDER_NULL = 6, RENDER_LAST }; diff --git a/src/resources/image.cpp b/src/resources/image.cpp index d2a1eb2dd..d9d2a8a01 100644 --- a/src/resources/image.cpp +++ b/src/resources/image.cpp @@ -439,8 +439,10 @@ Image *Image::getSubImage(const int x, const int y, // Create a new clipped sub-image #ifdef USE_OPENGL const RenderType mode = OpenGLImageHelper::mUseOpenGL; - if (mode == RENDER_NORMAL_OPENGL || mode == RENDER_SAFE_OPENGL - || mode == RENDER_GLES_OPENGL) + if (mode == RENDER_NORMAL_OPENGL + || mode == RENDER_SAFE_OPENGL + || mode == RENDER_GLES_OPENGL + || mode == RENDER_MODERN_OPENGL) { return new SubImage(this, mGLImage, x, y, width, height, mTexWidth, mTexHeight); diff --git a/src/resources/map/map.cpp b/src/resources/map/map.cpp index 7ba798319..279262124 100644 --- a/src/resources/map/map.cpp +++ b/src/resources/map/map.cpp @@ -352,7 +352,9 @@ void Map::draw(Graphics *const graphics, int scrollX, int scrollY) #ifdef USE_OPENGL int updateFlag = 0; - if (mOpenGL == RENDER_NORMAL_OPENGL || mOpenGL == RENDER_GLES_OPENGL) + if (mOpenGL == RENDER_NORMAL_OPENGL + || mOpenGL == RENDER_GLES_OPENGL + || mOpenGL == RENDER_MODERN_OPENGL) { if (mLastX != startX || mLastY != startY || mLastScrollX != scrollX || mLastScrollY != scrollY) @@ -411,7 +413,8 @@ void Map::draw(Graphics *const graphics, int scrollX, int scrollY) { #ifdef USE_OPENGL if (mOpenGL == RENDER_NORMAL_OPENGL - || mOpenGL == RENDER_GLES_OPENGL) + || mOpenGL == RENDER_GLES_OPENGL + || mOpenGL == RENDER_MODERN_OPENGL) { if (updateFlag) { diff --git a/src/resources/openglimagehelper.cpp b/src/resources/openglimagehelper.cpp index 6d25aa952..ca5f6410a 100644 --- a/src/resources/openglimagehelper.cpp +++ b/src/resources/openglimagehelper.cpp @@ -202,6 +202,7 @@ Image *OpenGLImageHelper::glLoad(SDL_Surface *tmpImage, { #ifndef ANDROID case RENDER_NORMAL_OPENGL: + case RENDER_MODERN_OPENGL: NormalOpenGLGraphics::bindTexture(mTextureType, texture); break; case RENDER_SAFE_OPENGL: @@ -210,6 +211,7 @@ Image *OpenGLImageHelper::glLoad(SDL_Surface *tmpImage, #else case RENDER_NORMAL_OPENGL: case RENDER_SAFE_OPENGL: + case RENDER_MODERN_OPENGL: #endif case RENDER_GLES_OPENGL: MobileOpenGLGraphics::bindTexture(mTextureType, texture); diff --git a/src/test/testmain.cpp b/src/test/testmain.cpp index 9ef4fdc23..93174f94d 100644 --- a/src/test/testmain.cpp +++ b/src/test/testmain.cpp @@ -192,9 +192,10 @@ int TestMain::exec(const bool testAudio) int batchSize = 256; - // if OpenGL mode is fast mode we can try detect max batch sizes + // if OpenGL mode is normal mode we can try detect max batch sizes if (openGLMode == RENDER_NORMAL_OPENGL - || openGLMode == RENDER_GLES_OPENGL) + || openGLMode == RENDER_GLES_OPENGL + || openGLMode == RENDER_MODERN_OPENGL) { if (!invokeNormalOpenBatchTest("11")) batchSize = readValue2(11); -- cgit v1.2.3-60-g2f50