diff options
Diffstat (limited to 'src/api')
-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 |
7 files changed, 71 insertions, 0 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) |