osgQOpenGLWidget 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #ifndef OSGQOPENGLWIDGET_H
  2. #define OSGQOPENGLWIDGET_H
  3. #ifdef __APPLE__
  4. # define __glext_h_
  5. # include <QtGui/qopengl.h>
  6. # undef __glext_h_
  7. # include <QtGui/qopenglext.h>
  8. #endif
  9. #include <osgQOpenGL/Export>
  10. #include <OpenThreads/ReadWriteMutex>
  11. #ifdef WIN32
  12. //#define __gl_h_
  13. #include <osg/GL>
  14. #endif
  15. #include <osg/ArgumentParser>
  16. #include <QOpenGLWidget>
  17. #include <QOpenGLFunctions>
  18. #include <QReadWriteLock>
  19. class OSGRenderer;
  20. namespace osgViewer
  21. {
  22. class Viewer;
  23. }
  24. class OSGQOPENGL_EXPORT osgQOpenGLWidget : public QOpenGLWidget,
  25. protected QOpenGLFunctions
  26. {
  27. Q_OBJECT
  28. protected:
  29. OSGRenderer* m_renderer {nullptr};
  30. bool _osgWantsToRenderFrame{true};
  31. OpenThreads::ReadWriteMutex _osgMutex;
  32. osg::ArgumentParser* _arguments {nullptr};
  33. bool _isFirstFrame {true};
  34. friend class OSGRenderer;
  35. public:
  36. osgQOpenGLWidget(QWidget* parent = nullptr);
  37. osgQOpenGLWidget(osg::ArgumentParser* arguments, QWidget* parent = nullptr);
  38. virtual ~osgQOpenGLWidget();
  39. /** Get osgViewer View */
  40. virtual osgViewer::Viewer* getOsgViewer();
  41. //! get mutex
  42. virtual OpenThreads::ReadWriteMutex* mutex();
  43. signals:
  44. void initialized();
  45. protected:
  46. //! call createRender. If overloaded, this method must send initialized signal at end
  47. void initializeGL() override;
  48. void resizeGL(int w, int h) override;
  49. //! lock scene graph and call osgViewer::frame()
  50. void paintGL() override;
  51. //! called before creating renderer
  52. virtual void setDefaultDisplaySettings();
  53. void keyPressEvent(QKeyEvent* event) override;
  54. void keyReleaseEvent(QKeyEvent* event) override;
  55. void mousePressEvent(QMouseEvent* event) override;
  56. void mouseReleaseEvent(QMouseEvent* event) override;
  57. void mouseDoubleClickEvent(QMouseEvent* event) override;
  58. void mouseMoveEvent(QMouseEvent* event) override;
  59. void wheelEvent(QWheelEvent* event) override;
  60. void createRenderer();
  61. private:
  62. };
  63. #endif // OSGQOPENGLWIDGET_H