diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 23046735..c6c77bba 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -9,7 +9,7 @@ SET(CMAKE_CXX_STANDARD_REQUIRED ON)
SET(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets LinguistTools REQUIRED)
-find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets LinguistTools OpenGL REQUIRED)
+find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Gui Widgets LinguistTools OpenGL REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Widgets LinguistTools DataVisualization Charts Network REQUIRED)
message("qt VERSION " ${QT_VERSION_MAJOR})
@@ -146,6 +146,7 @@ target_link_libraries(
${PROJECT_NAME}
PRIVATE
Qt${QT_VERSION_MAJOR}::Core
+ Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Charts
Qt${QT_VERSION_MAJOR}::DataVisualization
diff --git a/src/main.cpp b/src/main.cpp
index 83b6e276..432197f0 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -6,10 +6,16 @@
#include "common/CrashHandler.h"
#include "ui/MainFrame.h"
+#include "viewer/OSGEnv.h"
int main(int argc, char* argv[]) {
SpdLogger logger("logs/log.txt", 5);
+ if (!OSGEnv::init()) {
+ LOG_ERROR("OSGEnv::init() failed!");
+ return 1;
+ }
+
Application::setAttribute(Qt::AA_EnableHighDpiScaling);
Application app(argc, argv);
@@ -24,6 +30,7 @@ int main(int argc, char* argv[]) {
mainWindow.showMaximized();
ret = app.exec();
+ OSGEnv::destroy();
return ret;
}
#else
diff --git a/src/translations/Dyt_zh_CN.ts b/src/translations/Dyt_zh_CN.ts
index ca96e8d9..84bbf962 100644
--- a/src/translations/Dyt_zh_CN.ts
+++ b/src/translations/Dyt_zh_CN.ts
@@ -479,153 +479,153 @@
-
+
model elements
-
+
attribte
-
+
Wave Curve
-
+
Speed Curve
-
+
3D Curve
-
-
+
+
Target number
-
-
+
+
Signal-to-noise ratio
-
-
+
+
Azimuth line of sight
-
-
+
+
Pitch gaze angle
-
-
+
+
azimuth
-
-
+
+
Pitch angle
-
-
+
+
attribute
-
-
+
+
Doppler
-
-
+
+
course
-
-
+
+
Speed
-
-
+
+
longitude
-
-
+
+
latitude
-
-
+
+
distance
-
-
+
+
velocity
-
-
+
+
Radial dimensions
-
-
+
+
Target RCS
-
+
Report Table
-
+
Report
-
+
Signal Indicator Lamp
-
+
ParamSetting
-
+
Matlab File
-
+
name: 5year 0412
diff --git a/src/ui/MainWindow.cpp b/src/ui/MainWindow.cpp
index c239e4da..f92c0a74 100644
--- a/src/ui/MainWindow.cpp
+++ b/src/ui/MainWindow.cpp
@@ -14,6 +14,7 @@
#include "DockWidget.h"
#include "viewer/ViewWidget.h"
+#include "viewer/OsgOpenGLWindow.h"
#include "viewer/OsgViewer.h"
#include "chartPlot/FitCurveDialog.h"
@@ -82,8 +83,9 @@ void MainWindow::InitUI() {
connect(modelBrowser_, &ModelBrowser::WorkSpaceChange, propertyBrowser_, &PropertyBrowser::OnWorkSpaceChange);
connect(modelBrowser_, &ModelBrowser::EntityChange, propertyBrowser_, &PropertyBrowser::OnEntityChange);
- qtOsgViewWidget_ = new ViewWidget;
- qtOsgViewWidget_->Initialize();
+ //qtOsgViewWidget_ = new ViewWidget;
+ qtOsgViewWidget_ = new OsgOpenGLWindow;
+ //qtOsgViewWidget_->Initialize();
m_mapDockWidget.insert("PropertyBrowser", attribte);
QString wavePath ="", speedPath = "", rdPath = "", matlabParam="";
@@ -209,7 +211,7 @@ void MainWindow::InitUI() {
InitDockLayout();
//ui->viewWidget->layout()->addWidget(qtOsgViewWidget_);
- qtOsgViewWidget_->LoadDefaultScene();
+ //qtOsgViewWidget_->LoadDefaultScene();
//OsgViewer::Get().Initialize();
//OsgViewer::Get().OnFrame();
@@ -235,7 +237,8 @@ void MainWindow::InitDockLayout() {
tabWidget_->insertTab(i, mainWindow_, strTabName);
if (listDocArea[0].toList().size() > 0) {
- mainWindow_->setCentralWidget(qtOsgViewWidget_);
+ //mainWindow_->setCentralWidget(qtOsgViewWidget_);
+ mainWindow_->setCentralWidget(qtOsgViewWidget_->AsWidget());
//OsgViewer::Get().Initialize();
//OsgViewer::Get().OnFrame();
} else {
diff --git a/src/ui/MainWindow.h b/src/ui/MainWindow.h
index c8f8d71e..4d7c9328 100644
--- a/src/ui/MainWindow.h
+++ b/src/ui/MainWindow.h
@@ -21,9 +21,9 @@ public:
class ModelBrowser* GetModelBrowser() const {
return modelBrowser_;
}
- class ViewWidget* GetViewWidget() const {
+ /*class ViewWidget* GetViewWidget() const {
return qtOsgViewWidget_;
- }
+ }*/
class FitCurveDialog* GetFitCurveDlg() const {
return fitCurveDlg_;
@@ -55,7 +55,8 @@ private:
class ModelBrowser* modelBrowser_{ nullptr };
class PropertyBrowser* propertyBrowser_{ nullptr };
class QWebEngineView* webEngineView_{ nullptr };
- class ViewWidget* qtOsgViewWidget_{ nullptr };
+ //class ViewWidget* qtOsgViewWidget_{ nullptr };
+ class OsgOpenGLWindow* qtOsgViewWidget_{ nullptr };
class FitCurveDialog* fitCurveDlg_{ nullptr };
class FitCurveDialog* fitYLgCurveDlg_{ nullptr };
diff --git a/src/viewer/GraphicsWindowEx.cpp b/src/viewer/GraphicsWindowEx.cpp
index 10a813cb..615c9fbc 100644
--- a/src/viewer/GraphicsWindowEx.cpp
+++ b/src/viewer/GraphicsWindowEx.cpp
@@ -2,6 +2,7 @@
#include
#include
+#include
#include
#include
#include
@@ -107,28 +108,13 @@ namespace {
GraphicsWindowEx::GraphicsWindowEx(int x, int y, int width, int height)
- : osgViewer::GraphicsWindowEmbedded(x, y, width, height)
- , offScreenSurface_(new QOffscreenSurface)
- , offScreenContext_(new QOpenGLContext)
-{
+ : osgViewer::GraphicsWindowEmbedded(x, y, width == 0 ? 1 : width, height == 0 ? 1 : height) {
LOG_INFO("actor, self={}", spdlog::fmt_lib::ptr(this));
}
GraphicsWindowEx::~GraphicsWindowEx() {
LOG_INFO("dctor isSharedContextSet_:{}, self={}", isSharedContextSet_, spdlog::fmt_lib::ptr(this));
- if (!isSharedContextSet_) {
- return;
- }
-
- if (isFrameBufferInitialized_) {
- offScreenContext_->makeCurrent(offScreenSurface_.get());
- renderFramebuffer_.reset();
- sharedFrameBuffer_.reset();
- offScreenContext_->doneCurrent();
- }
-
- offScreenContext_.reset();
- offScreenSurface_.reset();
+
}
bool GraphicsWindowEx::realizeImplementation() {
@@ -152,17 +138,39 @@ bool GraphicsWindowEx::realizeImplementation() {
bool GraphicsWindowEx::makeCurrentImplementation() {
LOG_INFO("makeCurrentImplementation, isRealized_:{}, self={}", isRealized_, spdlog::fmt_lib::ptr(this));
- dyt_check(nullptr != offScreenContext_);
- offScreenContext_->makeCurrent(offScreenSurface_.get());
+
+ InitOffScreenContext();
+ if (nullptr != offScreenContext_) {
+ offScreenContext_->makeCurrent(offScreenSurface_.get());
+ }
+
InitFrameBuffer();
setDefaultFboId(renderFramebuffer_->handle());
renderFramebuffer_->bind();
+
return true;
}
+void GraphicsWindowEx::closeImplementation() {
+ if (!isSharedContextSet_) {
+ return;
+ }
+
+ if (isFrameBufferInitialized_) {
+ offScreenContext_->makeCurrent(offScreenSurface_.get());
+ renderFramebuffer_.reset();
+ sharedFrameBuffer_.reset();
+ offScreenContext_->doneCurrent();
+ }
+
+ offScreenContext_.reset();
+ offScreenSurface_.reset();
+}
+
bool GraphicsWindowEx::releaseContextImplementation() {
LOG_INFO("releaseContextImplementation, self={}", spdlog::fmt_lib::ptr(this));
+ QOpenGLFramebufferObject::bindDefault();
offScreenContext_->doneCurrent();
return true;
}
@@ -178,25 +186,20 @@ void GraphicsWindowEx::swapBuffersImplementation() {
}
bool GraphicsWindowEx::SetSharedContext(QOpenGLContext* sharedContext) {
- LOG_INFO("Set shared context, {}", isSharedContextSet_);
- if (isSharedContextSet_) {
- return true;
- }
-
- offScreenContext_->setFormat(sharedContext->format());
- offScreenContext_->setShareContext(sharedContext);
-
- isSharedContextSet_ = offScreenContext_->create();
- if (!isSharedContextSet_) {
- LOG_ERROR("Failed to create offscreen context");
- return false;
- }
-
- offScreenSurface_->setFormat(offScreenContext_->format());
- offScreenSurface_->create();
+ sharedContext_ = sharedContext;
+
return true;
}
+void GraphicsWindowEx::ReizeWindow(int width, int height) {
+ if (width == _traits->width && height == _traits->height) {
+ return;
+ }
+ getEventQueue()->windowResize(0, 0, width, height);
+ resized(0, 0, width, height);
+ isFrameBufferInitialized_ = false;
+}
+
void GraphicsWindowEx::keyPressEvent(QKeyEvent* event) {
setKeyboardModifiers(getEventQueue(), event);
int value = s_QtKeyboardMap.remapKey(event);
@@ -321,6 +324,36 @@ void GraphicsWindowEx::wheelEvent(QWheelEvent* event) {
osgGA::GUIEventAdapter::SCROLL_RIGHT));
}
+void GraphicsWindowEx::InitOffScreenContext() {
+ if (isSharedContextSet_) {
+ return;
+ }
+
+ if (!offScreenSurface_) {
+ offScreenSurface_.reset(new QOffscreenSurface);
+ }
+ if (!offScreenContext_) {
+ offScreenContext_.reset(new QOpenGLContext);
+ }
+
+ LOG_INFO("Set shared context");
+
+ dyt_check(nullptr != sharedContext_);
+
+ offScreenContext_->setFormat(sharedContext_->format());
+ offScreenContext_->setShareContext(sharedContext_);
+
+ isSharedContextSet_ = offScreenContext_->create();
+ if (!isSharedContextSet_) {
+ LOG_ERROR("Failed to create offscreen context");
+ return;
+ }
+
+ offScreenSurface_->setFormat(offScreenContext_->format());
+ offScreenSurface_->create();
+
+}
+
void GraphicsWindowEx::InitFrameBuffer() {
if (isFrameBufferInitialized_) {
return;
@@ -335,4 +368,3 @@ void GraphicsWindowEx::InitFrameBuffer() {
isFrameBufferInitialized_ = true;
}
-
diff --git a/src/viewer/GraphicsWindowEx.h b/src/viewer/GraphicsWindowEx.h
index 2cb4d5d7..832a460b 100644
--- a/src/viewer/GraphicsWindowEx.h
+++ b/src/viewer/GraphicsWindowEx.h
@@ -1,6 +1,7 @@
#ifndef GRAPHICSWINDOWEX_H
#define GRAPHICSWINDOWEX_H
+#include
#include
#include
@@ -38,7 +39,7 @@ public:
}
bool realizeImplementation() override;
bool makeCurrentImplementation() override;
- void closeImplementation() override {}
+ void closeImplementation() override;
bool releaseContextImplementation() override;
void swapBuffersImplementation() override;
@@ -46,10 +47,13 @@ public:
void UpdateWindowScale(float scale) {
windowScale_ = scale;
}
- unsigned int GetFrameBufferId() const {
+ unsigned int GetFrameBufferId() {
+ isRenderDonwn_ = true;
return frameBufferId_;
}
+ void ReizeWindow(int width, int height);
+
public:
void keyPressEvent(class QKeyEvent* event);
void keyReleaseEvent(class QKeyEvent* event);
@@ -60,6 +64,7 @@ public:
void wheelEvent(class QWheelEvent* event);
protected:
+ void InitOffScreenContext();
void InitFrameBuffer();
private:
@@ -68,6 +73,8 @@ private:
std::unique_ptr renderFramebuffer_{ nullptr };
std::unique_ptr sharedFrameBuffer_{ nullptr };
+ QOpenGLContext* sharedContext_{ nullptr };
+
bool isSharedContextSet_{ false };
bool isRealized_{ false };
bool isFrameBufferInitialized_{ false };
diff --git a/src/viewer/OSGEnv.cpp b/src/viewer/OSGEnv.cpp
new file mode 100644
index 00000000..1ffc8532
--- /dev/null
+++ b/src/viewer/OSGEnv.cpp
@@ -0,0 +1,56 @@
+#include "viewer/OSGEnv.h"
+
+#include
+
+#include
+#include
+#include
+
+
+
+bool s_gBChecked = false;
+
+bool OSGEnv::init() {
+ osgEarth::initialize();
+ const osgEarth::Capabilities& csCapabilities = osgEarth::Registry::instance()->getCapabilities();
+ s_gBChecked = csCapabilities.supportsGLSL();
+ if (!s_gBChecked) {
+ return(s_gBChecked);
+ }
+
+ int nMax, nMin;
+ sscanf(csCapabilities.getVersion().data(), "%d.%d", &nMax, &nMin);
+ QSurfaceFormat format = QSurfaceFormat::defaultFormat();
+ osg::GraphicsContext::Traits traits(osg::DisplaySettings::instance().get());
+
+ int nHttpThreads = osg::DisplaySettings::instance()->getNumOfDatabaseThreadsHint();
+ nHttpThreads = nHttpThreads < 1 ? 1 : nHttpThreads;
+ osg::DisplaySettings::instance()->setNumOfHttpDatabaseThreadsHint(nHttpThreads);
+ format.setAlphaBufferSize(traits.alpha);
+ format.setRedBufferSize(traits.red);
+ format.setGreenBufferSize(traits.green);
+ format.setBlueBufferSize(traits.blue);
+ format.setDepthBufferSize(traits.depth);
+ format.setStencilBufferSize(traits.stencil);
+ format.setSamples(traits.samples);
+ format.setVersion(nMax, nMin);
+
+ /// 判断是否支持核心模式
+ if (csCapabilities.isCoreProfile()) {
+ format.setProfile(QSurfaceFormat::CoreProfile);
+ } else {
+ format.setProfile(QSurfaceFormat::CompatibilityProfile);
+ }
+
+ format.setSwapInterval(traits.vsync ? 1 : 0);
+ format.setStereo(traits.quadBufferStereo ? 1 : 0);
+
+ QSurfaceFormat::setDefaultFormat(format);
+ osgDB::Registry::instance()->getObjectWrapperManager()->findWrapper("osg::Image");
+
+ return true;
+}
+
+void OSGEnv::destroy() {
+
+}
diff --git a/src/viewer/OSGEnv.h b/src/viewer/OSGEnv.h
new file mode 100644
index 00000000..799e8b51
--- /dev/null
+++ b/src/viewer/OSGEnv.h
@@ -0,0 +1,7 @@
+#pragma once
+
+class OSGEnv {
+public:
+ static bool init();
+ static void destroy();
+};
diff --git a/src/viewer/OSGRenderer.cpp b/src/viewer/OSGRenderer.cpp
index f457c6f2..bcf8fa2b 100644
--- a/src/viewer/OSGRenderer.cpp
+++ b/src/viewer/OSGRenderer.cpp
@@ -59,23 +59,20 @@ void OSGRenderer::Init(osg::GraphicsContext* gc) {
getCamera()->setGraphicsContext(gc);
getCamera()->setViewport(new osg::Viewport(0, 0, gc->getTraits()->width, gc->getTraits()->height));
+ getCamera()->setDrawBuffer(GL_BACK);
+ getCamera()->setReadBuffer(GL_BACK);
+ getCamera()->setProjectionMatrixAsPerspective(45, 1.0, 0.01, 100.);
isInited_ = true;
}
-void OSGRenderer::Resize(osg::GraphicsContext* gc, int width, int height) {
+void OSGRenderer::Resize(GraphicsWindowEx* gc, int width, int height) {
LOG_INFO("OSGRenderer::Resize {}, gc:{}", isInited_, spdlog::fmt_lib::ptr(gc));
- if (!gc) {
+ dyt_check(nullptr != gc);
+ if (!isInited_) {
return;
}
- if (isInited_) {
- return;
- }
-
- osgViewer::GraphicsWindow* window = dynamic_cast(gc);
- dyt_check(nullptr != window);
- window->getEventQueue()->windowResize(0, 0, width, height);
- window->resized(0, 0, width, height);
+ gc->ReizeWindow(width, height);
}
void OSGRenderer::Render() {
diff --git a/src/viewer/OSGRenderer.h b/src/viewer/OSGRenderer.h
index fcc4cb9e..534d4b86 100644
--- a/src/viewer/OSGRenderer.h
+++ b/src/viewer/OSGRenderer.h
@@ -22,6 +22,8 @@
#include
+#include "GraphicsWindowEx.h"
+
namespace {
enum RenderEvent {
INIT = QEvent::Type(QEvent::User + 1),
@@ -39,13 +41,13 @@ namespace {
};
struct GraphicsWindowResizeEvent : public QEvent {
- GraphicsWindowResizeEvent(osg::GraphicsContext* gc, int width, int height)
+ GraphicsWindowResizeEvent(GraphicsWindowEx* gc, int width, int height)
: QEvent(QEvent::Type(RESIZE))
, gc_(gc)
, width_(width)
, height_(height) {}
- osg::observer_ptr gc_;
+ osg::observer_ptr gc_;
int width_;
int height_;
};
@@ -67,7 +69,7 @@ Q_SIGNALS:
private:
void Init(osg::GraphicsContext* gc);
- void Resize(osg::GraphicsContext* gc, int width, int height);
+ void Resize(GraphicsWindowEx* gc, int width, int height);
void Render();
void Destoy();
diff --git a/src/viewer/OsgOpenGLWindow.cpp b/src/viewer/OsgOpenGLWindow.cpp
index 1731290b..0fe0a360 100644
--- a/src/viewer/OsgOpenGLWindow.cpp
+++ b/src/viewer/OsgOpenGLWindow.cpp
@@ -47,38 +47,33 @@ static const char* fragmentShaderSource =
OsgOpenGLWindow::OsgOpenGLWindow(QWidget* parent)
- : QOpenGLWindow(QOpenGLWindow::NoPartialUpdate, nullptr)
-{
+ : QOpenGLWindow(QOpenGLWindow::NoPartialUpdate, nullptr) {
widget_ = QWidget::createWindowContainer(this);
+ gw_ = new GraphicsWindowEx(0, 0, width(), height());
renderer_ = new OSGRenderer(this);
- connect(renderer_, &OSGRenderer::RenderFlush, this, &OsgOpenGLWindow::OnRenderFlush);
+ connect(renderer_, &OSGRenderer::RenderFlush, this, &OsgOpenGLWindow::OnRenderFlush, Qt::QueuedConnection);
+ connect(&timer_, &QTimer::timeout, this, &OsgOpenGLWindow::OnRender);
}
-OsgOpenGLWindow::~OsgOpenGLWindow()
-{
+OsgOpenGLWindow::~OsgOpenGLWindow() {}
+
+osgViewer::Viewer* OsgOpenGLWindow::getOsgViewer() {
+ return renderer_;
}
-osgViewer::Viewer* OsgOpenGLWindow::getOsgViewer()
-{
- return m_renderer;
-}
-
-OpenThreads::ReadWriteMutex* OsgOpenGLWindow::mutex()
-{
- return &_osgMutex;
-}
-
-
-void OsgOpenGLWindow::initializeGL()
-{
+void OsgOpenGLWindow::initializeGL() {
//// Initializes OpenGL function resolution for the current context.
//initializeOpenGLFunctions();
//createRenderer();
//emit initialized();
- context()->doneCurrent();
+ QOpenGLContext* ctx = context();
+ dyt_check(nullptr != ctx);
+ ctx->doneCurrent();
gw_->SetSharedContext(context());
QApplication::postEvent(renderer_, new RenderBindGraphicsContextEvent(gw_));
+ setDefaultDisplaySettings();
+
double pixelRatio = screen()->devicePixelRatio();
gw_->UpdateWindowScale(pixelRatio);
QApplication::postEvent(renderer_, new GraphicsWindowResizeEvent(gw_, width() * pixelRatio, height() * pixelRatio));
@@ -90,28 +85,28 @@ void OsgOpenGLWindow::initializeGL()
shaderProgram_ = new QOpenGLShaderProgram(this);
vao_ = new QOpenGLVertexArrayObject(this);
if (!vao_->create()) {
- LOG_ERROR( "Failed to create VAO");
+ LOG_ERROR("Failed to create VAO");
return;
}
if (!shaderProgram_->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource)) {
- LOG_ERROR( "Failed to add vertex shader");
+ LOG_ERROR("Failed to add vertex shader");
return;
}
if (!shaderProgram_->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource)) {
- LOG_ERROR( "Failed to add fragment shader");
+ LOG_ERROR("Failed to add fragment shader");
return;
}
if (!shaderProgram_->link()) {
- LOG_ERROR( "Failed to link shader program, {}", shaderProgram_->log().toLocal8Bit().constData());
+ LOG_ERROR("Failed to link shader program, {}", shaderProgram_->log().toLocal8Bit().constData());
return;
}
+
+ timer_.start(1000 / 60);
}
-void OsgOpenGLWindow::resizeGL(int w, int h)
-{
- Q_ASSERT(m_renderer);
+void OsgOpenGLWindow::resizeGL(int w, int h) {
double pixelRatio = screen()->devicePixelRatio();
gw_->UpdateWindowScale(pixelRatio);
QApplication::postEvent(renderer_, new GraphicsWindowResizeEvent(gw_, w * pixelRatio, h * pixelRatio));
@@ -137,73 +132,59 @@ void OsgOpenGLWindow::paintUnderGL() {
}
}
-void OsgOpenGLWindow::keyPressEvent(QKeyEvent* event)
-{
+void OsgOpenGLWindow::keyPressEvent(QKeyEvent* event) {
Q_ASSERT(gw_);
// forward event to renderer
gw_->keyPressEvent(event);
}
-void OsgOpenGLWindow::keyReleaseEvent(QKeyEvent* event)
-{
+void OsgOpenGLWindow::keyReleaseEvent(QKeyEvent* event) {
Q_ASSERT(gw_);
// forward event to renderer
gw_->keyReleaseEvent(event);
}
-void OsgOpenGLWindow::mousePressEvent(QMouseEvent* event)
-{
+void OsgOpenGLWindow::mousePressEvent(QMouseEvent* event) {
Q_ASSERT(gw_);
// forward event to renderer
gw_->mousePressEvent(event);
}
-void OsgOpenGLWindow::mouseReleaseEvent(QMouseEvent* event)
-{
+void OsgOpenGLWindow::mouseReleaseEvent(QMouseEvent* event) {
Q_ASSERT(gw_);
// forward event to renderer
gw_->mouseReleaseEvent(event);
}
-void OsgOpenGLWindow::mouseDoubleClickEvent(QMouseEvent* event)
-{
+void OsgOpenGLWindow::mouseDoubleClickEvent(QMouseEvent* event) {
Q_ASSERT(gw_);
// forward event to renderer
gw_->mouseDoubleClickEvent(event);
}
-void OsgOpenGLWindow::mouseMoveEvent(QMouseEvent* event)
-{
+void OsgOpenGLWindow::mouseMoveEvent(QMouseEvent* event) {
Q_ASSERT(gw_);
// forward event to renderer
gw_->mouseMoveEvent(event);
}
-void OsgOpenGLWindow::wheelEvent(QWheelEvent* event)
-{
+void OsgOpenGLWindow::wheelEvent(QWheelEvent* event) {
Q_ASSERT(gw_);
// forward event to renderer
gw_->wheelEvent(event);
}
-void OsgOpenGLWindow::setDefaultDisplaySettings()
-{
+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);*/
-}
-
void OsgOpenGLWindow::OnRenderFlush() {
shaderTextureId_ = gw_->GetFrameBufferId();
updateTexture_ = true;
}
+
+void OsgOpenGLWindow::OnRender() {
+ requestUpdate();
+}
diff --git a/src/viewer/OsgOpenGLWindow.h b/src/viewer/OsgOpenGLWindow.h
index d4dac79e..8ecc0005 100644
--- a/src/viewer/OsgOpenGLWindow.h
+++ b/src/viewer/OsgOpenGLWindow.h
@@ -17,7 +17,7 @@
#include
#include
-#include
+#include
#include
@@ -32,15 +32,6 @@ namespace osgViewer
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;
@@ -48,8 +39,6 @@ public:
/** Get osgViewer View */
virtual osgViewer::Viewer* getOsgViewer();
- //! get mutex
- virtual OpenThreads::ReadWriteMutex* mutex();
QWidget* AsWidget()
{
@@ -65,8 +54,7 @@ protected:
void resizeGL(int w, int h) override;
void paintUnderGL() override;
- //! called before creating renderer
- virtual void setDefaultDisplaySettings();
+ void setDefaultDisplaySettings();
void keyPressEvent(QKeyEvent* event) override;
void keyReleaseEvent(QKeyEvent* event) override;
@@ -76,10 +64,9 @@ protected:
void mouseMoveEvent(QMouseEvent* event) override;
void wheelEvent(QWheelEvent* event) override;
- void createRenderer();
-
private:
void OnRenderFlush();
+ void OnRender();
private:
QWidget* widget_{ nullptr };
@@ -89,6 +76,7 @@ private:
class QOpenGLVertexArrayObject* vao_{ nullptr };
uint32_t shaderTextureId_{ 0 };
bool updateTexture_{ false };
+ QTimer timer_;
};
#endif // OSGQOPENGLWINDOW_H
diff --git a/src/viewer/OsgViewWidget.h b/src/viewer/OsgViewWidget.h
index 8bd13d06..afa4fbcf 100644
--- a/src/viewer/OsgViewWidget.h
+++ b/src/viewer/OsgViewWidget.h
@@ -4,7 +4,6 @@
#include
#include "scene/OEScene.h"
-#include "viewer/OsgViewWidget.h"
#include "viewer/GraphicsWindowEx.h"