#include "viewer/OsgOpenGLWindow.h" #include "viewer/OSGRenderer.h" #include #include #include #include #include #include #include #include #include #include "viewer/GraphicsWindowEx.h" OsgOpenGLWindow::OsgOpenGLWindow(QWidget* parent) : QOpenGLWindow(QOpenGLWindow::NoPartialUpdate, nullptr) { widget_ = QWidget::createWindowContainer(this); renderer_ = new OSGRenderer(this); } OsgOpenGLWindow::~OsgOpenGLWindow() { } osgViewer::Viewer* OsgOpenGLWindow::getOsgViewer() { return m_renderer; } OpenThreads::ReadWriteMutex* OsgOpenGLWindow::mutex() { return &_osgMutex; } void OsgOpenGLWindow::initializeGL() { //// Initializes OpenGL function resolution for the current context. //initializeOpenGLFunctions(); //createRenderer(); //emit initialized(); context()->doneCurrent(); gw_->SetSharedContext(context()); QApplication::postEvent(this, new RenderBindGraphicsContextEvent(gw_)); double pixelRatio = screen()->devicePixelRatio(); gw_->UpdateWindowScale(pixelRatio); QApplication::postEvent(this, new GraphicsWindowResizeEvent(gw_, width() * pixelRatio, height() * pixelRatio)); } void OsgOpenGLWindow::resizeGL(int w, int h) { Q_ASSERT(m_renderer); double pixelRatio = screen()->devicePixelRatio(); gw_->UpdateWindowScale(pixelRatio); QApplication::postEvent(this, new GraphicsWindowResizeEvent(gw_, w * pixelRatio, h * pixelRatio)); } void OsgOpenGLWindow::paintGL() { OpenThreads::ScopedReadLock locker(_osgMutex); if (_isFirstFrame) { _isFirstFrame = false; m_renderer->getCamera()->getGraphicsContext()->setDefaultFboId(defaultFramebufferObject()); } m_renderer->frame(); } void OsgOpenGLWindow::keyPressEvent(QKeyEvent* event) { Q_ASSERT(gw_); // forward event to renderer gw_->keyPressEvent(event); } void OsgOpenGLWindow::keyReleaseEvent(QKeyEvent* event) { Q_ASSERT(gw_); // forward event to renderer gw_->keyReleaseEvent(event); } void OsgOpenGLWindow::mousePressEvent(QMouseEvent* event) { Q_ASSERT(gw_); // forward event to renderer gw_->mousePressEvent(event); } void OsgOpenGLWindow::mouseReleaseEvent(QMouseEvent* event) { Q_ASSERT(gw_); // forward event to renderer gw_->mouseReleaseEvent(event); } void OsgOpenGLWindow::mouseDoubleClickEvent(QMouseEvent* event) { Q_ASSERT(gw_); // forward event to renderer gw_->mouseDoubleClickEvent(event); } void OsgOpenGLWindow::mouseMoveEvent(QMouseEvent* event) { Q_ASSERT(gw_); // forward event to renderer gw_->mouseMoveEvent(event); } void OsgOpenGLWindow::wheelEvent(QWheelEvent* event) { Q_ASSERT(gw_); // forward event to renderer gw_->wheelEvent(event); } void OsgOpenGLWindow::setDefaultDisplaySettings() { osg::DisplaySettings* ds = osg::DisplaySettings::instance().get(); ds->setNvOptimusEnablement(1); ds->setStereo(false); } void OsgOpenGLWindow::createRenderer() { // call this before creating a View... setDefaultDisplaySettings(); /*m_renderer = new OSGRenderer(this); double pixelRatio = screen()->devicePixelRatio(); m_renderer->setupOSG(width(), height(), pixelRatio);*/ }