qmlfrontend/gameview.cpp
branchqmlfrontend
changeset 12883 adb1fccc706a
parent 12876 b544bbbd0696
child 12890 9c259fb4d405
equal deleted inserted replaced
12882:bf58f2403953 12883:adb1fccc706a
     6 
     6 
     7 #include "flib.h"
     7 #include "flib.h"
     8 
     8 
     9 extern "C" {
     9 extern "C" {
    10 extern GameTick_t* flibGameTick;
    10 extern GameTick_t* flibGameTick;
       
    11 extern ResizeWindow_t* flibResizeWindow;
    11 }
    12 }
    12 
    13 
    13 GameView::GameView()
    14 GameView::GameView()
    14     : m_delta(0)
    15     : m_delta(0)
    15     , m_renderer(0)
    16     , m_renderer(0)
       
    17     , m_windowChanged(true)
    16 {
    18 {
    17     connect(this, &QQuickItem::windowChanged, this, &GameView::handleWindowChanged);
    19     connect(this, &QQuickItem::windowChanged, this, &GameView::handleWindowChanged);
    18 }
    20 }
    19 
    21 
    20 void GameView::tick(quint32 delta)
    22 void GameView::tick(quint32 delta)
    29     if (win) {
    31     if (win) {
    30         connect(win, &QQuickWindow::beforeSynchronizing, this, &GameView::sync, Qt::DirectConnection);
    32         connect(win, &QQuickWindow::beforeSynchronizing, this, &GameView::sync, Qt::DirectConnection);
    31         connect(win, &QQuickWindow::sceneGraphInvalidated, this, &GameView::cleanup, Qt::DirectConnection);
    33         connect(win, &QQuickWindow::sceneGraphInvalidated, this, &GameView::cleanup, Qt::DirectConnection);
    32 
    34 
    33         win->setClearBeforeRendering(false);
    35         win->setClearBeforeRendering(false);
       
    36 
       
    37         m_windowChanged = true;
    34     }
    38     }
    35 }
    39 }
    36 
    40 
    37 void GameView::cleanup()
    41 void GameView::cleanup()
    38 {
    42 {
    40         delete m_renderer;
    44         delete m_renderer;
    41         m_renderer = 0;
    45         m_renderer = 0;
    42     }
    46     }
    43 }
    47 }
    44 
    48 
    45 GameViewRenderer::~GameViewRenderer()
       
    46 {
       
    47 }
       
    48 
       
    49 void GameView::sync()
    49 void GameView::sync()
    50 {
    50 {
    51     if (!m_renderer) {
    51     if (!m_renderer) {
    52         m_renderer = new GameViewRenderer();
    52         m_renderer = new GameViewRenderer();
    53         connect(window(), &QQuickWindow::beforeRendering, m_renderer, &GameViewRenderer::paint, Qt::DirectConnection);
    53         connect(window(), &QQuickWindow::beforeRendering, m_renderer, &GameViewRenderer::paint, Qt::DirectConnection);
    54     }
    54     }
    55     m_renderer->setViewportSize(window()->size() * window()->devicePixelRatio());
    55 
       
    56     if (m_windowChanged)
       
    57         m_renderer->setViewportSize(window()->size() * window()->devicePixelRatio());
       
    58 
    56     m_renderer->tick(m_delta);
    59     m_renderer->tick(m_delta);
    57     m_renderer->setWindow(window());
    60 }
       
    61 
       
    62 GameViewRenderer::~GameViewRenderer()
       
    63 {
       
    64 }
       
    65 
       
    66 void GameViewRenderer::setViewportSize(const QSize& size)
       
    67 {
       
    68     flibResizeWindow(size.width(), size.height());
    58 }
    69 }
    59 
    70 
    60 void GameViewRenderer::paint()
    71 void GameViewRenderer::paint()
    61 {
    72 {
    62     if (m_delta == 0)
    73     if (m_delta == 0)
    63         return;
    74         return;
    64 
    75 
    65     flibGameTick(m_delta);
    76     flibGameTick(m_delta);
    66 
    77 
    67     m_window->resetOpenGLState();
    78     //m_window->resetOpenGLState();
    68 }
    79 }