diff --git a/drape_frontend/backend_renderer.cpp b/drape_frontend/backend_renderer.cpp index 5c8766bb10..154a0fc50e 100644 --- a/drape_frontend/backend_renderer.cpp +++ b/drape_frontend/backend_renderer.cpp @@ -69,9 +69,6 @@ namespace df PostToRenderThreads(MovePointer(new DropTilesMessage(descr))); } break; - case Message::Resize: - m_readManager->Resize(static_cast(message.GetRaw())->GetRect()); - break; case Message::TileReadStarted: case Message::TileReadEnded: case Message::MapShapeReaded: diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp index b2041588de..dd618f71b9 100644 --- a/drape_frontend/drape_engine.cpp +++ b/drape_frontend/drape_engine.cpp @@ -26,8 +26,6 @@ namespace df void DrapeEngine::OnSizeChanged(int x0, int y0, int w, int h) { - m_threadCommutator->PostMessage(ThreadsCommutator::ResourceUploadThread, - MovePointer(new ResizeMessage(x0, y0, w, h))); m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, MovePointer(new ResizeMessage(x0, y0, w, h))); } diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index 1a27d119f5..50b8840b15 100644 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -26,7 +26,12 @@ namespace df m_commutator->RegisterThread(ThreadsCommutator::RenderThread, this); RefreshProjection(viewport.GetWidth(), viewport.GetHeight()); - RefreshModelView(0); + + m_modelView.OnSize(viewport.GetX0(), viewport.GetY0(), viewport.GetWidth(), viewport.GetHeight()); + m2::RectD rect(-174, -95, 174, 95); + m_modelView.SetFromRect(m2::AnyRectD(m2::PointD(0, 0), ang::AngleD(0), rect)); + + RefreshModelView(); StartThread(); } @@ -107,21 +112,24 @@ namespace df case Message::Resize: { ResizeMessage * rszMsg = static_cast(message.GetRaw()); - RefreshProjection(rszMsg->GetRect().SizeX(), rszMsg->GetRect().SizeY()); + m2::RectI const & rect = rszMsg->GetRect(); + int32_t sizeX = rect.SizeX(); + int32_t sizeY = rect.SizeY(); + m_modelView.OnSize(0, 0, sizeX, sizeY); + RefreshProjection(sizeX, sizeY); + m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread, + MovePointer(new UpdateCoverageMessage(m_modelView))); break; } case Message::Rotate: { RotateMessage * rtMsg = static_cast(message.GetRaw()); - RefreshModelView(rtMsg->GetDstAngle()); - - ScreenBase screen(m2::RectI(0, 0, m_viewport.GetWidth(), m_viewport.GetHeight()), - m2::AnyRectD(m2::PointD(0, 0), ang::AngleD(rtMsg->GetDstAngle()), - m2::RectD(0 ,0, 50, 50))); + m_modelView.Rotate(rtMsg->GetDstAngle()); + RefreshModelView(); m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread, - MovePointer(new UpdateCoverageMessage(screen))); + MovePointer(new UpdateCoverageMessage(m_modelView))); break; } @@ -178,19 +186,19 @@ namespace df m_generalUniforms.SetMatrix4x4Value("projection", m); } - void FrontendRenderer::RefreshModelView(float radians) + void FrontendRenderer::RefreshModelView() { - float c = cos(radians); - float s = sin(radians); - float model[16] = - { - c, -s, 0.0, 0.0, - s, c, 0.0, 0.0, - 0.0, 0.0, 1.0, 0.0, - 0.0, 0.0, 0.0, 1.0 - }; + ScreenBase::MatrixT const & m = m_modelView.GtoPMatrix(); + math::Matrix mv; - m_generalUniforms.SetMatrix4x4Value("modelView", model); + /// preparing ModelView matrix + + mv(0, 0) = m(0, 0); mv(0, 1) = m(1, 0); mv(0, 2) = 0; mv(0, 3) = m(2, 0); + mv(1, 0) = m(0, 1); mv(1, 1) = m(1, 1); mv(1, 2) = 0; mv(1, 3) = m(2, 1); + mv(2, 0) = 0; mv(2, 1) = 0; mv(2, 2) = 1; mv(2, 3) = 0; + mv(3, 0) = m(0, 2); mv(3, 1) = m(1, 2); mv(3, 2) = 0; mv(3, 3) = m(2, 2); + + m_generalUniforms.SetMatrix4x4Value("modelView", mv.m_data); } void FrontendRenderer::RenderPartImpl(pair > & node) diff --git a/drape_frontend/frontend_renderer.hpp b/drape_frontend/frontend_renderer.hpp index 9ee6b9bb02..1cfbcdf77b 100644 --- a/drape_frontend/frontend_renderer.hpp +++ b/drape_frontend/frontend_renderer.hpp @@ -22,6 +22,8 @@ #include "../drape/uniform_values_storage.hpp" +#include "../geometry/screenbase.hpp" + #include "../std/map.hpp" namespace df @@ -55,7 +57,7 @@ namespace df private: void RenderScene(); void RefreshProjection(int w, int h); - void RefreshModelView(float radians); + void RefreshModelView(); void RenderPartImpl(pair > & node); @@ -87,5 +89,6 @@ namespace df UniformValuesStorage m_generalUniforms; Viewport m_viewport; + ScreenBase m_modelView; }; } diff --git a/drape_frontend/read_manager.cpp b/drape_frontend/read_manager.cpp index 1ff941672d..f7400f6b24 100644 --- a/drape_frontend/read_manager.cpp +++ b/drape_frontend/read_manager.cpp @@ -90,11 +90,6 @@ namespace df m_currentViewport = screen; } - void ReadManager::Resize(const m2::RectI & rect) - { - m_currentViewport.OnSize(rect); - } - void ReadManager::Stop() { for_each(m_tileInfos.begin(), m_tileInfos.end(), bind(&ReadManager::CancelTileInfo, this, _1)); diff --git a/drape_frontend/read_manager.hpp b/drape_frontend/read_manager.hpp index 93d0e15925..259fb9e2d8 100644 --- a/drape_frontend/read_manager.hpp +++ b/drape_frontend/read_manager.hpp @@ -29,7 +29,6 @@ namespace df ReadManager(EngineContext & context, model::FeaturesFetcher & model); void UpdateCoverage(ScreenBase const & screen, CoverageUpdateDescriptor & updateDescr); - void Resize(m2::RectI const & rect); void Stop(); static size_t ReadCount(); diff --git a/drape_head/mainwindow.cpp b/drape_head/mainwindow.cpp index 76c23c12af..3d784fece9 100644 --- a/drape_head/mainwindow.cpp +++ b/drape_head/mainwindow.cpp @@ -8,7 +8,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , m_surface(NULL) { - resize(600, 400); + resize(1200, 800); DrapeSurface * surface = new DrapeSurface(); m_surface = QWidget::createWindowContainer(surface, this); setCentralWidget(m_surface);