equal
deleted
inserted
replaced
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 } |