diff --git a/map/render_queue_routine.cpp b/map/render_queue_routine.cpp index 16fb1ed39f..5e67b4d0f1 100644 --- a/map/render_queue_routine.cpp +++ b/map/render_queue_routine.cpp @@ -80,19 +80,23 @@ void RenderQueueRoutine::processResize(ScreenBase const & /*frameScreen*/) m_renderState->m_actualTarget.reset(); m_renderState->m_actualTarget = make_shared_ptr(new yg::gl::RawRGBA8Texture(texW, texH)); - m_threadDrawer->screen()->setRenderTarget(m_renderState->m_actualTarget); - m_threadDrawer->screen()->beginFrame(); - m_threadDrawer->screen()->clear(); - m_threadDrawer->screen()->endFrame(); + m_auxScreen->onSize(texW, texH); + m_auxScreen->setRenderTarget(m_renderState->m_actualTarget); + m_auxScreen->beginFrame(); + m_auxScreen->clear(); + m_auxScreen->endFrame(); +// m_renderState->m_actualTarget->fill(yg::Color(192, 192, 192, 255)); for (size_t i = 0; i < m_renderState->m_backBufferLayers.size(); ++i) { - m_threadDrawer->screen()->setRenderTarget(m_renderState->m_backBufferLayers[i]); - m_threadDrawer->screen()->beginFrame(); - m_threadDrawer->screen()->clear(); - m_threadDrawer->screen()->endFrame(); + m_auxScreen->setRenderTarget(m_renderState->m_backBufferLayers[i]); + m_auxScreen->beginFrame(); + m_auxScreen->clear(); + m_auxScreen->endFrame(); } +// m_renderState->m_backBufferLayers[i]->fill(yg::Color(192, 192, 192, 255)); + m_renderState->m_doRepaintAll = true; m_renderState->m_isResized = false; @@ -105,12 +109,12 @@ void RenderQueueRoutine::getUpdateAreas(vector & areas) size_t w = m_renderState->m_textureWidth; size_t h = m_renderState->m_textureHeight; -/* if (m_renderState->m_doRepaintAll) + if (m_renderState->m_doRepaintAll) { m_renderState->m_doRepaintAll = false; areas.push_back(m2::RectI(0, 0, w, h)); return; - }*/ + } if (m_renderState->isPanning()) { @@ -220,6 +224,12 @@ void RenderQueueRoutine::Do() params.m_doPeriodicalUpdate = m_doPeriodicalUpdate; m_threadDrawer = make_shared_ptr(new DrawerYG(m_skinName, params)); + + yg::gl::Screen::Params auxParams; + auxParams.m_frameBuffer = m_frameBuffer; + + m_auxScreen = make_shared_ptr(new yg::gl::Screen(auxParams)); + CHECK(m_visualScale != 0, ("Set the VisualScale first!")); m_threadDrawer->SetVisualScale(m_visualScale); diff --git a/map/render_queue_routine.hpp b/map/render_queue_routine.hpp index 567b85ad21..b45a474360 100644 --- a/map/render_queue_routine.hpp +++ b/map/render_queue_routine.hpp @@ -31,6 +31,7 @@ namespace yg class BaseTexture; class RenderState; class RenderState; + class Screen; } } @@ -57,6 +58,7 @@ private: shared_ptr m_renderContext; shared_ptr m_frameBuffer; shared_ptr m_threadDrawer; + shared_ptr m_auxScreen; threads::Condition m_hasRenderCommands; shared_ptr m_currentRenderCommand; diff --git a/yg/render_state_updater.cpp b/yg/render_state_updater.cpp index 08c5ef1c4c..09fda87f47 100644 --- a/yg/render_state_updater.cpp +++ b/yg/render_state_updater.cpp @@ -100,7 +100,7 @@ namespace yg void RenderStateUpdater::endFrame() { - if (m_indicesCount && m_renderState) + if (m_renderState) updateActualTarget(); base_t::endFrame(); } diff --git a/yg/renderer.cpp b/yg/renderer.cpp index 68a049137a..f85c5a5a6d 100644 --- a/yg/renderer.cpp +++ b/yg/renderer.cpp @@ -95,9 +95,9 @@ namespace yg OGLCHECK(glResolveMultisampleFramebufferAPPLE()); OGLCHECK(glBindFramebufferOES(GL_DRAW_FRAMEBUFFER_APPLE, m_multiSampledFrameBuffer->id())); + #else /// Somehow this does the trick with the "trash-texture" upon first application redraw. - m_multiSampledFrameBuffer->makeCurrent(); OGLCHECK(glBindFramebuffer(GL_READ_FRAMEBUFFER, m_multiSampledFrameBuffer->id())); OGLCHECK(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_frameBuffer->id())); @@ -108,6 +108,7 @@ namespace yg OGLCHECK(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_multiSampledFrameBuffer->id())); #endif +// m_multiSampledFrameBuffer->makeCurrent(); OGLCHECK(glFinish()); } }