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(); }
59 = score::gfx::createRenderState(conf.graphicsApi, QSize{1024, 1024},
nullptr);
61 m_renderState->outputSize = m_renderState->renderSize;
63 auto rhi = m_renderState->rhi;
64 m_texture = rhi->newTexture(
65 QRhiTexture::RGBA8, m_renderState->renderSize, 1,
66 QRhiTexture::RenderTarget | QRhiTexture::UsedAsTransferSource);
68 m_renderTarget = rhi->newTextureRenderTarget({m_texture});
69 m_renderState->renderPassDescriptor
70 = m_renderTarget->newCompatibleRenderPassDescriptor();
71 m_renderTarget->setRenderPassDescriptor(m_renderState->renderPassDescriptor);
72 m_renderTarget->create();
77 void destroyOutput()
override { }
80 std::shared_ptr<RenderState> renderState()
const override {
return m_renderState; }
85 m_texture,
nullptr,
nullptr, m_renderState->renderPassDescriptor,
88 *
this, rt,
const_cast<QRhiReadbackResult&
>(*shared_readback)};
93 std::shared_ptr<QRhiReadbackResult> shared_readback;
98 std::weak_ptr<score::gfx::RenderList> m_renderer{};
99 QRhiTexture* m_texture{};
100 QRhiTextureRenderTarget* m_renderTarget{};
101 std::shared_ptr<score::gfx::RenderState> m_renderState{};
Base class for sink nodes (QWindow, spout, syphon, NDI output, ...)
Definition OutputNode.hpp:31
void render(QRhiCommandBuffer &commands, bool force=false)
Render every node in order.
Definition RenderList.cpp:400
score::gfx::OutputNodeRenderer * createRenderer(RenderList &r) const noexcept override
Create a renderer in a given context for this node.
Definition BackgroundNode.hpp:82
Useful abstraction for storing all the data related to a render target.
Definition score-plugin-gfx/Gfx/Graph/Utils.hpp:116