diff options
author | Antti Kokko <antti.kokko@qt.io> | 2020-04-16 09:45:05 +0300 |
---|---|---|
committer | Antti Kokko <antti.kokko@qt.io> | 2020-04-16 09:45:42 +0300 |
commit | 4cebb63cc080f53e2e52da68920b4f9bc95e609d (patch) | |
tree | 246b3bfcd578a7f4a0e27f2df0f137c49a499bd5 | |
parent | f07a25c618432e08a145d714781b52c534a694da (diff) | |
parent | 02e4d56d055d73340d3af1257b908a52aecc320f (diff) |
Merge branch 'master' into 2.7
Change-Id: Ie113ad83148ae735a691614e5f771a3c5cc0bc9c
-rw-r--r-- | src/api/studio3d/q3dscommandqueue.cpp | 5 | ||||
-rw-r--r-- | src/api/studio3d/q3dscommandqueue_p.h | 2 | ||||
-rw-r--r-- | src/api/studio3d/q3dsviewersettings.cpp | 55 | ||||
-rw-r--r-- | src/api/studio3d/q3dsviewersettings.h | 4 | ||||
-rw-r--r-- | src/api/studio3d/q3dsviewersettings_p.h | 2 | ||||
-rw-r--r-- | src/api/studio3dqml/q3dsplugin.cpp | 1 | ||||
-rw-r--r-- | src/api/studio3dqml/q3dsrenderer.cpp | 2 | ||||
-rw-r--r-- | src/engine/Qt3DSRenderRuntimeBindingImplRenderer.cpp | 14 | ||||
-rw-r--r-- | src/engine/Qt3DSRuntimeView.h | 2 | ||||
-rw-r--r-- | src/runtime/Qt3DSApplication.cpp | 19 | ||||
-rw-r--r-- | src/runtimerender/Qt3DSRenderContextCore.cpp | 59 | ||||
-rw-r--r-- | src/runtimerender/Qt3DSRenderContextCore.h | 2 | ||||
-rw-r--r-- | src/viewer/Qt3DSViewerApp.cpp | 14 | ||||
-rw-r--r-- | src/viewer/Qt3DSViewerApp.h | 3 | ||||
-rw-r--r-- | tools/viewer/main.cpp | 5 | ||||
-rw-r--r-- | tools/viewer/qml/main.qml | 15 |
16 files changed, 192 insertions, 12 deletions
diff --git a/src/api/studio3d/q3dscommandqueue.cpp b/src/api/studio3d/q3dscommandqueue.cpp index b2d0937..300c0bf 100644 --- a/src/api/studio3d/q3dscommandqueue.cpp +++ b/src/api/studio3d/q3dscommandqueue.cpp @@ -217,6 +217,8 @@ void CommandQueue::copyCommands(CommandQueue &fromQueue) m_stereoModeChanged = m_stereoModeChanged || fromQueue.m_stereoModeChanged; m_stereoEyeSeparationChanged = m_stereoEyeSeparationChanged || fromQueue.m_stereoEyeSeparationChanged; + m_stereoProgressiveEnabledChanged + = m_stereoProgressiveEnabledChanged || fromQueue.m_stereoProgressiveEnabledChanged; m_shadeModeChanged = m_shadeModeChanged || fromQueue.m_shadeModeChanged; m_showRenderStatsChanged = m_showRenderStatsChanged || fromQueue.m_showRenderStatsChanged; m_matteColorChanged = m_matteColorChanged || fromQueue.m_matteColorChanged; @@ -236,6 +238,8 @@ void CommandQueue::copyCommands(CommandQueue &fromQueue) m_stereoMode = fromQueue.m_stereoMode; if (fromQueue.m_stereoEyeSeparationChanged) m_stereoEyeSeparation = fromQueue.m_stereoEyeSeparation; + if (fromQueue.m_stereoProgressiveEnabledChanged) + m_stereoProgressiveEnabled = fromQueue.m_stereoProgressiveEnabled; if (fromQueue.m_shadeModeChanged) m_shadeMode = fromQueue.m_shadeMode; if (fromQueue.m_showRenderStatsChanged) @@ -338,6 +342,7 @@ void CommandQueue::clear(bool deleteCommandData) m_scaleModeChanged = false; m_stereoModeChanged = false; m_stereoEyeSeparationChanged = false; + m_stereoProgressiveEnabledChanged = false; m_shadeModeChanged = false; m_showRenderStatsChanged = false; m_matteColorChanged = false; diff --git a/src/api/studio3d/q3dscommandqueue_p.h b/src/api/studio3d/q3dscommandqueue_p.h index 0b7b833..6096439 100644 --- a/src/api/studio3d/q3dscommandqueue_p.h +++ b/src/api/studio3d/q3dscommandqueue_p.h @@ -143,6 +143,7 @@ public: bool m_scaleModeChanged = false; bool m_stereoModeChanged = false; bool m_stereoEyeSeparationChanged = false; + bool m_stereoProgressiveEnabledChanged = false; bool m_shadeModeChanged = false; bool m_showRenderStatsChanged = false; bool m_matteColorChanged = false; @@ -157,6 +158,7 @@ public: Q3DSViewerSettings::ScaleMode m_scaleMode = Q3DSViewerSettings::ScaleModeCenter; Q3DSViewerSettings::StereoMode m_stereoMode = Q3DSViewerSettings::StereoModeMono; double m_stereoEyeSeparation = 0.4; + bool m_stereoProgressiveEnabled = false; Q3DSViewerSettings::ShadeMode m_shadeMode = Q3DSViewerSettings::ShadeModeShaded; bool m_showRenderStats = false; QColor m_matteColor = QColor(Qt::black); diff --git a/src/api/studio3d/q3dsviewersettings.cpp b/src/api/studio3d/q3dsviewersettings.cpp index dd8e4b2..9025bb8 100644 --- a/src/api/studio3d/q3dsviewersettings.cpp +++ b/src/api/studio3d/q3dsviewersettings.cpp @@ -332,6 +332,45 @@ void Q3DSViewerSettings::setStereoEyeSeparation(double separation) } /*! + \qmlproperty bool ViewerSettings::stereoProgressiveEnabled + + \since QtStudio3D.OpenGL 2.7 + + Enables progressive rendering in stereoscopic modes. In this mode, + only single eye per frame is rendered. Left eye for odd frames and + right for even frames. This halves the maximum animation frame rate + (meaning e.g. 30fps on 60Hz screen) while decreasing CPU/GPU usage. + + \note This property has only effect when stereo mode is set to + \c{StereoModeTopBottom} or \c{StereoModeLeftRight}. + */ +/*! + \property Q3DSViewerSettings::stereoProgressiveEnabled + + \since Qt 3D Studio 2.7 + + Enables progressive rendering in stereoscopic modes. In this mode, + only single eye per frame is rendered. Left eye for odd frames and + right for even frames. This halves the maximum animation frame rate + (meaning e.g. 30fps on 60Hz screen) while decreasing CPU/GPU usage. + + \note This property has only effect when stereo mode is set to + \c{StereoModeTopBottom} or \c{StereoModeLeftRight}. + */ +bool Q3DSViewerSettings::stereoProgressiveEnabled() const +{ + return d_ptr->m_stereoProgressiveEnabled; +} + +void Q3DSViewerSettings::setStereoProgressiveEnabled(bool enabled) +{ + if (d_ptr->m_stereoProgressiveEnabled != enabled) { + d_ptr->setStereoProgressiveEnabled(enabled); + Q_EMIT stereoProgressiveEnabledChanged(enabled); + } +} + +/*! \qmlproperty bool ViewerSettings::matteEnabled Specifies if the empty area around the presentation (applicable when @@ -410,6 +449,7 @@ Q3DSViewerSettingsPrivate::Q3DSViewerSettingsPrivate(Q3DSViewerSettings *q) , m_scaleMode(Q3DSViewerSettings::ScaleModeCenter) , m_stereoMode(Q3DSViewerSettings::StereoModeMono) , m_stereoEyeSeparation(0.4) + , m_stereoProgressiveEnabled(false) , m_savedSettings(nullptr) { } @@ -429,6 +469,7 @@ void Q3DSViewerSettingsPrivate::setViewerApp(Q3DSViewer::Q3DSViewerApp *app) setScaleMode(m_scaleMode); setStereoMode(m_stereoMode); setStereoEyeSeparation(m_stereoEyeSeparation); + setStereoProgressiveEnabled(m_stereoProgressiveEnabled); } } @@ -443,6 +484,7 @@ void Q3DSViewerSettingsPrivate::setCommandQueue(CommandQueue *queue) setScaleMode(m_scaleMode); setStereoMode(m_stereoMode); setStereoEyeSeparation(m_stereoEyeSeparation); + setStereoProgressiveEnabled(m_stereoProgressiveEnabled); } } @@ -475,6 +517,8 @@ void Q3DSViewerSettingsPrivate::load(const QString &group, const QString &organi m_savedSettings->value(QStringLiteral("stereoMode")).toInt())); q_ptr->setStereoEyeSeparation( m_savedSettings->value(QStringLiteral("stereoEyeSeparation")).toDouble()); + q_ptr->setStereoProgressiveEnabled( + m_savedSettings->value(QStringLiteral("stereoProgressiveEnabled")).toBool()); q_ptr->setMatteEnabled(m_savedSettings->value(QStringLiteral("matteEnabled")).toBool()); } @@ -572,6 +616,17 @@ void Q3DSViewerSettingsPrivate::setStereoEyeSeparation(double separation) } } +void Q3DSViewerSettingsPrivate::setStereoProgressiveEnabled(bool enabled) +{ + m_stereoProgressiveEnabled = enabled; + if (m_viewerApp) { + m_viewerApp->SetStereoProgressiveEnabled(enabled); + } else if (m_commandQueue) { + m_commandQueue->m_stereoProgressiveEnabled = enabled; + m_commandQueue->m_stereoProgressiveEnabledChanged = true; + } +} + void Q3DSViewerSettingsPrivate::initSettingsStore(const QString &group, const QString &organization, const QString &application) { diff --git a/src/api/studio3d/q3dsviewersettings.h b/src/api/studio3d/q3dsviewersettings.h index 0a5e699..f956649 100644 --- a/src/api/studio3d/q3dsviewersettings.h +++ b/src/api/studio3d/q3dsviewersettings.h @@ -52,6 +52,7 @@ class Q_STUDIO3D_EXPORT Q3DSViewerSettings : public QObject Q_PROPERTY(ScaleMode scaleMode READ scaleMode WRITE setScaleMode NOTIFY scaleModeChanged) Q_PROPERTY(StereoMode stereoMode READ stereoMode WRITE setStereoMode NOTIFY stereoModeChanged REVISION 1) Q_PROPERTY(double stereoEyeSeparation READ stereoEyeSeparation WRITE setStereoEyeSeparation NOTIFY stereoEyeSeparationChanged REVISION 1) + Q_PROPERTY(bool stereoProgressiveEnabled READ stereoProgressiveEnabled WRITE setStereoProgressiveEnabled NOTIFY stereoProgressiveEnabledChanged REVISION 2) public: enum ShadeMode { @@ -82,6 +83,7 @@ public: ScaleMode scaleMode() const; StereoMode stereoMode() const; double stereoEyeSeparation() const; + Q_REVISION(2) bool stereoProgressiveEnabled() const; Q_INVOKABLE void save(const QString &group, const QString &organization = QString(), const QString &application = QString()); @@ -95,6 +97,7 @@ public Q_SLOTS: void setScaleMode(ScaleMode mode); void setStereoMode(StereoMode mode); void setStereoEyeSeparation(double separation); + Q_REVISION(2) void setStereoProgressiveEnabled(bool enabled); Q_SIGNALS: void matteEnabledChanged(bool enabled); @@ -104,6 +107,7 @@ Q_SIGNALS: void scaleModeChanged(ScaleMode mode); void stereoModeChanged(StereoMode mode); void stereoEyeSeparationChanged(double separation); + Q_REVISION(2) void stereoProgressiveEnabledChanged(bool enabled); private: Q_DISABLE_COPY(Q3DSViewerSettings) diff --git a/src/api/studio3d/q3dsviewersettings_p.h b/src/api/studio3d/q3dsviewersettings_p.h index 8ff9394..44e1227 100644 --- a/src/api/studio3d/q3dsviewersettings_p.h +++ b/src/api/studio3d/q3dsviewersettings_p.h @@ -69,6 +69,7 @@ public: void setScaleMode(Q3DSViewerSettings::ScaleMode mode); void setStereoMode(Q3DSViewerSettings::StereoMode mode); void setStereoEyeSeparation(double separation); + void setStereoProgressiveEnabled(bool enabled); public: Q3DSViewerSettings *q_ptr; @@ -86,6 +87,7 @@ private: Q3DSViewerSettings::ScaleMode m_scaleMode; Q3DSViewerSettings::StereoMode m_stereoMode; double m_stereoEyeSeparation; + bool m_stereoProgressiveEnabled; QSettings *m_savedSettings; }; diff --git a/src/api/studio3dqml/q3dsplugin.cpp b/src/api/studio3dqml/q3dsplugin.cpp index ee9a9b9..6ce3628 100644 --- a/src/api/studio3dqml/q3dsplugin.cpp +++ b/src/api/studio3dqml/q3dsplugin.cpp @@ -67,6 +67,7 @@ void Q3DSPlugin::registerTypes(const char *uri) // 2.7 qmlRegisterType<Q3DSPresentationItem, 2>(uri, 2, 7, "Presentation"); + qmlRegisterType<Q3DSViewerSettings, 2>(uri, 2, 7, "ViewerSettings"); qmlRegisterRevision<Q3DSPresentation, 2>(uri, 2, 7); // Automatically register the latest version diff --git a/src/api/studio3dqml/q3dsrenderer.cpp b/src/api/studio3dqml/q3dsrenderer.cpp index 1f78bf7..f7bd25b 100644 --- a/src/api/studio3dqml/q3dsrenderer.cpp +++ b/src/api/studio3dqml/q3dsrenderer.cpp @@ -351,6 +351,8 @@ void Q3DSRenderer::processCommands() m_settings->setStereoMode(m_commands.m_stereoMode); if (m_commands.m_stereoEyeSeparationChanged) m_settings->setStereoEyeSeparation(m_commands.m_stereoEyeSeparation); + if (m_commands.m_stereoProgressiveEnabledChanged) + m_settings->setStereoProgressiveEnabled(m_commands.m_stereoProgressiveEnabled); if (m_commands.m_shadeModeChanged) m_settings->setShadeMode(m_commands.m_shadeMode); if (m_commands.m_matteColorChanged) diff --git a/src/engine/Qt3DSRenderRuntimeBindingImplRenderer.cpp b/src/engine/Qt3DSRenderRuntimeBindingImplRenderer.cpp index 47ed8aa..9fda560 100644 --- a/src/engine/Qt3DSRenderRuntimeBindingImplRenderer.cpp +++ b/src/engine/Qt3DSRenderRuntimeBindingImplRenderer.cpp @@ -157,6 +157,20 @@ struct SRenderer : public Q3DStudio::ITegraApplicationRenderEngine return 0; } + void SetStereoProgressiveEnabled(bool enabled) override + { + if (m_BindingCore && m_BindingCore->m_Context) + m_BindingCore->m_Context->SetStereoProgressiveEnabled(enabled); + } + bool GetStereoProgressiveEnabled() const override + { + if (m_BindingCore && m_BindingCore->m_Context) { + return const_cast<SRenderer &>(*this).m_BindingCore-> + m_Context->GetStereoProgressiveEnabled(); + } + QT3DS_ASSERT(false); + return false; + } void SetShadeMode(Q3DStudio::TegraRenderShadeModes::Enum inShade) override { diff --git a/src/engine/Qt3DSRuntimeView.h b/src/engine/Qt3DSRuntimeView.h index 822efdc..8690b99 100644 --- a/src/engine/Qt3DSRuntimeView.h +++ b/src/engine/Qt3DSRuntimeView.h @@ -147,6 +147,8 @@ public: virtual TegraRenderStereoModes::Enum GetStereoMode() const = 0; virtual void SetStereoEyeSeparation(double separation) = 0; virtual double GetStereoEyeSeparation() const = 0; + virtual void SetStereoProgressiveEnabled(bool enabled) = 0; + virtual bool GetStereoProgressiveEnabled() const = 0; // TODO: To be removed, not used anywhere anymore void CycleScaleMode() diff --git a/src/runtime/Qt3DSApplication.cpp b/src/runtime/Qt3DSApplication.cpp index 1abc903..f7f8b46 100644 --- a/src/runtime/Qt3DSApplication.cpp +++ b/src/runtime/Qt3DSApplication.cpp @@ -638,6 +638,7 @@ struct SApp : public IApplication bool m_DisableState; bool m_ProfileLogging; bool m_LastRenderWasDirty; + bool m_ProgressiveLeftFrame; QT3DSU64 m_LastFrameStartTime; QT3DSU64 m_ThisFrameStartTime; double m_MillisecondsSinceLastFrame; @@ -688,6 +689,7 @@ struct SApp : public IApplication , m_DisableState(true) , m_ProfileLogging(false) , m_LastRenderWasDirty(true) + , m_ProgressiveLeftFrame(true) , m_LastFrameStartTime(0) , m_ThisFrameStartTime(0) , m_MillisecondsSinceLastFrame(0) @@ -1098,12 +1100,17 @@ struct SApp : public IApplication .RenderPresentation(pres, m_initialFrame); } else { // In stereoscopic mode, render 2 times for left & right eye - rc.SetStereoView(StereoViews::Left); - m_LastRenderWasDirty = m_RuntimeFactory->GetSceneManager() - .RenderPresentation(pres, m_initialFrame); - rc.SetStereoView(StereoViews::Right); - m_RuntimeFactory->GetSceneManager() - .RenderPresentation(pres, m_initialFrame); + if (!rc.GetStereoProgressiveEnabled() || m_ProgressiveLeftFrame) { + rc.SetStereoView(StereoViews::Left); + m_LastRenderWasDirty = m_RuntimeFactory->GetSceneManager() + .RenderPresentation(pres, m_initialFrame); + } + if (!rc.GetStereoProgressiveEnabled() || !m_ProgressiveLeftFrame) { + rc.SetStereoView(StereoViews::Right); + m_RuntimeFactory->GetSceneManager() + .RenderPresentation(pres, m_initialFrame); + } + m_ProgressiveLeftFrame = !m_ProgressiveLeftFrame; } m_initialFrame = false; diff --git a/src/runtimerender/Qt3DSRenderContextCore.cpp b/src/runtimerender/Qt3DSRenderContextCore.cpp index 484a805..dde70fd 100644 --- a/src/runtimerender/Qt3DSRenderContextCore.cpp +++ b/src/runtimerender/Qt3DSRenderContextCore.cpp @@ -248,6 +248,7 @@ struct SRenderContext : public IQt3DSRenderContext StereoModes::Enum m_StereoMode; StereoViews::Enum m_StereoView; double m_StereoEyeSeparation; + bool m_StereoProgressiveEnabled; bool m_WireframeMode; bool m_subPresentationRenderInLayer; Option<QT3DSVec4> m_SceneColor; @@ -289,6 +290,7 @@ struct SRenderContext : public IQt3DSRenderContext , m_StereoMode(StereoModes::Mono) , m_StereoView(StereoViews::Mono) , m_StereoEyeSeparation(0.4) + , m_StereoProgressiveEnabled(false) , m_WireframeMode(false) , m_subPresentationRenderInLayer(false) , m_matteEnabled(false) @@ -474,6 +476,16 @@ struct SRenderContext : public IQt3DSRenderContext double GetStereoEyeSeparation() const override { return m_StereoEyeSeparation; } + void SetStereoProgressiveEnabled(bool enabled) override + { + m_StereoProgressiveEnabled = enabled; + } + + bool GetStereoProgressiveEnabled() const override { + return m_StereoProgressiveEnabled && (m_StereoMode == StereoModes::LeftRight + || m_StereoMode == StereoModes::TopBottom); + } + void SetWireframeMode(bool inEnable) override { m_WireframeMode = inEnable; } bool GetWireframeMode() override { return m_WireframeMode; } @@ -732,10 +744,38 @@ struct SRenderContext : public IQt3DSRenderContext QT3DSVec2 GetPresentationScaleFactor() const override { return m_PresentationScale; } + void adjustRectToStereoMode(NVRenderRect &rect) + { + if (m_StereoMode == StereoModes::LeftRight) { + if (m_StereoView == StereoViews::Left) { + rect = NVRenderRect(rect.m_X, rect.m_Y, rect.m_Width / 2, + rect.m_Height); + } + if (m_StereoView == StereoViews::Right) { + rect = NVRenderRect(rect.m_X + rect.m_Width / 2, rect.m_Y, + rect.m_Width / 2, rect.m_Height); + } + } else if (m_StereoMode == StereoModes::TopBottom) { + if (m_StereoView == StereoViews::Left) { + rect = NVRenderRect(rect.m_X, rect.m_Y + rect.m_Height / 2, + rect.m_Width, rect.m_Height / 2); + } + if (m_StereoView == StereoViews::Right) { + rect = NVRenderRect(rect.m_X, rect.m_Y, + rect.m_Width, rect.m_Height / 2); + } + } + } + virtual void SetupRenderTarget() { - NVRenderRect theContextViewport(GetContextViewport()); - if (m_Viewport.hasValue()) { + bool stereoProgressiveEnabled = GetStereoProgressiveEnabled(); + // Clearing for matte / scene background + if (m_Viewport.hasValue() || stereoProgressiveEnabled) { + // With progressive stereoscopic rendering needs to be adjusted to viewport + NVRenderRect theContextViewport(GetContextViewport()); + if (stereoProgressiveEnabled) + adjustRectToStereoMode(theContextViewport); m_RenderContext->SetScissorTestEnabled(true); m_RenderContext->SetScissorRect(theContextViewport); } else { @@ -758,7 +798,10 @@ struct SRenderContext : public IQt3DSRenderContext } bool renderOffscreen = m_BeginFrameResult.m_RenderOffscreen; m_RenderContext->SetViewport(m_BeginFrameResult.m_Viewport); - m_RenderContext->SetScissorRect(m_BeginFrameResult.m_ScissorRect); + NVRenderRect scissorRect = m_BeginFrameResult.m_ScissorRect; + if (stereoProgressiveEnabled) + adjustRectToStereoMode(scissorRect); + m_RenderContext->SetScissorRect(scissorRect); m_RenderContext->SetScissorTestEnabled(m_BeginFrameResult.m_ScissorTestEnabled); if (m_PresentationViewport.m_Width > 0 && m_PresentationViewport.m_Height > 0) { @@ -826,14 +869,20 @@ struct SRenderContext : public IQt3DSRenderContext } } } + // Reset scissor rect to full viewport size + m_RenderContext->SetScissorRect(GetContextViewport()); + } void RunRenderTasks() override { m_RenderList->RunRenderTasks(); - // Don't (re)setup when rendering stereoscopic second (right) eye - if (m_StereoView != StereoViews::Right) + // Don't (re)setup when rendering stereoscopic second (right) eye. + // Except in progressive mode, where each viewport needs to be cleared separately. + if (m_StereoView != StereoViews::Right + || GetStereoProgressiveEnabled()) { SetupRenderTarget(); + } } // Note this runs before EndFrame diff --git a/src/runtimerender/Qt3DSRenderContextCore.h b/src/runtimerender/Qt3DSRenderContextCore.h index 670becc..8382fc6 100644 --- a/src/runtimerender/Qt3DSRenderContextCore.h +++ b/src/runtimerender/Qt3DSRenderContextCore.h @@ -203,6 +203,8 @@ namespace render { virtual StereoViews::Enum GetStereoView() const = 0; virtual void SetStereoEyeSeparation(double separation) = 0; virtual double GetStereoEyeSeparation() const = 0; + virtual void SetStereoProgressiveEnabled(bool enabled) = 0; + virtual bool GetStereoProgressiveEnabled() const = 0; virtual void SetWireframeMode(bool inEnable) = 0; virtual bool GetWireframeMode() = 0; diff --git a/src/viewer/Qt3DSViewerApp.cpp b/src/viewer/Qt3DSViewerApp.cpp index 5b3ba4a..5d8393a 100644 --- a/src/viewer/Qt3DSViewerApp.cpp +++ b/src/viewer/Qt3DSViewerApp.cpp @@ -872,6 +872,20 @@ double Q3DSViewerApp::GetStereoEyeSeparation() const return 0; } +void Q3DSViewerApp::SetStereoProgressiveEnabled(bool enabled) +{ + if (m_Impl.m_view && m_Impl.m_view->GetTegraRenderEngine()) + m_Impl.m_view->GetTegraRenderEngine()->SetStereoProgressiveEnabled(enabled); +} + +bool Q3DSViewerApp::GetStereoProgressiveEnabled() const +{ + if (m_Impl.m_view && m_Impl.m_view->GetTegraRenderEngine()) + return m_Impl.m_view->GetTegraRenderEngine()->GetStereoProgressiveEnabled(); + + return 0; +} + void Q3DSViewerApp::setMatteColor(const QColor &color) { if (m_Impl.m_view && m_Impl.m_view->GetTegraRenderEngine()) { diff --git a/src/viewer/Qt3DSViewerApp.h b/src/viewer/Qt3DSViewerApp.h index 0aa8ade..ab723cd 100644 --- a/src/viewer/Qt3DSViewerApp.h +++ b/src/viewer/Qt3DSViewerApp.h @@ -325,6 +325,9 @@ public: void SetStereoEyeSeparation(double separation); double GetStereoEyeSeparation() const; + void SetStereoProgressiveEnabled(bool enabled); + bool GetStereoProgressiveEnabled() const; + void setMatteColor(const QColor &color); void setShowOnScreenStats(bool s); diff --git a/tools/viewer/main.cpp b/tools/viewer/main.cpp index 1bcbe9d..4f39817 100644 --- a/tools/viewer/main.cpp +++ b/tools/viewer/main.cpp @@ -220,6 +220,9 @@ int main(int argc, char *argv[]) "The default value is 0.4"), QCoreApplication::translate("main", "separation"), QString::number(0.4)}); + parser.addOption({"enableprogressivestereo", + QCoreApplication::translate("main", + "Enables progressive stereoscopic rendering.\n")}); parser.addOption({"convert-shader-cache", QCoreApplication::translate("main", "Convert base64 dump to shader cache file."), @@ -391,6 +394,8 @@ int main(int argc, char *argv[]) if (ok) appWindow->setProperty("stereoEyeSeparation", separation); } + if (parser.isSet(QStringLiteral("enableprogressivestereo"))) + appWindow->setProperty("stereoProgressiveEnabled", true); viewer.setVariantList(variantList); diff --git a/tools/viewer/qml/main.qml b/tools/viewer/qml/main.qml index 153753a..baaf6d3 100644 --- a/tools/viewer/qml/main.qml +++ b/tools/viewer/qml/main.qml @@ -31,7 +31,7 @@ import QtQuick 2.7 import QtQuick.Controls 2.2 import QtQuick.Dialogs 1.2 import Qt3DStudioViewer 1.0 -import QtStudio3D.OpenGL 2.5 +import QtStudio3D.OpenGL 2.7 import QtQuick.Window 2.2 ApplicationWindow { @@ -52,6 +52,7 @@ ApplicationWindow { property int scaleMode: ViewerSettings.ScaleModeCenter property int stereoMode: ViewerSettings.StereoModeMono property double stereoEyeSeparation: 0.4 + property bool stereoProgressiveEnabled: false function closeMenus() { fileMenu.close(); @@ -219,6 +220,7 @@ ApplicationWindow { scaleMode: window.scaleMode stereoMode: window.stereoMode stereoEyeSeparation: window.stereoEyeSeparation + stereoProgressiveEnabled: window.stereoProgressiveEnabled } // Hider item keeps the Studio3D hidden until it starts running and we reset the @@ -634,6 +636,17 @@ ApplicationWindow { } } StyledMenuItem { + id: stereoProgressiveEnabled + text: qsTr("Progressive Rendering") + enabled: _viewerHelper.contentView === ViewerHelper.StudioView + showCheckMark: window.stereoProgressiveEnabled + shortcut: "Ctrl+Shift+P" + onTriggered: { + if (enabled) + window.stereoProgressiveEnabled = !window.stereoProgressiveEnabled; + } + } + StyledMenuItem { id: stereoEyeSeparationUp text: qsTr("Increase Separation") shortcut: "Ctrl+Shift++" |