summaryrefslogtreecommitdiffstats
path: root/src/render/materialsystem/parameter.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-12-08 09:03:14 +0100
committerPaul Lemire <paul.lemire@kdab.com>2016-01-13 16:08:31 +0000
commitd7e9c7a9844b658d93c3f1ac47e96f069162de3d (patch)
treef8ae86fe21d07d59ef806296379c0355a0e4f00c /src/render/materialsystem/parameter.cpp
parent71b4e8612e558115edd12e8ac19f8d6abe583475 (diff)
QParameter: only copy QNodeId when parameter value is a QNodeSubclass
This avoid doing useless clones and will be further improved to support UBO/SSBO when Buffer are used as a Parameter's value. QNode subclasses that can be used as the value of an attribute are: QAbstractTextureProvider -> default uniform block QShaderData -> UBO (could be made to work with SSBO as well) Buffer -> UBO / SSBO Change-Id: I4928b95107656afc64db1ef989dde5dde8a92df8 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/materialsystem/parameter.cpp')
-rw-r--r--src/render/materialsystem/parameter.cpp39
1 files changed, 7 insertions, 32 deletions
diff --git a/src/render/materialsystem/parameter.cpp b/src/render/materialsystem/parameter.cpp
index fea400e0b..d7147e5a4 100644
--- a/src/render/materialsystem/parameter.cpp
+++ b/src/render/materialsystem/parameter.cpp
@@ -37,8 +37,11 @@
#include "parameter_p.h"
#include <Qt3DCore/qscenepropertychange.h>
#include <Qt3DRender/qparameter.h>
+#include <Qt3DRender/private/qparameter_p.h>
#include <Qt3DRender/qtexture.h>
#include <Qt3DRender/qshaderdata.h>
+#include <Qt3DRender/qbuffer.h>
+#include <Qt3DRender/private/buffer_p.h>
#include <Qt3DRender/private/managers_p.h>
@@ -51,16 +54,14 @@ namespace Render {
Parameter::Parameter()
: QBackendNode()
- , m_shaderDataManager(Q_NULLPTR)
- , m_textureManager(Q_NULLPTR)
{
}
-void Parameter::updateFromPeer(Qt3DCore::QNode *mat)
+void Parameter::updateFromPeer(Qt3DCore::QNode *peer)
{
- QParameter *param = static_cast<QParameter *>(mat);
+ QParameter *param = static_cast<QParameter *>(peer);
m_name = param->name();
- m_value = toBackendValue(param->value());
+ m_value = static_cast<QParameterPrivate *>(QNodePrivate::get(param))->m_backendValue;
}
void Parameter::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
@@ -71,7 +72,7 @@ void Parameter::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
if (propertyChange->propertyName() == QByteArrayLiteral("name"))
m_name = propertyChange->value().toString();
else if (propertyChange->propertyName() == QByteArrayLiteral("value"))
- m_value = toBackendValue(propertyChange->value());
+ m_value = propertyChange->value();
}
}
@@ -85,32 +86,6 @@ QVariant Parameter::value() const
return m_value;
}
-void Parameter::setShaderDataManager(ShaderDataManager *shaderDataManager)
-{
- m_shaderDataManager = shaderDataManager;
-}
-
-void Parameter::setTextureManager(TextureManager *textureManager)
-{
- m_textureManager = textureManager;
-}
-
-QVariant Parameter::toBackendValue(const QVariant &value)
-{
- QNode *node = value.value<QNode *>();
-
- if (node == Q_NULLPTR) {
- return value;
- } else if (qobject_cast<QAbstractTextureProvider*>(node)) {
- return QVariant::fromValue(static_cast<Texture*>(createBackendNode(node)));
- } else if (qobject_cast<QShaderData*>(node)) {
- return QVariant::fromValue(static_cast<ShaderData*>(createBackendNode(node)));
- } else {
- qFatal("Texture and ShaderData are the only types of Node allowed as parameters");
- return QVariant();
- }
-}
-
} // namespace Render
} // namespace Qt3DRender