osgQOpenGLWindow 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #ifndef OSGQOPENGLWINDOW_H
  2. #define OSGQOPENGLWINDOW_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 <QOpenGLWindow>
  16. #include <QOpenGLFunctions>
  17. #include <QReadWriteLock>
  18. class OSGRenderer;
  19. class QWidget;
  20. namespace osgViewer
  21. {
  22. class Viewer;
  23. }
  24. class OSGQOPENGL_EXPORT osgQOpenGLWindow : public QOpenGLWindow,
  25. protected QOpenGLFunctions
  26. {
  27. Q_OBJECT
  28. protected:
  29. OSGRenderer* m_renderer {nullptr};
  30. bool _osgWantsToRenderFrame{true};
  31. OpenThreads::ReadWriteMutex _osgMutex;
  32. bool _isFirstFrame {true};
  33. friend class OSGRenderer;
  34. QWidget* _widget = nullptr;
  35. public:
  36. osgQOpenGLWindow(QWidget* parent = nullptr);
  37. virtual ~osgQOpenGLWindow();
  38. /** Get osgViewer View */
  39. virtual osgViewer::Viewer* getOsgViewer();
  40. //! get mutex
  41. virtual OpenThreads::ReadWriteMutex* mutex();
  42. QWidget* asWidget()
  43. {
  44. return _widget;
  45. }
  46. signals:
  47. void initialized();
  48. protected:
  49. //! call createRender. If overloaded, this method must send initialized signal at end
  50. void initializeGL() override;
  51. void resizeGL(int w, int h) override;
  52. //! lock scene graph and call osgViewer::frame()
  53. void paintGL() override;
  54. //! called before creating renderer
  55. virtual void setDefaultDisplaySettings();
  56. void keyPressEvent(QKeyEvent* event) override;
  57. void keyReleaseEvent(QKeyEvent* event) override;
  58. void mousePressEvent(QMouseEvent* event) override;
  59. void mouseReleaseEvent(QMouseEvent* event) override;
  60. void mouseDoubleClickEvent(QMouseEvent* event) override;
  61. void mouseMoveEvent(QMouseEvent* event) override;
  62. void wheelEvent(QWheelEvent* event) override;
  63. void createRenderer();
  64. };
  65. #endif // OSGQOPENGLWINDOW_H