61 : QGraphicsScene(parent)
62 , syncUploadRequired_(false)
69 return engine_->RenderEngine();
93 void Render(QPainter *painter, const QRectF &rect) noexcept
95 engine_->Render(painter, rect);
100 return engine_->UpdateRenderTarget(image);
103 void CopyImageData(
const Image &image)
noexcept
105 engine_->CopyImageData(image);
108 void UpdateSceneRect(
const Image &image)
noexcept;
110 void ScheduleSyncUpload() noexcept
112 syncUploadRequired_ =
true;
119 explicit Engine(
class ImageScene &imageScene) noexcept
120 : imageScene_(imageScene)
124 Engine(
const Engine &other) =
delete;
125 Engine &operator=(
const Engine &other) =
delete;
126 Engine(Engine &&other) =
delete;
127 Engine &operator=(Engine &&other) =
delete;
128 virtual ~Engine() =
default;
130 virtual void Render(QPainter *painter,
const QRectF &rect)
noexcept = 0;
132 virtual std::unique_ptr<Image> UpdateRenderTarget(
const Image &image)
noexcept = 0;
134 virtual void CopyImageData(
const Image &image)
noexcept = 0;
138 virtual QWidget *CreateViewport() = 0;
140 virtual
void ViewPortSetup() {}
143 class ImageScene &ImageScene() const noexcept
149 class ImageScene &imageScene_;
152 class RasterEngine :
public Engine
155 explicit RasterEngine(
class ImageScene &imageScene) noexcept
161 void Render(QPainter *painter,
const QRectF &rect)
noexcept override;
163 std::unique_ptr<Image> UpdateRenderTarget(
const Image &image)
noexcept override;
165 void CopyImageData(
const Image &image)
noexcept override;
172 QWidget *CreateViewport()
override
174 return new QWidget();
178 QRectF screenImageRect_;
185 ,
protected QOpenGLFunctions
187 friend class ImageScene::GLViewport;
192 , renderEngine_(renderEngine)
196 clearColor_ = w.palette().color(w.backgroundRole());
200 void Render(QPainter *painter,
const QRectF &rect)
noexcept override;
202 std::unique_ptr<Image> UpdateRenderTarget(
const Image &image)
noexcept override;
204 void CopyImageData(
const Image &image)
noexcept override;
208 return renderEngine_;
211 QWidget *CreateViewport()
override;
213 void ViewPortSetup()
override;
215 void MakeCurrent() noexcept;
217 Cvb::UI::RenderEngine renderEngine_;
219 std::unique_ptr<OpenGLImageRenderer> renderer_;
224 class GLViewport : public QOpenGLWidget
227 explicit GLViewport(GLEngine &glEngine)
229 , glEngine_(glEngine)
234 void initializeGL()
override
237 glEngine_.ViewPortSetup();
243 void drawBackground(QPainter *painter,
const QRectF &rect)
override;
245 std::atomic<bool> syncUploadRequired_;
247 std::mutex renderMutex_;
249 std::unique_ptr<Engine> engine_;