1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
#ifndef OSGQOPENGLWIDGET_H
#define OSGQOPENGLWIDGET_H
#include <mutex>
#ifdef WIN32
#include <osg/GL>
#endif
#include <osg/ArgumentParser>
#include <QOpenGLWidget>
#include <QReadWriteLock>
class CompositeOsgRenderer;
namespace osgViewer
{
class View;
class GraphicsWindowEmbedded;
}
class osgQOpenGLWidget : public QOpenGLWidget
{
Q_OBJECT
protected:
CompositeOsgRenderer* m_renderer {nullptr};
std::mutex _osgMutex;
osg::ArgumentParser* _arguments {nullptr};
bool _isFirstFrame {true};
friend class CompositeOsgRenderer;
public:
osgQOpenGLWidget(QWidget* parent = nullptr);
osgQOpenGLWidget(osg::ArgumentParser* arguments, QWidget* parent = nullptr);
virtual ~osgQOpenGLWidget();
/** Get osgViewer View */
virtual osgViewer::View* getOsgView(unsigned i);
//! get mutex
virtual std::mutex* mutex();
CompositeOsgRenderer* getCompositeViewer();
void setGraphicsWindowEmbedded(osg::ref_ptr<osgViewer::GraphicsWindowEmbedded> osgWinEmb);
signals:
void initialized();
protected:
//! call createRender. If overloaded, this method must send initialized signal at end
void initializeGL() override;
void resizeGL(int w, int h) override;
//! lock scene graph and call osgViewer::frame()
void paintGL() override;
//! called before creating renderer
virtual void setDefaultDisplaySettings();
void createRenderer();
};
#endif // OSGQOPENGLWIDGET_H
|