summaryrefslogtreecommitdiffstats
path: root/src/api/studio3d/q3dsviewersettings.cpp
diff options
context:
space:
mode:
authorKaj Grönholm <kaj.gronholm@qt.io>2020-03-16 12:22:32 +0200
committerKaj Grönholm <kaj.gronholm@qt.io>2020-04-08 08:12:01 +0300
commit02e4d56d055d73340d3af1257b908a52aecc320f (patch)
tree2013f0e23d863cc59675cdb9bb31c79b9611a63a /src/api/studio3d/q3dsviewersettings.cpp
parenta05990a7d083ead234b5ef443afdfd3f83fe78ed (diff)
Add support for progressive stereoscopic rendering
In progressive mode, single eye is rendered per frame. So full rendering of stereoscopic view takes 2 frames. This mode can be enabled from Q3DSViewerSettings, and for viewer from menu or with "--enableprogressivestereo" command-line parameter. Task-number: QT3DS-4076 Change-Id: Ie69e37da028743164b959036136485b88c61b009 Reviewed-by: Janne Kangas <janne.kangas@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src/api/studio3d/q3dsviewersettings.cpp')
-rw-r--r--src/api/studio3d/q3dsviewersettings.cpp55
1 files changed, 55 insertions, 0 deletions
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)
{