summaryrefslogtreecommitdiffstats
path: root/src/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/api')
-rw-r--r--src/api/studio3d/q3dscommandqueue.cpp5
-rw-r--r--src/api/studio3d/q3dscommandqueue_p.h2
-rw-r--r--src/api/studio3d/q3dspresentation.cpp40
-rw-r--r--src/api/studio3d/q3dsviewersettings.cpp54
-rw-r--r--src/api/studio3d/q3dsviewersettings.h4
-rw-r--r--src/api/studio3d/q3dsviewersettings_p.h2
-rw-r--r--src/api/studio3dqml/q3dsrenderer.cpp2
7 files changed, 109 insertions, 0 deletions
diff --git a/src/api/studio3d/q3dscommandqueue.cpp b/src/api/studio3d/q3dscommandqueue.cpp
index 300c0bf..a839e69 100644
--- a/src/api/studio3d/q3dscommandqueue.cpp
+++ b/src/api/studio3d/q3dscommandqueue.cpp
@@ -219,6 +219,8 @@ void CommandQueue::copyCommands(CommandQueue &fromQueue)
= m_stereoEyeSeparationChanged || fromQueue.m_stereoEyeSeparationChanged;
m_stereoProgressiveEnabledChanged
= m_stereoProgressiveEnabledChanged || fromQueue.m_stereoProgressiveEnabledChanged;
+ m_skipFramesIntervalChanged
+ = m_skipFramesIntervalChanged || fromQueue.m_skipFramesIntervalChanged;
m_shadeModeChanged = m_shadeModeChanged || fromQueue.m_shadeModeChanged;
m_showRenderStatsChanged = m_showRenderStatsChanged || fromQueue.m_showRenderStatsChanged;
m_matteColorChanged = m_matteColorChanged || fromQueue.m_matteColorChanged;
@@ -240,6 +242,8 @@ void CommandQueue::copyCommands(CommandQueue &fromQueue)
m_stereoEyeSeparation = fromQueue.m_stereoEyeSeparation;
if (fromQueue.m_stereoProgressiveEnabledChanged)
m_stereoProgressiveEnabled = fromQueue.m_stereoProgressiveEnabled;
+ if (fromQueue.m_skipFramesIntervalChanged)
+ m_skipFramesInterval = fromQueue.m_skipFramesInterval;
if (fromQueue.m_shadeModeChanged)
m_shadeMode = fromQueue.m_shadeMode;
if (fromQueue.m_showRenderStatsChanged)
@@ -343,6 +347,7 @@ void CommandQueue::clear(bool deleteCommandData)
m_stereoModeChanged = false;
m_stereoEyeSeparationChanged = false;
m_stereoProgressiveEnabledChanged = false;
+ m_skipFramesIntervalChanged = 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 6096439..9939cb0 100644
--- a/src/api/studio3d/q3dscommandqueue_p.h
+++ b/src/api/studio3d/q3dscommandqueue_p.h
@@ -144,6 +144,7 @@ public:
bool m_stereoModeChanged = false;
bool m_stereoEyeSeparationChanged = false;
bool m_stereoProgressiveEnabledChanged = false;
+ bool m_skipFramesIntervalChanged = false;
bool m_shadeModeChanged = false;
bool m_showRenderStatsChanged = false;
bool m_matteColorChanged = false;
@@ -159,6 +160,7 @@ public:
Q3DSViewerSettings::StereoMode m_stereoMode = Q3DSViewerSettings::StereoModeMono;
double m_stereoEyeSeparation = 0.4;
bool m_stereoProgressiveEnabled = false;
+ int m_skipFramesInterval = 0;
Q3DSViewerSettings::ShadeMode m_shadeMode = Q3DSViewerSettings::ShadeModeShaded;
bool m_showRenderStats = false;
QColor m_matteColor = QColor(Qt::black);
diff --git a/src/api/studio3d/q3dspresentation.cpp b/src/api/studio3d/q3dspresentation.cpp
index f0ca867..c711bbc 100644
--- a/src/api/studio3d/q3dspresentation.cpp
+++ b/src/api/studio3d/q3dspresentation.cpp
@@ -943,6 +943,22 @@ void Q3DSPresentation::setShaderCacheFile(const QUrl &fileName)
*/
/*!
+ \qmlsignal Presentation::shaderCacheLoadErrors(string errors)
+ \since QtStudio3D.OpenGL 2.7
+
+ Emitted when a shader cache loading fails. The parameter \a errors contains the error
+ message(s).
+ */
+
+/*!
+ \fn Q3DSPresentation::shaderCacheLoadErrors(const QString &errors)
+ \since Qt 3D Studio 2.7
+
+ Emitted when a shader cache loading fails. The parameter \a errors contains the error
+ message(s).
+ */
+
+/*!
This function is for backwards compatibility. We recommend using \l{DataInput}s to control
slide changes. \l{DataInput} provides stronger contract between the design and
code as it avoids use of elementPath (a reference to design's internal structure).
@@ -1126,6 +1142,30 @@ void Q3DSPresentation::setAttribute(const QString &elementPath, const QString &a
"image://colors/blue" where "image://" tells the runtime to look for an
image provider, "colors" is the image provider id and rest are the image
id the provider uses to create the image.
+
+ Usage is similar to the examples in https://doc.qt.io/qt-5/qquickimageprovider.html
+
+ \badcode
+ // Example implementation of a request function
+ // This returns a 50 x 50 px size green texture as a QPixmap
+ QPixmap ImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
+ {
+ // Size needs to be more than 0,0 or nothing will be drawn
+ if (size)
+ *size = QSize(50, 50);
+
+ QPixmap pixmap(50, 50);
+ pixmap.fill(QColor("green"));
+ return pixmap;
+ }
+
+ // Image providers are added to the presentation after viewer creation
+ viewer.create(&window, &context);
+ viewer.presentation()->addImageProvider("green", new ImageProvider());
+
+ // Use as texture
+ viewer.presentation()->setAttribute("Scene.Layer.Rectangle.Material.diffusemap", "sourcepath", "image://green");
+ \endcode
*/
void Q3DSPresentation::addImageProvider(const QString &providerId, QQmlImageProviderBase *provider)
{
diff --git a/src/api/studio3d/q3dsviewersettings.cpp b/src/api/studio3d/q3dsviewersettings.cpp
index 9025bb8..cbb273a 100644
--- a/src/api/studio3d/q3dsviewersettings.cpp
+++ b/src/api/studio3d/q3dsviewersettings.cpp
@@ -371,6 +371,44 @@ void Q3DSViewerSettings::setStereoProgressiveEnabled(bool enabled)
}
/*!
+ \qmlproperty int ViewerSettings::skipFramesInterval
+
+ \since QtStudio3D.OpenGL 2.7
+
+ Sets interval for skipping frame rendering. The default value is 0
+ meaning all frames are rendered. Setting this to 1 renders every
+ other frame (30fps on 60Hz screen), 2 every third frame (20fps on
+ 60Hz screen) etc. This property allows slowing down 3D rendering
+ while keeping QtQuick UI rendering intact, decreasing the CPU/GPU
+ usage.
+ */
+/*!
+ \property Q3DSViewerSettings::skipFramesInterval
+
+ \since Qt 3D Studio 2.7
+
+ Sets interval for skipping frame rendering. The default value is 0
+ meaning all frames are rendered. Setting this to 1 renders every
+ other frame (30fps on 60Hz screen), 2 every third frame (20fps on
+ 60Hz screen) etc. This property allows slowing down 3D rendering
+ while keeping QtQuick UI rendering intact, decreasing the CPU/GPU
+ usage.
+ */
+
+int Q3DSViewerSettings::skipFramesInterval() const
+{
+ return d_ptr->m_skipFramesInterval;
+}
+
+void Q3DSViewerSettings::setSkipFramesInterval(int interval)
+{
+ if (d_ptr->m_skipFramesInterval != interval) {
+ d_ptr->setSkipFramesInterval(interval);
+ Q_EMIT skipFramesIntervalChanged(interval);
+ }
+}
+
+/*!
\qmlproperty bool ViewerSettings::matteEnabled
Specifies if the empty area around the presentation (applicable when
@@ -450,6 +488,7 @@ Q3DSViewerSettingsPrivate::Q3DSViewerSettingsPrivate(Q3DSViewerSettings *q)
, m_stereoMode(Q3DSViewerSettings::StereoModeMono)
, m_stereoEyeSeparation(0.4)
, m_stereoProgressiveEnabled(false)
+ , m_skipFramesInterval(0)
, m_savedSettings(nullptr)
{
}
@@ -470,6 +509,7 @@ void Q3DSViewerSettingsPrivate::setViewerApp(Q3DSViewer::Q3DSViewerApp *app)
setStereoMode(m_stereoMode);
setStereoEyeSeparation(m_stereoEyeSeparation);
setStereoProgressiveEnabled(m_stereoProgressiveEnabled);
+ setSkipFramesInterval(m_skipFramesInterval);
}
}
@@ -485,6 +525,7 @@ void Q3DSViewerSettingsPrivate::setCommandQueue(CommandQueue *queue)
setStereoMode(m_stereoMode);
setStereoEyeSeparation(m_stereoEyeSeparation);
setStereoProgressiveEnabled(m_stereoProgressiveEnabled);
+ setSkipFramesInterval(m_skipFramesInterval);
}
}
@@ -519,6 +560,8 @@ void Q3DSViewerSettingsPrivate::load(const QString &group, const QString &organi
m_savedSettings->value(QStringLiteral("stereoEyeSeparation")).toDouble());
q_ptr->setStereoProgressiveEnabled(
m_savedSettings->value(QStringLiteral("stereoProgressiveEnabled")).toBool());
+ q_ptr->setSkipFramesInterval(
+ m_savedSettings->value(QStringLiteral("skipFramesInterval")).toInt());
q_ptr->setMatteEnabled(m_savedSettings->value(QStringLiteral("matteEnabled")).toBool());
}
@@ -627,6 +670,17 @@ void Q3DSViewerSettingsPrivate::setStereoProgressiveEnabled(bool enabled)
}
}
+void Q3DSViewerSettingsPrivate::setSkipFramesInterval(int interval)
+{
+ m_skipFramesInterval = interval;
+ if (m_viewerApp) {
+ m_viewerApp->SetSkipFramesInterval(interval);
+ } else if (m_commandQueue) {
+ m_commandQueue->m_skipFramesInterval = interval;
+ m_commandQueue->m_skipFramesIntervalChanged = 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 f956649..80b36df 100644
--- a/src/api/studio3d/q3dsviewersettings.h
+++ b/src/api/studio3d/q3dsviewersettings.h
@@ -53,6 +53,7 @@ class Q_STUDIO3D_EXPORT Q3DSViewerSettings : public QObject
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)
+ Q_PROPERTY(int skipFramesInterval READ skipFramesInterval WRITE setSkipFramesInterval NOTIFY skipFramesIntervalChanged REVISION 2)
public:
enum ShadeMode {
@@ -84,6 +85,7 @@ public:
StereoMode stereoMode() const;
double stereoEyeSeparation() const;
Q_REVISION(2) bool stereoProgressiveEnabled() const;
+ Q_REVISION(2) int skipFramesInterval() const;
Q_INVOKABLE void save(const QString &group, const QString &organization = QString(),
const QString &application = QString());
@@ -98,6 +100,7 @@ public Q_SLOTS:
void setStereoMode(StereoMode mode);
void setStereoEyeSeparation(double separation);
Q_REVISION(2) void setStereoProgressiveEnabled(bool enabled);
+ Q_REVISION(2) void setSkipFramesInterval(int interval);
Q_SIGNALS:
void matteEnabledChanged(bool enabled);
@@ -108,6 +111,7 @@ Q_SIGNALS:
void stereoModeChanged(StereoMode mode);
void stereoEyeSeparationChanged(double separation);
Q_REVISION(2) void stereoProgressiveEnabledChanged(bool enabled);
+ Q_REVISION(2) void skipFramesIntervalChanged(int interval);
private:
Q_DISABLE_COPY(Q3DSViewerSettings)
diff --git a/src/api/studio3d/q3dsviewersettings_p.h b/src/api/studio3d/q3dsviewersettings_p.h
index 44e1227..6a2dc75 100644
--- a/src/api/studio3d/q3dsviewersettings_p.h
+++ b/src/api/studio3d/q3dsviewersettings_p.h
@@ -70,6 +70,7 @@ public:
void setStereoMode(Q3DSViewerSettings::StereoMode mode);
void setStereoEyeSeparation(double separation);
void setStereoProgressiveEnabled(bool enabled);
+ void setSkipFramesInterval(int interval);
public:
Q3DSViewerSettings *q_ptr;
@@ -88,6 +89,7 @@ private:
Q3DSViewerSettings::StereoMode m_stereoMode;
double m_stereoEyeSeparation;
bool m_stereoProgressiveEnabled;
+ int m_skipFramesInterval;
QSettings *m_savedSettings;
};
diff --git a/src/api/studio3dqml/q3dsrenderer.cpp b/src/api/studio3dqml/q3dsrenderer.cpp
index f7bd25b..8f0081e 100644
--- a/src/api/studio3dqml/q3dsrenderer.cpp
+++ b/src/api/studio3dqml/q3dsrenderer.cpp
@@ -353,6 +353,8 @@ void Q3DSRenderer::processCommands()
m_settings->setStereoEyeSeparation(m_commands.m_stereoEyeSeparation);
if (m_commands.m_stereoProgressiveEnabledChanged)
m_settings->setStereoProgressiveEnabled(m_commands.m_stereoProgressiveEnabled);
+ if (m_commands.m_skipFramesIntervalChanged)
+ m_settings->setSkipFramesInterval(m_commands.m_skipFramesInterval);
if (m_commands.m_shadeModeChanged)
m_settings->setShadeMode(m_commands.m_shadeMode);
if (m_commands.m_matteColorChanged)