95 lines
2.0 KiB
C++
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
|