Loading...
Searching...
No Matches
TextureSource.hpp
1#pragma once
2#if defined(SCORE_HAS_GPU_JS)
3#include <Execution/DocumentPlugin.hpp>
4#include <Gfx/GfxContext.hpp>
5#include <Gfx/TexturePort.hpp>
6
7#include <QPointer>
8#include <QQuickRhiItem>
9#include <QSGSimpleTextureNode>
10#include <QSGTexture>
11#include <QTimer>
12
13#include <private/qrhi_p.h>
14
15#include <memory>
16#include <verdigris>
17
18namespace Gfx
19{
20class DocumentPlugin;
21}
22
23namespace score::gfx
24{
25class Node;
26class PreviewNode;
27}
28
29namespace JS
30{
31
32class TextureSource : public QQuickRhiItem
33{
34 W_OBJECT(TextureSource)
35 QML_ELEMENT
36
37public:
38 explicit TextureSource(QQuickItem* parent = nullptr);
39 ~TextureSource();
40
41 // QML Properties
42 INLINE_PROPERTY_CREF(QString, process, = "", process, setProcess, processChanged)
43 INLINE_PROPERTY_CREF(QVariant, port, = "", port, setPort, portChanged)
44
45 QQuickRhiItemRenderer* createRenderer() override;
46
47protected:
48 void geometryChange(const QRectF& newGeometry, const QRectF& oldGeometry) override;
49 void componentComplete() override;
50 void releaseResources() override;
51
52 void handleWindowChanged(QQuickWindow* window);
53 void onRenderFrame();
54
55private:
56 friend class TextureSourceRenderer;
57 void rebuild();
58 void do_rebuild();
59 bool connectToOutlet();
60 void disconnectFromOutlet();
61 QRhiTexture* extractTextureFromNode();
62
63 QPointer<Gfx::TextureOutlet> m_outlet{};
64 QPointer<Gfx::DocumentPlugin> m_gfxPlugin{};
65 QPointer<Execution::DocumentPlugin> m_execPlugin{};
66 QPointer<Process::ProcessModel> m_processPtr;
67
68 // For texture extraction from the graph
69 bool m_isConnected = false;
70 bool m_needsRebuild = false;
71 int m_nodeId{-1};
72};
73
74}
75#endif
TreeNode< DeviceExplorerNode > Node
Definition DeviceNode.hpp:74
Binds the rendering pipeline to ossia processes.
Definition CameraDevice.cpp:24
Graphics rendering pipeline for ossia score.
Definition Filter/PreviewWidget.hpp:12