DYTSrouce/src/viewer/OsgOpenGLWindow.h

92 lines
1.9 KiB
C
Raw Normal View History

2025-01-04 04:12:51 +00:00
#ifndef OSGQOPENGLWINDOW_H
#define OSGQOPENGLWINDOW_H
#ifdef __APPLE__
# define __glext_h_
# include <QtGui/qopengl.h>
# undef __glext_h_
# include <QtGui/qopenglext.h>
#endif
#include <OpenThreads/ReadWriteMutex>
#ifdef WIN32
//#define __gl_h_
#include <osg/GL>
#endif
#include <QOpenGLWindow>
#include <QOpenGLFunctions>
#include <QReadWriteLock>
2025-01-14 18:02:25 +00:00
#include <osg/ref_ptr>
2025-01-04 04:12:51 +00:00
class OSGRenderer;
class QWidget;
namespace osgViewer
{
class Viewer;
}
2025-01-14 18:02:25 +00:00
class OsgOpenGLWindow : public QOpenGLWindow {
2025-01-04 04:12:51 +00:00
Q_OBJECT
protected:
OSGRenderer* m_renderer {nullptr};
bool _osgWantsToRenderFrame{true};
OpenThreads::ReadWriteMutex _osgMutex;
bool _isFirstFrame {true};
friend class OSGRenderer;
2025-01-14 18:02:25 +00:00
2025-01-04 04:12:51 +00:00
public:
2025-01-14 18:02:25 +00:00
OsgOpenGLWindow(QWidget* parent = nullptr);
~OsgOpenGLWindow() override;
2025-01-04 04:12:51 +00:00
/** Get osgViewer View */
virtual osgViewer::Viewer* getOsgViewer();
//! get mutex
virtual OpenThreads::ReadWriteMutex* mutex();
2025-01-14 18:02:25 +00:00
QWidget* AsWidget()
2025-01-04 04:12:51 +00:00
{
2025-01-14 18:02:25 +00:00
return widget_;
2025-01-04 04:12:51 +00:00
}
signals:
void initialized();
protected:
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 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();
2025-01-14 18:02:25 +00:00
private:
QWidget* widget_{ nullptr };
osg::ref_ptr<class GraphicsWindowEx> gw_;
OSGRenderer* renderer_{ nullptr };
class QOpenGLShaderProgram* shaderProgram_{nullptr};
class QOpenGLVertexArrayObject* vao_{ nullptr };
2025-01-04 04:12:51 +00:00
};
#endif // OSGQOPENGLWINDOW_H