#pragma once #include #include #include #include #include "app/Singleton.h" class OsgView; class IUpdateRender; class OsgViewer : public QObject, public Singleton { Q_OBJECT public: explicit OsgViewer(QObject* parent = nullptr) noexcept; ~OsgViewer() override; void SetViewer(osgViewer::CompositeViewer* viewer) { compositeViewer_ = viewer; } void OnDestory(); void OnFrame(void); bool IsDone(void) const; OsgView* GetView() const; bool Initialize(void); void Uninitialize(void); void RegistRender(IUpdateRender* render); void UnRegistRender(IUpdateRender* render); protected: void customEvent(QEvent* event) override; void OnStartPlay(); void OnAddView(OsgView* view, int x, int y, int width, int height); void OnRemoveView(OsgView* view); void RenderUpdate(); private: osgViewer::CompositeViewer* compositeViewer_; bool initalized_{ false }; using OsgViewSet = std::set; OsgViewSet osgViews_; using UpdateRenderList = std::vector; UpdateRenderList updateRenderList_; };