From 5a69a85c582a2d15d1a1e8398aebc98ea4d2376f Mon Sep 17 00:00:00 2001 From: ExMix Date: Mon, 9 Sep 2013 18:46:30 +0300 Subject: [PATCH] desktop version for debug yopme render policy --- omim.pro | 3 +- yopme_desktop/glwidget.cpp | 118 ++++++++++++++++++++++++++++++++ yopme_desktop/glwidget.hpp | 19 +++++ yopme_desktop/main.cpp | 11 +++ yopme_desktop/mainwindow.cpp | 16 +++++ yopme_desktop/mainwindow.hpp | 24 +++++++ yopme_desktop/mainwindow.ui | 40 +++++++++++ yopme_desktop/yopme_desktop.pro | 63 +++++++++++++++++ 8 files changed, 293 insertions(+), 1 deletion(-) create mode 100644 yopme_desktop/glwidget.cpp create mode 100644 yopme_desktop/glwidget.hpp create mode 100644 yopme_desktop/main.cpp create mode 100644 yopme_desktop/mainwindow.cpp create mode 100644 yopme_desktop/mainwindow.hpp create mode 100644 yopme_desktop/mainwindow.ui create mode 100644 yopme_desktop/yopme_desktop.pro diff --git a/omim.pro b/omim.pro index 72a996e23a..a55e404ad6 100644 --- a/omim.pro +++ b/omim.pro @@ -36,7 +36,8 @@ SUBDIRS = 3party \ graphics/graphics_tests \ gui/gui_tests \ qt \ - map_server + map_server \ + yopme_desktop } else { # libraries which are used on mobile devices SUBDIRS = 3party \ diff --git a/yopme_desktop/glwidget.cpp b/yopme_desktop/glwidget.cpp new file mode 100644 index 0000000000..46f65eb26f --- /dev/null +++ b/yopme_desktop/glwidget.cpp @@ -0,0 +1,118 @@ +#include "glwidget.hpp" + +#include "../base/logging.hpp" +#include "../graphics/render_context.hpp" +#include "../map/qgl_render_context.hpp" +#include "../map/simple_render_policy.hpp" +#include "../map/yopme_render_policy.hpp" +#include "../graphics/render_context.hpp" +#include "../std/shared_ptr.hpp" +#include "../platform/video_timer.hpp" +#include "../platform/platform.hpp" + +namespace +{ + void empty() + { + } + class EmptyVideoTimer : public VideoTimer + { + typedef VideoTimer base_t; + public: + EmptyVideoTimer(TFrameFn func) + : base_t(bind(&empty)) + { + } + + ~EmptyVideoTimer() { stop(); } + + void start() + { + if (m_state == EStopped) + m_state = ERunning; + } + + void resume() + { + if (m_state == EPaused) + { + m_state = EStopped; + start(); + } + } + + void pause() + { + stop(); + m_state = EPaused; + } + + void stop() + { + if (m_state == ERunning) + m_state = EStopped; + } + + void perform() {} + }; +} + +GLWidget::GLWidget(QWidget * parent) + : QGLWidget(parent) +{ + m_f.AddLocalMaps(); +} + +void GLWidget::initializeGL() +{ + EmptyVideoTimer * timer = new EmptyVideoTimer(bind(&QGLWidget::updateGL, this)); + shared_ptr primaryRC(new qt::gl::RenderContext(this)); + graphics::ResourceManager::Params rmParams; + rmParams.m_rtFormat = graphics::Data8Bpp; + rmParams.m_texFormat = graphics::Data8Bpp; + rmParams.m_texRtFormat = graphics::Data8Bpp; + rmParams.m_videoMemoryLimit = GetPlatform().VideoMemoryLimit(); + + RenderPolicy::Params rpParams; + + rpParams.m_videoTimer = timer; + rpParams.m_useDefaultFB = true; + rpParams.m_rmParams = rmParams; + rpParams.m_primaryRC = primaryRC; + rpParams.m_density = graphics::EDensityMDPI; + rpParams.m_skinName = "basic.skn"; + rpParams.m_screenHeight = 640; + rpParams.m_screenWidth = 340; + + try + { + //m_f.SetRenderPolicy(new SimpleRenderPolicy(rpParams)); + m_f.SetRenderPolicy(new YopmeRP(rpParams)); + } + catch (RootException & e) + { + LOG(LERROR, (e.what())); + } +} + +void GLWidget::resizeGL(int w, int h) +{ + m_f.OnSize(w, h); + m_f.Invalidate(); + updateGL(); +} + +void GLWidget::paintGL() +{ + m_f.GetNavigator().SetFromRect(m2::AnyRectD( + m2::RectD(MercatorBounds::LonToX(26.90), + MercatorBounds::LatToY(53.42), + MercatorBounds::LonToX(27.80), + MercatorBounds::LatToY(54.64)))); + + + shared_ptr e(new PaintEvent(m_f.GetRenderPolicy()->GetDrawer().get())); + m_f.BeginPaint(e); + m_f.DoPaint(e); + m_f.EndPaint(e); +} diff --git a/yopme_desktop/glwidget.hpp b/yopme_desktop/glwidget.hpp new file mode 100644 index 0000000000..b97389645c --- /dev/null +++ b/yopme_desktop/glwidget.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include + +#include "../map/framework.hpp" + +class GLWidget : public QGLWidget +{ +public: + GLWidget(QWidget * parent); + +protected: + void initializeGL(); + void resizeGL(int w, int h); + void paintGL(); + +private: + Framework m_f; +}; diff --git a/yopme_desktop/main.cpp b/yopme_desktop/main.cpp new file mode 100644 index 0000000000..a417cbf754 --- /dev/null +++ b/yopme_desktop/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.hpp" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/yopme_desktop/mainwindow.cpp b/yopme_desktop/mainwindow.cpp new file mode 100644 index 0000000000..ed316390b2 --- /dev/null +++ b/yopme_desktop/mainwindow.cpp @@ -0,0 +1,16 @@ +#include "mainwindow.hpp" +#include "ui_mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); + m_w = new GLWidget(this); + setCentralWidget(m_w); +} + +MainWindow::~MainWindow() +{ + delete ui; +} diff --git a/yopme_desktop/mainwindow.hpp b/yopme_desktop/mainwindow.hpp new file mode 100644 index 0000000000..d432bc0b7b --- /dev/null +++ b/yopme_desktop/mainwindow.hpp @@ -0,0 +1,24 @@ +#ifndef MAINWINDOW_HPP +#define MAINWINDOW_HPP + +#include +#include "glwidget.hpp" + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +private: + Ui::MainWindow *ui; + GLWidget * m_w; +}; + +#endif // MAINWINDOW_HPP diff --git a/yopme_desktop/mainwindow.ui b/yopme_desktop/mainwindow.ui new file mode 100644 index 0000000000..e5d8f2b6f5 --- /dev/null +++ b/yopme_desktop/mainwindow.ui @@ -0,0 +1,40 @@ + + + MainWindow + + + + 0 + 0 + 360 + 640 + + + + MainWindow + + + + + + 0 + 0 + 360 + 22 + + + + + + TopToolBarArea + + + false + + + + + + + + diff --git a/yopme_desktop/yopme_desktop.pro b/yopme_desktop/yopme_desktop.pro new file mode 100644 index 0000000000..47573b00f5 --- /dev/null +++ b/yopme_desktop/yopme_desktop.pro @@ -0,0 +1,63 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2013-09-08T12:17:34 +# +#------------------------------------------------- + +ROOT_DIR = .. +DEPENDENCIES = map gui search storage indexer graphics platform anim geometry coding base \ + bzip2 freetype expat fribidi tomcrypt jansson protobuf zlib + + +include($$ROOT_DIR/common.pri) + +QT += core gui opengl + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = yopme_desktop +TEMPLATE = app + +macx-* { + LIBS *= "-framework CoreLocation" "-framework Foundation" "-framework CoreWLAN" \ + "-framework QuartzCore" "-framework IOKit" + + # Bundle Resouces + OTHER_RES.path = Contents/Resources + OTHER_RES.files = ../data/about.html \ + ../data/eula.html \ + ../data/welcome.html \ + ../data/countries.txt \ + ../data/languages.txt \ + ../data/categories.txt \ + ../data/packed_polygons.bin + CLASSIFICATOR_RES.path = Contents/Resources + CLASSIFICATOR_RES.files = ../data/classificator.txt \ + ../data/types.txt \ + ../data/drules_proto.bin + SKIN_RES.path = Contents/Resources/resources-mdpi + SKIN_RES.files = ../data/resources-mdpi/basic.skn ../data/resources-mdpi/symbols.png + FONT_RES.path = Contents/Resources + FONT_RES.files = ../data/01_dejavusans.ttf \ + ../data/02_wqy-microhei.ttf \ + ../data/03_jomolhari-id-a3d.ttf \ + ../data/04_padauk.ttf \ + ../data/05_khmeros.ttf \ + ../data/06_code2000.ttf \ + ../data/fonts_blacklist.txt \ + ../data/fonts_whitelist.txt \ + ../data/unicode_blocks.txt + MWM_RES.path = Contents/Resources + MWM_RES.files = ../data/World.mwm ../data/WorldCoasts.mwm ../data/Belarus.mwm + + QMAKE_BUNDLE_DATA += OTHER_RES CLASSIFICATOR_RES SKIN_RES FONT_RES MWM_RES +} + +SOURCES += main.cpp\ + mainwindow.cpp \ + glwidget.cpp + +HEADERS += mainwindow.hpp \ + glwidget.hpp + +FORMS += mainwindow.ui