DYTSrouce/src/viewer/OsgOpenGLWindow.h
2025-01-16 00:13:05 +08:00

95 lines
2.0 KiB
C++

#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>
#include <osg/ref_ptr>
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<class GraphicsWindowEx> gw_;
OSGRenderer* renderer_{ nullptr };
class QOpenGLShaderProgram* shaderProgram_{nullptr};
class QOpenGLVertexArrayObject* vao_{ nullptr };
uint32_t shaderTextureId_{ 0 };
bool updateTexture_{ false };
};
#endif // OSGQOPENGLWINDOW_H