55 lines
1.2 KiB
C++
55 lines
1.2 KiB
C++
#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;
|
|
void OnDestory();
|
|
|
|
void OnFrame(void);
|
|
class OsgView* CreateView(int x, int y, int width, int height, void* winHandle);
|
|
void DestroyView(OsgView* view);
|
|
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:
|
|
osg::ref_ptr<osgViewer::CompositeViewer> compositeViewer_;
|
|
bool initalized_{ false };
|
|
|
|
using OsgViewSet = std::set<OsgView*>;
|
|
OsgViewSet osgViews_;
|
|
|
|
using UpdateRenderList = std::vector<IUpdateRender*>;
|
|
UpdateRenderList updateRenderList_;
|
|
};
|