15 input.push_back(
new Port{
this, {}, Types::Image, {}});
16 auto& ctx = score::GUIAppContext();
18 double settings_rate = settings.getRate();
19 if(settings_rate <= 0.)
21 m_conf = {.manualRenderingRate = 1000. / settings_rate};
26 void startRendering()
override { }
27 void render()
override
29 auto renderer = m_renderer.lock();
30 if(renderer && m_renderState)
34 auto rhi = m_renderState->rhi;
35 QRhiCommandBuffer* cb{};
36 if(rhi->beginOffscreenFrame(&cb) != QRhi::FrameOpSuccess)
40 rhi->endOffscreenFrame();
44 shared_readback->data.clear();
45 shared_readback->pixelSize = {};
49 void onRendererChange()
override { }
50 bool canRender()
const override {
return true; }
51 void stopRendering()
override { }
53 void setRenderer(std::shared_ptr<RenderList> r)
override { m_renderer = r; }
54 RenderList* renderer()
const override {
return m_renderer.lock().get(); }
58 m_onResize = conf.onResize;
60 QSize newSz = m_renderSize;
61 if(newSz.width() <= 0 || newSz.height() <= 0)
63 if(newSz.width() <= 0 || newSz.height() <= 0)
64 newSz = QSize{1024, 1024};
66 m_renderState = score::gfx::createRenderState(conf.graphicsApi, newSz,
nullptr);
67 m_renderState->outputSize = m_renderState->renderSize;
69 auto rhi = m_renderState->rhi;
70 m_texture = rhi->newTexture(
71 QRhiTexture::RGBA8, m_renderState->renderSize, 1,
72 QRhiTexture::RenderTarget | QRhiTexture::UsedAsTransferSource);
74 m_renderTarget = rhi->newTextureRenderTarget({m_texture});
75 m_renderState->renderPassDescriptor
76 = m_renderTarget->newCompatibleRenderPassDescriptor();
77 m_renderTarget->setRenderPassDescriptor(m_renderState->renderPassDescriptor);
78 m_renderTarget->create();
83 void destroyOutput()
override { }
86 void setSize(QSize newSz)
94 void setRenderSize(QSize newSz)
96 if(m_renderSize != newSz)
105 QSize newSz = m_renderSize;
106 if(newSz.width() <= 0 || newSz.height() <= 0)
108 if(newSz.width() <= 0 || newSz.height() <= 0)
109 newSz = QSize{1024, 1024};
113 m_renderState->renderSize = newSz;
114 m_renderState->outputSize = newSz;
116 auto rhi = m_renderState->rhi;
118 m_renderTarget->destroy();
119 m_texture->destroy();
120 m_texture->setPixelSize(newSz);
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();
133 std::shared_ptr<RenderState> renderState()
const override {
return m_renderState; }
138 m_texture,
nullptr,
nullptr, m_renderState->renderPassDescriptor,
141 *
this, rt,
const_cast<QRhiReadbackResult&
>(*shared_readback)};
146 std::shared_ptr<QRhiReadbackResult> shared_readback;
149 Configuration m_conf;
151 std::weak_ptr<score::gfx::RenderList> m_renderer{};
152 QRhiTexture* m_texture{};
153 QRhiTextureRenderTarget* m_renderTarget{};
154 std::shared_ptr<score::gfx::RenderState> m_renderState{};
156 std::function<void()> m_onResize;
157 QSize m_size{1024, 1024};
158 QSize m_renderSize{};
Useful abstraction for storing all the data related to a render target.
Definition score-plugin-gfx/Gfx/Graph/Utils.hpp:116