Skip to content

Commit 6602d62

Browse files
committed
gfx: add various properties to the window device when background mode is enabled
1 parent 13e9756 commit 6602d62

6 files changed

Lines changed: 480 additions & 28 deletions

File tree

src/lib/score/tools/Events.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#pragma once
2+
#include <score/config.hpp>
3+
4+
#include <QEvent>
5+
#include <QWidget>
6+
7+
#include <verdigris>
8+
9+
W_REGISTER_ARGTYPE(QEvent*)
10+
W_REGISTER_ARGTYPE(QTabletEvent*)
11+
12+
W_REGISTER_ARGTYPE(QKeyEvent*)
13+
W_REGISTER_ARGTYPE(QMouseEvent*)
14+
W_REGISTER_ARGTYPE(QHoverEvent*)

src/plugins/score-plugin-gfx/Gfx/Graph/BackgroundNode.hpp

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,15 @@ struct BackgroundNode : OutputNode
5555

5656
void createOutput(score::gfx::OutputConfiguration conf) override
5757
{
58-
m_renderState
59-
= score::gfx::createRenderState(conf.graphicsApi, QSize{1024, 1024}, nullptr);
58+
m_onResize = conf.onResize;
6059

60+
QSize newSz = m_renderSize;
61+
if(newSz.width() <= 0 || newSz.height() <= 0)
62+
newSz = m_size;
63+
if(newSz.width() <= 0 || newSz.height() <= 0)
64+
newSz = QSize{1024, 1024};
65+
66+
m_renderState = score::gfx::createRenderState(conf.graphicsApi, newSz, nullptr);
6167
m_renderState->outputSize = m_renderState->renderSize;
6268

6369
auto rhi = m_renderState->rhi;
@@ -77,6 +83,53 @@ struct BackgroundNode : OutputNode
7783
void destroyOutput() override { }
7884
void updateGraphicsAPI(GraphicsApi) override { }
7985

86+
void setSize(QSize newSz)
87+
{
88+
if(m_size != newSz)
89+
{
90+
m_size = newSz;
91+
resize();
92+
}
93+
}
94+
void setRenderSize(QSize newSz)
95+
{
96+
if(m_renderSize != newSz)
97+
{
98+
m_renderSize = newSz;
99+
resize();
100+
}
101+
}
102+
103+
void resize()
104+
{
105+
QSize newSz = m_renderSize;
106+
if(newSz.width() <= 0 || newSz.height() <= 0)
107+
newSz = m_size;
108+
if(newSz.width() <= 0 || newSz.height() <= 0)
109+
newSz = QSize{1024, 1024};
110+
111+
if(m_renderState)
112+
{
113+
m_renderState->renderSize = newSz;
114+
m_renderState->outputSize = newSz;
115+
116+
auto rhi = m_renderState->rhi;
117+
118+
m_renderTarget->destroy();
119+
m_texture->destroy();
120+
m_texture->setPixelSize(newSz);
121+
m_texture->create();
122+
m_renderTarget = rhi->newTextureRenderTarget({m_texture});
123+
m_renderState->renderPassDescriptor
124+
= m_renderTarget->newCompatibleRenderPassDescriptor();
125+
m_renderTarget->setRenderPassDescriptor(m_renderState->renderPassDescriptor);
126+
m_renderTarget->create();
127+
}
128+
129+
if(m_onResize)
130+
m_onResize();
131+
}
132+
80133
std::shared_ptr<RenderState> renderState() const override { return m_renderState; }
81134

82135
score::gfx::OutputNodeRenderer* createRenderer(RenderList& r) const noexcept override
@@ -99,5 +152,9 @@ struct BackgroundNode : OutputNode
99152
QRhiTexture* m_texture{};
100153
QRhiTextureRenderTarget* m_renderTarget{};
101154
std::shared_ptr<score::gfx::RenderState> m_renderState{};
155+
156+
std::function<void()> m_onResize;
157+
QSize m_size{1024, 1024};
158+
QSize m_renderSize{};
102159
};
103160
}

src/plugins/score-plugin-gfx/Gfx/Graph/Window.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
#include <Gfx/Graph/RenderState.hpp>
44

5+
#include <score/tools/Events.hpp>
6+
57
#include <QElapsedTimer>
68
#include <QTabletEvent>
79
#include <QWindow>
@@ -77,5 +79,3 @@ class SCORE_PLUGIN_GFX_EXPORT Window : public QWindow
7779

7880
Q_DECLARE_METATYPE(score::gfx::Window*)
7981
W_REGISTER_ARGTYPE(score::gfx::Window*)
80-
W_REGISTER_ARGTYPE(QEvent*)
81-
W_REGISTER_ARGTYPE(QTabletEvent*)

0 commit comments

Comments
 (0)