From 57421b2b67dae1d77d01f2ce53b35bed89696fee Mon Sep 17 00:00:00 2001 From: ExMix Date: Wed, 31 Dec 2014 16:07:14 +0300 Subject: [PATCH] [ios, drape] fix non-proportional image scale on ios 8 --- drape/oglcontext.hpp | 2 ++ drape_frontend/frontend_renderer.cpp | 1 + iphone/Maps/Platform/opengl/iosOGLContext.h | 1 + iphone/Maps/Platform/opengl/iosOGLContext.mm | 19 +++++++++++++++++-- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/drape/oglcontext.hpp b/drape/oglcontext.hpp index 5581a75a0e..57deae0732 100644 --- a/drape/oglcontext.hpp +++ b/drape/oglcontext.hpp @@ -10,6 +10,8 @@ public: virtual void present() = 0; virtual void makeCurrent() = 0; virtual void setDefaultFramebuffer() = 0; + /// @ param w, h - pixel size of render target (logical size * visual scale) + virtual void resize(int w, int h) {} }; } // namespace dp diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index ee331cab48..01adcf7d7c 100644 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -118,6 +118,7 @@ void FrontendRenderer::AcceptMessage(dp::RefPointer message) m_viewport = rszMsg->GetViewport(); m_view.OnSize(m_viewport.GetX0(), m_viewport.GetY0(), m_viewport.GetWidth(), m_viewport.GetHeight()); + m_contextFactory->getDrawContext()->resize(m_viewport.GetWidth(), m_viewport.GetHeight()); RefreshProjection(); RefreshModelView(); ResolveTileKeys(); diff --git a/iphone/Maps/Platform/opengl/iosOGLContext.h b/iphone/Maps/Platform/opengl/iosOGLContext.h index 7ca8d947ca..af7a43b6fa 100644 --- a/iphone/Maps/Platform/opengl/iosOGLContext.h +++ b/iphone/Maps/Platform/opengl/iosOGLContext.h @@ -15,6 +15,7 @@ public: virtual void makeCurrent(); virtual void present(); virtual void setDefaultFramebuffer(); + virtual void resize(int w, int h); private: CAEAGLLayer * m_layer; diff --git a/iphone/Maps/Platform/opengl/iosOGLContext.mm b/iphone/Maps/Platform/opengl/iosOGLContext.mm index 0217b29909..bdbe7c7cdc 100644 --- a/iphone/Maps/Platform/opengl/iosOGLContext.mm +++ b/iphone/Maps/Platform/opengl/iosOGLContext.mm @@ -49,6 +49,15 @@ void iosOGLContext::setDefaultFramebuffer() glBindFramebuffer(GL_FRAMEBUFFER, m_frameBufferId); } +void iosOGLContext::resize(int /*w*/, int /*h*/) +{ + if (m_needBuffers && m_hasBuffers) + { + destroyBuffers(); + initBuffers(); + } +} + void iosOGLContext::initBuffers() { ASSERT(m_needBuffers, ()); @@ -92,9 +101,15 @@ void iosOGLContext::destroyBuffers() { if (m_needBuffers && m_hasBuffers) { + glFinish(); + glBindFramebuffer(GL_FRAMEBUFFER, m_frameBufferId); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 0); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0); + glBindFramebuffer(GL_FRAMEBUFFER, 0); + glBindRenderbuffer(GL_RENDERBUFFER, 0); glDeleteFramebuffers(1, &m_frameBufferId); - glDeleteBuffers(1, &m_renderBufferId); - glDeleteBuffers(1, &m_depthBufferId); + glDeleteRenderbuffers(1, &m_renderBufferId); + glDeleteRenderbuffers(1, &m_depthBufferId); m_hasBuffers = false; }