2025-01-04 04:12:51 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include <set>
|
|
|
|
|
|
|
|
|
|
#include <QObject>
|
|
|
|
|
|
|
|
|
|
#include <osgViewer/CompositeViewer>
|
|
|
|
|
#include <osgViewer/GraphicsWindow>
|
|
|
|
|
|
|
|
|
|
#include "app/Singleton.h"
|
|
|
|
|
|
|
|
|
|
class OsgView;
|
|
|
|
|
class IUpdateRender;
|
|
|
|
|
|
|
|
|
|
class OsgViewer : public QObject, public Singleton<OsgViewer> {
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
explicit OsgViewer(QObject* parent = nullptr) noexcept;
|
|
|
|
|
~OsgViewer() override;
|
2025-03-13 00:42:41 +00:00
|
|
|
|
|
|
|
|
void SetViewer(osgViewer::CompositeViewer* viewer) {
|
|
|
|
|
compositeViewer_ = viewer;
|
|
|
|
|
}
|
2025-01-04 04:12:51 +00:00
|
|
|
void OnDestory();
|
|
|
|
|
|
|
|
|
|
void OnFrame(void);
|
2025-03-13 00:42:41 +00:00
|
|
|
|
2025-01-04 04:12:51 +00:00
|
|
|
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:
|
2025-03-13 00:42:41 +00:00
|
|
|
osgViewer::CompositeViewer* compositeViewer_;
|
2025-01-04 04:12:51 +00:00
|
|
|
bool initalized_{ false };
|
|
|
|
|
|
|
|
|
|
using OsgViewSet = std::set<OsgView*>;
|
|
|
|
|
OsgViewSet osgViews_;
|
|
|
|
|
|
|
|
|
|
using UpdateRenderList = std::vector<IUpdateRender*>;
|
|
|
|
|
UpdateRenderList updateRenderList_;
|
|
|
|
|
};
|