#ifndef OSGQOPENGLWINDOW_H #define OSGQOPENGLWINDOW_H #ifdef __APPLE__ # define __glext_h_ # include # undef __glext_h_ # include #endif #include #ifdef WIN32 //#define __gl_h_ #include #endif #include #include #include #include class OSGRenderer; class QWidget; namespace osgViewer { class Viewer; } class OsgOpenGLWindow : public QOpenGLWindow { Q_OBJECT protected: OSGRenderer* m_renderer {nullptr}; bool _osgWantsToRenderFrame{true}; OpenThreads::ReadWriteMutex _osgMutex; bool _isFirstFrame {true}; friend class OSGRenderer; public: OsgOpenGLWindow(QWidget* parent = nullptr); ~OsgOpenGLWindow() override; /** Get osgViewer View */ virtual osgViewer::Viewer* getOsgViewer(); //! get mutex virtual OpenThreads::ReadWriteMutex* mutex(); QWidget* AsWidget() { return widget_; } signals: void initialized(); protected: void initializeGL() override; void resizeGL(int w, int h) override; void paintUnderGL() override; //! called before creating renderer virtual void setDefaultDisplaySettings(); void keyPressEvent(QKeyEvent* event) override; void keyReleaseEvent(QKeyEvent* event) override; void mousePressEvent(QMouseEvent* event) override; void mouseReleaseEvent(QMouseEvent* event) override; void mouseDoubleClickEvent(QMouseEvent* event) override; void mouseMoveEvent(QMouseEvent* event) override; void wheelEvent(QWheelEvent* event) override; void createRenderer(); private: void OnRenderFlush(); private: QWidget* widget_{ nullptr }; osg::ref_ptr gw_; OSGRenderer* renderer_{ nullptr }; class QOpenGLShaderProgram* shaderProgram_{nullptr}; class QOpenGLVertexArrayObject* vao_{ nullptr }; uint32_t shaderTextureId_{ 0 }; bool updateTexture_{ false }; }; #endif // OSGQOPENGLWINDOW_H