qmlfrontend/gameview.cpp
branchqmlfrontend
changeset 12883 adb1fccc706a
parent 12876 b544bbbd0696
child 12890 9c259fb4d405
--- a/qmlfrontend/gameview.cpp	Sat Jan 06 03:17:12 2018 +0100
+++ b/qmlfrontend/gameview.cpp	Sun Jan 07 01:21:42 2018 +0100
@@ -8,11 +8,13 @@
 
 extern "C" {
 extern GameTick_t* flibGameTick;
+extern ResizeWindow_t* flibResizeWindow;
 }
 
 GameView::GameView()
     : m_delta(0)
     , m_renderer(0)
+    , m_windowChanged(true)
 {
     connect(this, &QQuickItem::windowChanged, this, &GameView::handleWindowChanged);
 }
@@ -31,6 +33,8 @@
         connect(win, &QQuickWindow::sceneGraphInvalidated, this, &GameView::cleanup, Qt::DirectConnection);
 
         win->setClearBeforeRendering(false);
+
+        m_windowChanged = true;
     }
 }
 
@@ -42,19 +46,26 @@
     }
 }
 
-GameViewRenderer::~GameViewRenderer()
-{
-}
-
 void GameView::sync()
 {
     if (!m_renderer) {
         m_renderer = new GameViewRenderer();
         connect(window(), &QQuickWindow::beforeRendering, m_renderer, &GameViewRenderer::paint, Qt::DirectConnection);
     }
-    m_renderer->setViewportSize(window()->size() * window()->devicePixelRatio());
+
+    if (m_windowChanged)
+        m_renderer->setViewportSize(window()->size() * window()->devicePixelRatio());
+
     m_renderer->tick(m_delta);
-    m_renderer->setWindow(window());
+}
+
+GameViewRenderer::~GameViewRenderer()
+{
+}
+
+void GameViewRenderer::setViewportSize(const QSize& size)
+{
+    flibResizeWindow(size.width(), size.height());
 }
 
 void GameViewRenderer::paint()
@@ -64,5 +75,5 @@
 
     flibGameTick(m_delta);
 
-    m_window->resetOpenGLState();
+    //m_window->resetOpenGLState();
 }