diff options
72 files changed, 151 insertions, 924 deletions
diff --git a/examples/qt3d/compute-particles/ComputeMaterial.qml b/examples/qt3d/compute-particles/ComputeMaterial.qml index f4ac1105a..01fef2bd9 100644 --- a/examples/qt3d/compute-particles/ComputeMaterial.qml +++ b/examples/qt3d/compute-particles/ComputeMaterial.qml @@ -100,10 +100,6 @@ Material { shaderProgram: drawShader // We assume the mesh to be drawn will also receive // Vertex buffers attributes that will be used to position and color - bindings: [ - ParameterMapping { parameterName: "particlePosition"; shaderVariableName: "particlePosition"; bindingType: ParameterMapping.Attribute }, - ParameterMapping { parameterName: "particleColor"; shaderVariableName: "particleColor"; bindingType: ParameterMapping.Attribute } - ] } ] annotations: [ diff --git a/examples/qt3d/instanced-arrays-qml/main.qml b/examples/qt3d/instanced-arrays-qml/main.qml index 993e740fa..96a258da4 100644 --- a/examples/qt3d/instanced-arrays-qml/main.qml +++ b/examples/qt3d/instanced-arrays-qml/main.qml @@ -93,9 +93,6 @@ Entity { } annotations: Annotation { name: "renderingStyle"; value: "forward" } renderPasses: RenderPass { - bindings: [ - ParameterMapping { parameterName: "pos"; shaderVariableName: "pos"; bindingType: ParameterMapping.Attribute } - ] shaderProgram: ShaderProgram { vertexShaderCode: loadSource("qrc:/instanced.vert") fragmentShaderCode: loadSource("qrc:/instanced.frag") diff --git a/src/plugins/sceneparsers/gltf/gltfparser.cpp b/src/plugins/sceneparsers/gltf/gltfparser.cpp index cca52d396..abb3f8559 100644 --- a/src/plugins/sceneparsers/gltf/gltfparser.cpp +++ b/src/plugins/sceneparsers/gltf/gltfparser.cpp @@ -67,7 +67,6 @@ #include <Qt3DRender/QMaterial> #include <Qt3DRender/QGraphicsApiFilter> #include <Qt3DRender/QParameter> -#include <Qt3DRender/QParameterMapping> #include <Qt3DRender/QPolygonOffset> #include <Qt3DRender/QRenderState> #include <Qt3DRender/QScissorTest> @@ -102,7 +101,7 @@ const QString KEY_ROTATION = QStringLiteral("rotation"); const QString KEY_SCALE = QStringLiteral("scale"); const QString KEY_TRANSLATION = QStringLiteral("translation"); const QString KEY_TYPE = QStringLiteral("type"); -const QString KEY_PERSPECTIVE =QStringLiteral("perspective"); +const QString KEY_PERSPECTIVE = QStringLiteral("perspective"); const QString KEY_NAME = QStringLiteral("name"); const QString KEY_COUNT = QStringLiteral("count"); const QString KEY_YFOV = QStringLiteral("yfov"); @@ -993,7 +992,6 @@ void GLTFParser::processJSONTechnique(const QString &id, const QJsonObject &json delete parameter; } - pass->addBinding(new QParameterMapping(attributeName, shaderAttributeName, QParameterMapping::Attribute)); } // of program-instance attributes // Uniforms @@ -1009,9 +1007,7 @@ void GLTFParser::processJSONTechnique(const QString &id, const QJsonObject &json //Check if the parameter has a standard uniform semantic QString standardUniformName = standardUniformNamefromSemantic(m_parameterDataDict[parameter].semantic); if (standardUniformName.isNull()) { - pass->addBinding(new QParameterMapping(pname, shaderUniformName, QParameterMapping::Uniform)); } else { - pass->addBinding(new QParameterMapping(standardUniformName, shaderUniformName, QParameterMapping::StandardUniform)); t->removeParameter(parameter); m_parameterDataDict.remove(parameter); delete parameter; diff --git a/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp b/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp index d06a8e06c..1cb5dd857 100644 --- a/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp +++ b/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp @@ -56,7 +56,6 @@ #include <Qt3DRender/qeffect.h> #include <Qt3DRender/qparameter.h> #include <Qt3DRender/qannotation.h> -#include <Qt3DRender/qparametermapping.h> #include <Qt3DRender/qcuboidmesh.h> #include <Qt3DRender/qconemesh.h> #include <Qt3DRender/qcylindermesh.h> @@ -193,7 +192,6 @@ void Qt3DQuick3DRenderPlugin::registerTypes(const char *uri) qmlRegisterType<Qt3DRender::QGraphicsApiFilter>(uri, 2, 0, "GraphicsApiFilter"); qmlRegisterUncreatableType<Qt3DRender::QParameter>(uri, 2, 0, "QParameter", "Quick3D should instantiate Quick3DParameter only"); qmlRegisterType<Qt3DRender::Render::Quick::Quick3DParameter>(uri, 2, 0, "Parameter"); - qmlRegisterType<Qt3DRender::QParameterMapping>(uri, 2, 0, "ParameterMapping"); Qt3DRender::Quick::registerExtendedType<Qt3DRender::QMaterial, Qt3DRender::Render::Quick::Quick3DMaterial>("QMaterial", "Qt3D.Render/Material", uri, 2, 0, "Material"); Qt3DRender::Quick::registerExtendedType<Qt3DRender::QRenderPass, Qt3DRender::Render::Quick::Quick3DRenderPass>("QRenderPass", "Qt3D.Render/RenderPass", uri, 2, 0, "RenderPass"); qmlRegisterType<Qt3DRender::QShaderProgram>(uri, 2, 0, "ShaderProgram"); diff --git a/src/quick3d/quick3drender/items/quick3drenderpass.cpp b/src/quick3d/quick3drender/items/quick3drenderpass.cpp index 14524afe9..5433c1bd2 100644 --- a/src/quick3d/quick3drender/items/quick3drenderpass.cpp +++ b/src/quick3d/quick3drender/items/quick3drenderpass.cpp @@ -39,7 +39,6 @@ ****************************************************************************/ #include "quick3drenderpass_p.h" -#include <Qt3DRender/qparametermapping.h> QT_BEGIN_NAMESPACE @@ -61,15 +60,6 @@ QQmlListProperty<QAnnotation> Quick3DRenderPass::annotationList() &Quick3DRenderPass::clearAnnotations); } -QQmlListProperty<QParameterMapping> Quick3DRenderPass::bindingList() -{ - return QQmlListProperty<QParameterMapping>(this, 0, - &Quick3DRenderPass::appendBinding, - &Quick3DRenderPass::bindingsCount, - &Quick3DRenderPass::bindingAt, - &Quick3DRenderPass::clearBindings); -} - QQmlListProperty<QRenderState> Quick3DRenderPass::renderStateList() { return QQmlListProperty<QRenderState>(this, 0, @@ -113,31 +103,6 @@ void Quick3DRenderPass::clearAnnotations(QQmlListProperty<QAnnotation> *list) rPass->parentRenderPass()->removeAnnotation(c); } -void Quick3DRenderPass::appendBinding(QQmlListProperty<QParameterMapping> *list, QParameterMapping *binding) -{ - Quick3DRenderPass *rPass = qobject_cast<Quick3DRenderPass *>(list->object); - rPass->parentRenderPass()->addBinding(binding); -} - -QParameterMapping *Quick3DRenderPass::bindingAt(QQmlListProperty<QParameterMapping> *list, int index) -{ - Quick3DRenderPass *rPass = qobject_cast<Quick3DRenderPass *>(list->object); - return rPass->parentRenderPass()->bindings().at(index); -} - -int Quick3DRenderPass::bindingsCount(QQmlListProperty<QParameterMapping> *list) -{ - Quick3DRenderPass *rPass = qobject_cast<Quick3DRenderPass *>(list->object); - return rPass->parentRenderPass()->bindings().count(); -} - -void Quick3DRenderPass::clearBindings(QQmlListProperty<QParameterMapping> *list) -{ - Quick3DRenderPass *rPass = qobject_cast<Quick3DRenderPass *>(list->object); - Q_FOREACH (QParameterMapping *binding, rPass->parentRenderPass()->bindings()) - rPass->parentRenderPass()->removeBinding(binding); -} - void Quick3DRenderPass::appendRenderState(QQmlListProperty<QRenderState> *list, QRenderState *state) { Quick3DRenderPass *rPass = qobject_cast<Quick3DRenderPass *>(list->object); diff --git a/src/quick3d/quick3drender/items/quick3drenderpass_p.h b/src/quick3d/quick3drender/items/quick3drenderpass_p.h index 62fd749fa..a7e7f6cd4 100644 --- a/src/quick3d/quick3drender/items/quick3drenderpass_p.h +++ b/src/quick3d/quick3drender/items/quick3drenderpass_p.h @@ -66,14 +66,12 @@ class QT3DQUICKRENDERSHARED_PRIVATE_EXPORT Quick3DRenderPass : public QObject { Q_OBJECT Q_PROPERTY(QQmlListProperty<Qt3DRender::QAnnotation> annotations READ annotationList) - Q_PROPERTY(QQmlListProperty<Qt3DRender::QParameterMapping> bindings READ bindingList) Q_PROPERTY(QQmlListProperty<Qt3DRender::QRenderState> renderStates READ renderStateList) Q_PROPERTY(QQmlListProperty<Qt3DRender::QParameter> parameters READ parameterList) public: explicit Quick3DRenderPass(QObject *parent = 0); QQmlListProperty<QAnnotation> annotationList(); - QQmlListProperty<QParameterMapping> bindingList(); QQmlListProperty<QRenderState> renderStateList(); QQmlListProperty<QParameter> parameterList(); @@ -85,11 +83,6 @@ private: static int annotationsCount(QQmlListProperty<QAnnotation> *list); static void clearAnnotations(QQmlListProperty<QAnnotation> *list); - static void appendBinding(QQmlListProperty<QParameterMapping> *list, QParameterMapping *binding); - static QParameterMapping *bindingAt(QQmlListProperty<QParameterMapping> *list, int index); - static int bindingsCount(QQmlListProperty<QParameterMapping> *list); - static void clearBindings(QQmlListProperty<QParameterMapping> *list); - static void appendRenderState(QQmlListProperty<QRenderState> *list, QRenderState *state); static QRenderState *renderStateAt(QQmlListProperty<QRenderState> *list, int index); static int renderStateCount(QQmlListProperty<QRenderState> *list); diff --git a/src/render/backend/abstractrenderer_p.h b/src/render/backend/abstractrenderer_p.h index dbc157a2c..13eceb3c5 100644 --- a/src/render/backend/abstractrenderer_p.h +++ b/src/render/backend/abstractrenderer_p.h @@ -80,15 +80,6 @@ class FrameGraphNode; class RendererSettings; class BackendNode; -// Changes made to backend nodes are reported to the Renderer -enum class BackendNodeDirtyFlag { - Transform = 1 << 0, - Material = 1 << 1, - Geometry = 1 << 2, - Any = 1 << 15 -}; -Q_DECLARE_FLAGS(BackendNodeDirtySet, BackendNodeDirtyFlag) -Q_DECLARE_OPERATORS_FOR_FLAGS(BackendNodeDirtySet) class QT3DRENDERSHARED_PRIVATE_EXPORT AbstractRenderer { @@ -99,6 +90,16 @@ public: OpenGL }; + // Changes made to backend nodes are reported to the Renderer + enum BackendNodeDirtyFlag { + TransformDirty = 1 << 0, + MaterialDirty = 1 << 1, + GeometryDirty = 1 << 2, + ComputeDirty = 1 << 3, + AllDirty = 1 << 15 + }; + Q_DECLARE_FLAGS(BackendNodeDirtySet, BackendNodeDirtyFlag) + virtual API api() const = 0; virtual qint64 time() const = 0; @@ -125,6 +126,7 @@ public: virtual void markDirty(BackendNodeDirtySet changes, BackendNode *node) = 0; virtual BackendNodeDirtySet dirtyBits() = 0; + virtual void clearDirtyBits(BackendNodeDirtySet changes) = 0; virtual bool shouldRender() = 0; virtual void skipNextFrame() = 0; @@ -145,6 +147,8 @@ public: }; +Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractRenderer::BackendNodeDirtySet) + } // Render } // Qt3DRender diff --git a/src/render/backend/backendnode.cpp b/src/render/backend/backendnode.cpp index 247f6340b..89a2c797c 100644 --- a/src/render/backend/backendnode.cpp +++ b/src/render/backend/backendnode.cpp @@ -61,7 +61,7 @@ void BackendNode::setRenderer(AbstractRenderer *renderer) m_renderer = renderer; } -void BackendNode::markDirty(BackendNodeDirtySet changes) +void BackendNode::markDirty(AbstractRenderer::BackendNodeDirtySet changes) { Q_ASSERT(m_renderer); m_renderer->markDirty(changes, this); diff --git a/src/render/backend/backendnode_p.h b/src/render/backend/backendnode_p.h index e5e6c7b33..5688c2412 100644 --- a/src/render/backend/backendnode_p.h +++ b/src/render/backend/backendnode_p.h @@ -70,9 +70,7 @@ public: void setRenderer(AbstractRenderer *renderer); protected: - void markDirty(BackendNodeDirtySet changes); - -private: + void markDirty(AbstractRenderer::BackendNodeDirtySet changes); AbstractRenderer *m_renderer; }; diff --git a/src/render/backend/boundingvolumedebug.cpp b/src/render/backend/boundingvolumedebug.cpp index 21073e989..4fa87233d 100644 --- a/src/render/backend/boundingvolumedebug.cpp +++ b/src/render/backend/boundingvolumedebug.cpp @@ -82,7 +82,7 @@ void BoundingVolumeDebug::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) if (propertyName == QByteArrayLiteral("recursive")) { m_recursive = propertyChange->value().toBool(); } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/backend/cameralens.cpp b/src/render/backend/cameralens.cpp index d1a273a99..9b76dfece 100644 --- a/src/render/backend/cameralens.cpp +++ b/src/render/backend/cameralens.cpp @@ -93,7 +93,7 @@ void CameraLens::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) m_enabled = propertyChange->value().toBool(); } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } break; diff --git a/src/render/backend/computejob.cpp b/src/render/backend/computejob.cpp index 6444e271e..983954221 100644 --- a/src/render/backend/computejob.cpp +++ b/src/render/backend/computejob.cpp @@ -40,6 +40,7 @@ #include "computejob_p.h" #include <Qt3DCore/qnode.h> #include <Qt3DCore/qscenepropertychange.h> +#include <Qt3DRender/private/abstractrenderer_p.h> QT_BEGIN_NAMESPACE @@ -65,6 +66,8 @@ void ComputeJob::cleanup() void ComputeJob::updateFromPeer(Qt3DCore::QNode *peer) { m_enabled = peer->isEnabled(); + if (m_renderer != Q_NULLPTR) + BackendNode::markDirty(AbstractRenderer::ComputeDirty); } void ComputeJob::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) @@ -73,7 +76,7 @@ void ComputeJob::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) if (e->type() == Qt3DCore::NodeUpdated) { if (propertyChange->propertyName() == QByteArrayLiteral("enabled")) m_enabled = propertyChange->value().toBool(); - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/backend/entity.cpp b/src/render/backend/entity.cpp index b7edb7c25..f20def97a 100644 --- a/src/render/backend/entity.cpp +++ b/src/render/backend/entity.cpp @@ -205,7 +205,7 @@ void Entity::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) default: break; } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } void Entity::dump() const diff --git a/src/render/backend/layer.cpp b/src/render/backend/layer.cpp index c1a0a7d0b..e2f5d9de5 100644 --- a/src/render/backend/layer.cpp +++ b/src/render/backend/layer.cpp @@ -91,7 +91,7 @@ void Layer::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) } else if (propertyChange->propertyName() == QByteArrayLiteral("enabled")) { m_enabled = propertyChange->value().toBool(); } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } // namespace Render diff --git a/src/render/backend/renderattachment.cpp b/src/render/backend/renderattachment.cpp index fd2b43926..bcba92f50 100644 --- a/src/render/backend/renderattachment.cpp +++ b/src/render/backend/renderattachment.cpp @@ -110,7 +110,7 @@ void RenderAttachment::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) else if (propertyChange->propertyName() == QByteArrayLiteral("face")) { m_attachmentData.m_face = static_cast<QRenderAttachment::CubeMapFace>(propertyChange->value().toInt()); } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/backend/rendercommand_p.h b/src/render/backend/rendercommand_p.h index 4d4c9b97d..300f4daf2 100644 --- a/src/render/backend/rendercommand_p.h +++ b/src/render/backend/rendercommand_p.h @@ -86,7 +86,7 @@ public: // A QAttribute pack might be interesting // This is a temporary fix in the meantime, to remove the hacked methods in Technique - QHash<QString, QString> m_parameterAttributeToShaderNames; + QVector<int> m_attributes; float m_depth; int m_changeCost; diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp index d94d83151..a519db502 100644 --- a/src/render/backend/renderer.cpp +++ b/src/render/backend/renderer.cpp @@ -44,7 +44,6 @@ #include <Qt3DRender/qmaterial.h> #include <Qt3DRender/qmesh.h> -#include <Qt3DRender/qparametermapping.h> #include <Qt3DRender/qrenderpass.h> #include <Qt3DRender/qshaderprogram.h> #include <Qt3DRender/qtechnique.h> @@ -220,17 +219,14 @@ void Renderer::buildDefaultTechnique() m_defaultTechnique->addPass(basicPass); - QParameter* ka = new QParameter(QStringLiteral("ambient"), QVector3D(0.2f, 0.2f, 0.2f)); + QParameter* ka = new QParameter(QStringLiteral("ka"), QVector3D(0.2f, 0.2f, 0.2f)); m_defaultTechnique->addParameter(ka); - basicPass->addBinding(new QParameterMapping(QStringLiteral("ambient"), QStringLiteral("ka"), QParameterMapping::Uniform)); - QParameter* kd = new QParameter(QStringLiteral("diffuse"), QVector3D(1.0f, 0.5f, 0.0f)); + QParameter* kd = new QParameter(QStringLiteral("kd"), QVector3D(1.0f, 0.5f, 0.0f)); m_defaultTechnique->addParameter(kd); - basicPass->addBinding(new QParameterMapping(QStringLiteral("diffuse"), QStringLiteral("kd"), QParameterMapping::Uniform)); - QParameter* ks = new QParameter(QStringLiteral("specular"), QVector3D(0.01f, 0.01f, 0.01f)); + QParameter* ks = new QParameter(QStringLiteral("ks"), QVector3D(0.01f, 0.01f, 0.01f)); m_defaultTechnique->addParameter(ks); - basicPass->addBinding(new QParameterMapping(QStringLiteral("specular"), QStringLiteral("ks"), QParameterMapping::Uniform)); m_defaultTechnique->addParameter(new QParameter(QStringLiteral("shininess"), 150.0f)); } @@ -600,7 +596,13 @@ bool Renderer::submitRenderViews() const int renderViewsCount = renderViews.size(); quint64 frameElapsed = queueElapsed; m_lastFrameCorrect.store(1); // everything fine until now..... - m_changeSet = 0; // mark "not dirty" + + // Clear all dirty flags but Compute so that + // we still render every frame when a compute shader is used in a scene + BackendNodeDirtySet changesToUnset = m_changeSet; + if (changesToUnset.testFlag(Renderer::ComputeDirty)) + changesToUnset.setFlag(Renderer::ComputeDirty, false); + clearDirtyBits(changesToUnset); // Early return if there's actually nothing to render if (renderViewsCount <= 0) @@ -716,11 +718,16 @@ void Renderer::markDirty(BackendNodeDirtySet changes, BackendNode *node) m_changeSet |= changes; } -BackendNodeDirtySet Renderer::dirtyBits() +Renderer::BackendNodeDirtySet Renderer::dirtyBits() { return m_changeSet; } +void Renderer::clearDirtyBits(BackendNodeDirtySet changes) +{ + m_changeSet &= ~changes; +} + bool Renderer::shouldRender() { // Only render if something changed during the last frame, or the last frame @@ -839,6 +846,9 @@ void Renderer::performCompute(const RenderView *rv, RenderCommand *command) workGroups[1], workGroups[2]); + // HACK: Reset the compute flag to dirty + m_changeSet |= AbstractRenderer::ComputeDirty; + #if defined(QT3D_RENDER_ASPECT_OPENGL_DEBUG) int err = m_graphicsContext->openGLContext()->functions()->glGetError(); if (err) @@ -909,7 +919,6 @@ bool Renderer::executeCommands(const RenderView *rv) Shader *shader = m_nodesManager->data<Shader, ShaderManager>(command->m_shader); if (shader == Q_NULLPTR) { shader = m_defaultRenderShader; - command->m_parameterAttributeToShaderNames = m_defaultParameterToGLSLAttributeNames; command->m_parameterPack = m_defaultUniformPack; } @@ -941,7 +950,7 @@ bool Renderer::executeCommands(const RenderView *rv) if (needsToBindVAO && vao != Q_NULLPTR) vao->bind(); - if (!command->m_parameterAttributeToShaderNames.isEmpty()) { + if (!command->m_attributes.isEmpty()) { // Update or set Attributes and Buffers for the given rGeometry and Command indexAttribute = updateBuffersAndAttributes(rGeometry, command, primitiveCount, requiresVAOUpdate); specified = true; @@ -1030,9 +1039,9 @@ Attribute *Renderer::updateBuffersAndAttributes(Geometry *geometry, RenderComman m_graphicsContext->specifyIndices(buffer); indexAttribute = attribute; // Vertex Attribute - } else if (command->m_parameterAttributeToShaderNames.contains(attribute->name())) { + } else if (command->m_attributes.contains(attribute->nameId())) { if (attribute->isDirty() || forceUpdate) - m_graphicsContext->specifyAttribute(attribute, buffer, command->m_parameterAttributeToShaderNames.value(attribute->name())); + m_graphicsContext->specifyAttribute(attribute, buffer, attribute->name()); estimatedCount = qMax(attribute->count(), estimatedCount); } diff --git a/src/render/backend/renderer_p.h b/src/render/backend/renderer_p.h index f68d8f9db..6933c4ead 100644 --- a/src/render/backend/renderer_p.h +++ b/src/render/backend/renderer_p.h @@ -154,6 +154,9 @@ public: void markDirty(BackendNodeDirtySet changes, BackendNode *node) Q_DECL_OVERRIDE; BackendNodeDirtySet dirtyBits() Q_DECL_OVERRIDE; + void clearDirtyBits(BackendNodeDirtySet changes) Q_DECL_OVERRIDE; + + bool shouldRender() Q_DECL_OVERRIDE; void skipNextFrame() Q_DECL_OVERRIDE; @@ -227,7 +230,6 @@ private: // is missing a shader Shader *m_defaultRenderShader; RenderStateSet *m_defaultRenderStateSet; - QHash<QString, QString> m_defaultParameterToGLSLAttributeNames; ShaderParameterPack m_defaultUniformPack; QScopedPointer<GraphicsContext> m_graphicsContext; diff --git a/src/render/backend/renderersettings.cpp b/src/render/backend/renderersettings.cpp index 56e705bd7..db6bfc55a 100644 --- a/src/render/backend/renderersettings.cpp +++ b/src/render/backend/renderersettings.cpp @@ -75,7 +75,7 @@ void RendererSettings::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) m_pickMethod = propertyChange->value().value<QRendererSettings::PickMethod>(); else if (propertyChange->propertyName() == QByteArrayLiteral("pickResult")) m_pickResultMode = propertyChange->value().value<QRendererSettings::PickResultMode>(); - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/backend/rendertarget.cpp b/src/render/backend/rendertarget.cpp index 2d7130c23..0aa149eb1 100644 --- a/src/render/backend/rendertarget.cpp +++ b/src/render/backend/rendertarget.cpp @@ -90,7 +90,7 @@ void RenderTarget::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) appendRenderAttachment(propertyChange->value().value<QNodeId>()); else if (e->type() == NodeRemoved && propertyChange->propertyName() == QByteArrayLiteral("attachment")) removeRenderAttachment(propertyChange->value().value<QNodeId>()); - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } // namespace Render diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp index a2b0d7eca..a44cee13d 100644 --- a/src/render/backend/renderview.cpp +++ b/src/render/backend/renderview.cpp @@ -67,7 +67,6 @@ #include <Qt3DRender/private/geometryrenderermanager_p.h> #include <Qt3DRender/private/stringtoint_p.h> -#include <Qt3DRender/qparametermapping.h> #include <Qt3DCore/qentity.h> #include <QtGui/qsurface.h> #include <algorithm> @@ -133,7 +132,7 @@ bool isEntityFrustumCulled(const Entity *entity, const Plane *planes) bool wasInitialized = false; RenderView::StandardUniformsPFuncsHash RenderView::ms_standardUniformSetters; -QStringList RenderView::ms_standardAttributesNames = RenderView::initializeStandardAttributeNames(); +QStringList RenderView::m_standardAttributesNames = RenderView::initializeStandardAttributeNames(); @@ -817,7 +816,7 @@ void RenderView::setShaderAndUniforms(RenderCommand *command, RenderPass *rPass, const QVector<int> uniformNamesIds = shader->uniformsNamesIds(); const QVector<int> uniformBlockNamesIds = shader->uniformBlockNamesIds(); const QVector<int> shaderStorageBlockNamesIds = shader->storageBlockNamesIds(); - const QVector<QString> attributeNames = shader->attributesNames(); + const QVector<int> attributeNamesIds = shader->attributeNamesIds(); // Set fragData Name and index // Later on we might want to relink the shader if attachments have changed @@ -830,7 +829,8 @@ void RenderView::setShaderAndUniforms(RenderCommand *command, RenderPass *rPass, } } - if (!uniformNamesIds.isEmpty() || !attributeNames.isEmpty() || !shaderStorageBlockNamesIds.isEmpty()) { + if (!uniformNamesIds.isEmpty() || !attributeNamesIds.isEmpty() || + !shaderStorageBlockNamesIds.isEmpty() || !attributeNamesIds.isEmpty()) { // Set default standard uniforms without bindings Q_FOREACH (const int uniformNameId, uniformNamesIds) { @@ -839,56 +839,8 @@ void RenderView::setShaderAndUniforms(RenderCommand *command, RenderPass *rPass, } // Set default attributes - Q_FOREACH (const QString &attributeName, attributeNames) { - if (ms_standardAttributesNames.contains(attributeName)) - command->m_parameterAttributeToShaderNames.insert(attributeName, attributeName); - } - - // Set uniforms and attributes explicitly binded - Q_FOREACH (const ParameterMapping &binding, rPass->bindings()) { - const ParameterInfoList::const_iterator it = findParamInfo(¶meters, binding.parameterNameId()); - - if (it == parameters.end()) { - // A Parameters wasn't found with the name binding.parameterName - // -> we need to use the binding.shaderVariableName - switch (binding.bindingType()) { - - case QParameterMapping::Attribute: - if (attributeNames.contains(binding.shaderVariableName())) { - command->m_parameterAttributeToShaderNames.insert(binding.parameterName(), binding.shaderVariableName()); - break; - } - case QParameterMapping::StandardUniform: - if (uniformNamesIds.contains(binding.shaderVariableNameId()) - && ms_standardUniformSetters.contains(binding.parameterNameId())) { - setStandardUniformValue(command->m_parameterPack, binding.shaderVariableNameId(), binding.parameterNameId(), worldTransform); - break; - } - - case QParameterMapping::FragmentOutput: - if (fragOutputs.contains(binding.parameterName())) { - fragOutputs.insert(binding.shaderVariableName(), fragOutputs.take(binding.parameterName())); - break; - } - - case QParameterMapping::UniformBufferObject: - if (uniformBlockNamesIds.contains(binding.parameterNameId())) { - setUniformBlockValue(command->m_parameterPack, shader, shader->uniformBlockForBlockNameId(it->nameId), it->value); - break; - } - - case QParameterMapping::ShaderStorageBufferObject: - if (shaderStorageBlockNamesIds.contains(binding.parameterNameId())) { - setShaderStorageValue(command->m_parameterPack, shader, shader->storageBlockForBlockNameId(it->nameId), it->value); - break; - } - - default: - qCWarning(Render::Backend) << Q_FUNC_INFO << "Trying to bind a Parameter that hasn't been defined " << binding.parameterName(); - break; - } - } - } + Q_FOREACH (const int attributeNameId, attributeNamesIds) + command->m_attributes.push_back(attributeNameId); // Parameters remaining could be // -> uniform scalar / vector @@ -896,30 +848,27 @@ void RenderView::setShaderAndUniforms(RenderCommand *command, RenderPass *rPass, // -> uniform block / array (4.3) // -> ssbo block / array (4.3) - if ((!uniformNamesIds.isEmpty() || !uniformBlockNamesIds.isEmpty() || !shaderStorageBlockNamesIds.isEmpty()) - && !parameters.isEmpty()) { - ParameterInfoList::const_iterator it = parameters.cbegin(); - const ParameterInfoList::const_iterator parametersEnd = parameters.cend(); - - while (it != parametersEnd) { - if (uniformNamesIds.contains(it->nameId)) { // Parameter is a regular uniform - setUniformValue(command->m_parameterPack, it->nameId, it->value); - } else if (uniformBlockNamesIds.indexOf(it->nameId) != -1) { // Parameter is a uniform block - setUniformBlockValue(command->m_parameterPack, shader, shader->uniformBlockForBlockNameId(it->nameId), it->value); - } else if (shaderStorageBlockNamesIds.indexOf(it->nameId) != -1) { // Parameters is a SSBO - setShaderStorageValue(command->m_parameterPack, shader, shader->storageBlockForBlockNameId(it->nameId), it->value); - } else { // Parameter is a struct - const QVariant &v = it->value; - ShaderData *shaderData = Q_NULLPTR; - if (static_cast<QMetaType::Type>(v.userType()) == qNodeIdTypeId && - (shaderData = m_manager->shaderDataManager()->lookupResource(variant_value<Qt3DCore::QNodeId>(v))) != Q_NULLPTR) { - // Try to check if we have a struct or array matching a QShaderData parameter - setDefaultUniformBlockShaderDataValue(command->m_parameterPack, shader, shaderData, StringToInt::lookupString(it->nameId)); - } - // Otherwise: param unused by current shader + ParameterInfoList::const_iterator it = parameters.cbegin(); + const ParameterInfoList::const_iterator parametersEnd = parameters.cend(); + + while (it != parametersEnd) { + if (uniformNamesIds.contains(it->nameId)) { // Parameter is a regular uniform + setUniformValue(command->m_parameterPack, it->nameId, it->value); + } else if (uniformBlockNamesIds.indexOf(it->nameId) != -1) { // Parameter is a uniform block + setUniformBlockValue(command->m_parameterPack, shader, shader->uniformBlockForBlockNameId(it->nameId), it->value); + } else if (shaderStorageBlockNamesIds.indexOf(it->nameId) != -1) { // Parameters is a SSBO + setShaderStorageValue(command->m_parameterPack, shader, shader->storageBlockForBlockNameId(it->nameId), it->value); + } else { // Parameter is a struct + const QVariant &v = it->value; + ShaderData *shaderData = Q_NULLPTR; + if (static_cast<QMetaType::Type>(v.userType()) == qNodeIdTypeId && + (shaderData = m_manager->shaderDataManager()->lookupResource(variant_value<Qt3DCore::QNodeId>(v))) != Q_NULLPTR) { + // Try to check if we have a struct or array matching a QShaderData parameter + setDefaultUniformBlockShaderDataValue(command->m_parameterPack, shader, shaderData, StringToInt::lookupString(it->nameId)); } - ++it; + // Otherwise: param unused by current shader } + ++it; } // Lights diff --git a/src/render/backend/renderview_p.h b/src/render/backend/renderview_p.h index c03ee3707..32ba72d4b 100644 --- a/src/render/backend/renderview_p.h +++ b/src/render/backend/renderview_p.h @@ -306,7 +306,7 @@ private: typedef QHash<int, QUniformValue (RenderView::*)(const QMatrix4x4& model) const> StandardUniformsPFuncsHash; static StandardUniformsPFuncsHash ms_standardUniformSetters; static StandardUniformsPFuncsHash initializeStandardUniformSetters(); - static QStringList ms_standardAttributesNames; + static QStringList m_standardAttributesNames; static QStringList initializeStandardAttributeNames(); QUniformValue modelMatrix(const QMatrix4x4& model) const; diff --git a/src/render/backend/shadervariables_p.h b/src/render/backend/shadervariables_p.h index 9fd7efa02..09088df26 100644 --- a/src/render/backend/shadervariables_p.h +++ b/src/render/backend/shadervariables_p.h @@ -62,7 +62,15 @@ namespace Render { struct ShaderAttribute { + ShaderAttribute() + : m_nameId(-1) + , m_type(0) + , m_size(0) + , m_location(-1) + {} + QString m_name; + int m_nameId; GLenum m_type; int m_size; int m_location; @@ -71,7 +79,8 @@ struct ShaderAttribute struct ShaderUniform { ShaderUniform() - : m_size(0) + : m_nameId(-1) + , m_size(0) , m_offset(-1) , m_location(-1) , m_blockIndex(-1) @@ -93,7 +102,8 @@ struct ShaderUniform struct ShaderUniformBlock { ShaderUniformBlock() - : m_index(-1) + : m_nameId(-1) + , m_index(-1) , m_binding(-1) , m_activeUniformsCount(0) , m_size(0) diff --git a/src/render/backend/transform.cpp b/src/render/backend/transform.cpp index 96fe7e991..42514493e 100644 --- a/src/render/backend/transform.cpp +++ b/src/render/backend/transform.cpp @@ -93,7 +93,7 @@ void Transform::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) } } - markDirty(BackendNodeDirtyFlag::Transform); + markDirty(AbstractRenderer::TransformDirty); } void Transform::updateMatrix() diff --git a/src/render/framegraph/cameraselectornode.cpp b/src/render/framegraph/cameraselectornode.cpp index c2327cdc6..e686eb140 100644 --- a/src/render/framegraph/cameraselectornode.cpp +++ b/src/render/framegraph/cameraselectornode.cpp @@ -75,7 +75,7 @@ void CameraSelector::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) m_cameraUuid = propertyChange->value().value<QNodeId>(); else if (propertyChange->propertyName() == QByteArrayLiteral("enabled")) setEnabled(propertyChange->value().toBool()); - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/framegraph/clearbuffer.cpp b/src/render/framegraph/clearbuffer.cpp index 2f9e4b30b..d74a2d383 100644 --- a/src/render/framegraph/clearbuffer.cpp +++ b/src/render/framegraph/clearbuffer.cpp @@ -68,7 +68,7 @@ void ClearBuffer::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) m_type = static_cast<QClearBuffer::BufferType>(propertyChange->value().toInt()); else if (propertyChange->propertyName() == QByteArrayLiteral("enabled")) setEnabled(propertyChange->value().toBool()); - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/framegraph/dispatchcompute.cpp b/src/render/framegraph/dispatchcompute.cpp index f5ec2bcbc..2e85b876b 100644 --- a/src/render/framegraph/dispatchcompute.cpp +++ b/src/render/framegraph/dispatchcompute.cpp @@ -85,7 +85,7 @@ void DispatchCompute::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) m_workGroups[2] = propertyChange->value().toInt(); else if (propertyChange->propertyName() == QByteArrayLiteral("enabled")) setEnabled(propertyChange->value().toBool()); - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/framegraph/frustumculling.cpp b/src/render/framegraph/frustumculling.cpp index 9037f81d2..07c11ffe8 100644 --- a/src/render/framegraph/frustumculling.cpp +++ b/src/render/framegraph/frustumculling.cpp @@ -75,7 +75,7 @@ void FrustumCulling::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) break; } } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } // namespace Render diff --git a/src/render/framegraph/layerfilternode.cpp b/src/render/framegraph/layerfilternode.cpp index 8f7fe3d75..50ea07f19 100644 --- a/src/render/framegraph/layerfilternode.cpp +++ b/src/render/framegraph/layerfilternode.cpp @@ -69,7 +69,7 @@ void LayerFilterNode::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) setLayers(propertyChange->value().value<QStringList>()); else if (propertyChange->propertyName() == QByteArrayLiteral("enabled")) setEnabled(propertyChange->value().toBool()); - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/framegraph/lighting.cpp b/src/render/framegraph/lighting.cpp index d4823212d..d18614b21 100644 --- a/src/render/framegraph/lighting.cpp +++ b/src/render/framegraph/lighting.cpp @@ -71,7 +71,7 @@ void Lighting::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) default: break; } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } // namespace Render diff --git a/src/render/framegraph/nodraw.cpp b/src/render/framegraph/nodraw.cpp index d7bd33637..56bd43fbb 100644 --- a/src/render/framegraph/nodraw.cpp +++ b/src/render/framegraph/nodraw.cpp @@ -71,7 +71,7 @@ void NoDraw::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) case NodeUpdated: { if (propertyChange->propertyName() == QByteArrayLiteral("enabled")) setEnabled(propertyChange->value().toBool()); - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); break; default: diff --git a/src/render/framegraph/renderpassfilternode.cpp b/src/render/framegraph/renderpassfilternode.cpp index d1a3fab80..eede0e7d7 100644 --- a/src/render/framegraph/renderpassfilternode.cpp +++ b/src/render/framegraph/renderpassfilternode.cpp @@ -116,7 +116,7 @@ void RenderPassFilter::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) default: break; } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } // namespace Render diff --git a/src/render/framegraph/rendersurfaceselector.cpp b/src/render/framegraph/rendersurfaceselector.cpp index ceee513d8..785054119 100644 --- a/src/render/framegraph/rendersurfaceselector.cpp +++ b/src/render/framegraph/rendersurfaceselector.cpp @@ -74,7 +74,7 @@ void RenderSurfaceSelector::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) m_surface = propertyChange->value().value<QSurface *>(); else if (propertyChange->propertyName() == QByteArrayLiteral("enabled")) setEnabled(propertyChange->value().toBool()); - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/framegraph/rendertargetselectornode.cpp b/src/render/framegraph/rendertargetselectornode.cpp index d5df14df5..9ff8edf03 100644 --- a/src/render/framegraph/rendertargetselectornode.cpp +++ b/src/render/framegraph/rendertargetselectornode.cpp @@ -79,7 +79,7 @@ void RenderTargetSelector::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) setEnabled(propertyChange->value().toBool()); else if (propertyChange->propertyName() == QByteArrayLiteral("drawBuffers")) m_drawBuffers = propertyChange->value().value<QList<Qt3DRender::QRenderAttachment::RenderAttachmentType> >(); - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/framegraph/sortcriterion.cpp b/src/render/framegraph/sortcriterion.cpp index 9b31e71cc..8fe31bbf1 100644 --- a/src/render/framegraph/sortcriterion.cpp +++ b/src/render/framegraph/sortcriterion.cpp @@ -75,7 +75,7 @@ void SortCriterion::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) if (e->type() == NodeUpdated && propertyChange->propertyName() == QByteArrayLiteral("sort")) { m_type = static_cast<QSortCriterion::SortType>(propertyChange->value().toInt()); } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } // namespace Render diff --git a/src/render/framegraph/sortmethod.cpp b/src/render/framegraph/sortmethod.cpp index 7ee462e6f..7209b2e93 100644 --- a/src/render/framegraph/sortmethod.cpp +++ b/src/render/framegraph/sortmethod.cpp @@ -76,7 +76,7 @@ void SortMethod::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) } else if (propertyChange->propertyName() == QByteArrayLiteral("enabled") && e->type() == NodeUpdated) { setEnabled(propertyChange->value().toBool()); } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } QList<QNodeId> SortMethod::criteria() const diff --git a/src/render/framegraph/statesetnode.cpp b/src/render/framegraph/statesetnode.cpp index b1c713b51..90baf5773 100644 --- a/src/render/framegraph/statesetnode.cpp +++ b/src/render/framegraph/statesetnode.cpp @@ -90,7 +90,7 @@ void StateSetNode::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) default: break; } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } // namespace Render diff --git a/src/render/framegraph/techniquefilternode.cpp b/src/render/framegraph/techniquefilternode.cpp index bd567d4ac..4acbde6fc 100644 --- a/src/render/framegraph/techniquefilternode.cpp +++ b/src/render/framegraph/techniquefilternode.cpp @@ -117,7 +117,7 @@ void TechniqueFilter::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) default: break; } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } // namespace Render diff --git a/src/render/framegraph/viewportnode.cpp b/src/render/framegraph/viewportnode.cpp index 9fa1684b0..e08bcceaa 100644 --- a/src/render/framegraph/viewportnode.cpp +++ b/src/render/framegraph/viewportnode.cpp @@ -126,7 +126,7 @@ void ViewportNode::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) } else if (propertyChange->propertyName() == QByteArrayLiteral("enabled")) { setEnabled(propertyChange->value().toBool()); } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp index 464ac56ed..9679dd785 100644 --- a/src/render/frontend/qrenderaspect.cpp +++ b/src/render/frontend/qrenderaspect.cpp @@ -54,7 +54,6 @@ #include <Qt3DRender/qmaterial.h> #include <Qt3DRender/qmesh.h> #include <Qt3DRender/qparameter.h> -#include <Qt3DRender/qparametermapping.h> #include <Qt3DRender/qrenderpassfilter.h> #include <Qt3DRender/qrendertargetselector.h> #include <Qt3DRender/qtechniquefilter.h> diff --git a/src/render/geometry/attribute.cpp b/src/render/geometry/attribute.cpp index 9cf995b0d..c49757d22 100644 --- a/src/render/geometry/attribute.cpp +++ b/src/render/geometry/attribute.cpp @@ -40,6 +40,7 @@ #include "attribute_p.h" #include <Qt3DCore/qscenepropertychange.h> #include <Qt3DRender/qbuffer.h> +#include <Qt3DRender/private/stringtoint_p.h> QT_BEGIN_NAMESPACE @@ -50,6 +51,7 @@ namespace Render { Attribute::Attribute() : BackendNode(ReadOnly) + , m_nameId(0) , m_dataType(QAttribute::Float) , m_dataSize(1) , m_count(0) @@ -77,6 +79,7 @@ void Attribute::cleanup() m_bufferId = Qt3DCore::QNodeId(); m_name.clear(); m_attributeDirty = false; + m_nameId = 0; } void Attribute::updateFromPeer(Qt3DCore::QNode *peer) @@ -91,6 +94,7 @@ void Attribute::updateFromPeer(Qt3DCore::QNode *peer) m_divisor = attribute->divisor(); m_attributeType = attribute->attributeType(); m_name = attribute->name(); + m_nameId = StringToInt::lookupId(m_name); if (attribute->buffer()) m_bufferId = attribute->buffer()->id(); m_attributeDirty = true; @@ -107,6 +111,7 @@ void Attribute::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) case NodeUpdated: { if (propertyName == QByteArrayLiteral("name")) { m_name = propertyChange->value().value<QString>(); + m_nameId = StringToInt::lookupId(m_name); m_attributeDirty = true; } else if (propertyName == QByteArrayLiteral("dataType")) { m_dataType = static_cast<QAttribute::DataType>(propertyChange->value().value<int>()); @@ -133,7 +138,7 @@ void Attribute::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) m_bufferId = propertyChange->value().value<QNodeId>(); m_attributeDirty = true; } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); break; } diff --git a/src/render/geometry/attribute_p.h b/src/render/geometry/attribute_p.h index dcf321be8..10fda4542 100644 --- a/src/render/geometry/attribute_p.h +++ b/src/render/geometry/attribute_p.h @@ -73,6 +73,7 @@ public: inline Qt3DCore::QNodeId bufferId() const { return m_bufferId; } inline QString name() const { return m_name; } + inline int nameId() const { return m_nameId; } inline QAttribute::DataType dataType() const { return m_dataType; } inline uint dataSize() const { return m_dataSize; } inline uint count() const { return m_count; } @@ -86,6 +87,7 @@ public: private: Qt3DCore::QNodeId m_bufferId; QString m_name; + int m_nameId; QAttribute::DataType m_dataType; uint m_dataSize; uint m_count; diff --git a/src/render/geometry/buffer.cpp b/src/render/geometry/buffer.cpp index 92217ff1e..f5f0050bb 100644 --- a/src/render/geometry/buffer.cpp +++ b/src/render/geometry/buffer.cpp @@ -135,7 +135,7 @@ void Buffer::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) } else if (propertyName == QByteArrayLiteral("sync")) { m_sync = propertyChange->value().toBool(); } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/geometry/geometry.cpp b/src/render/geometry/geometry.cpp index 447313771..32d4e6aef 100644 --- a/src/render/geometry/geometry.cpp +++ b/src/render/geometry/geometry.cpp @@ -120,7 +120,7 @@ void Geometry::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) default: break; } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } void Geometry::unsetDirty() diff --git a/src/render/geometry/geometryrenderer.cpp b/src/render/geometry/geometryrenderer.cpp index ff2fa149c..5edc4ea79 100644 --- a/src/render/geometry/geometryrenderer.cpp +++ b/src/render/geometry/geometryrenderer.cpp @@ -174,7 +174,7 @@ void GeometryRenderer::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) break; } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); // Add to dirty list in manager } diff --git a/src/render/io/scene.cpp b/src/render/io/scene.cpp index d4f9bb010..333698500 100644 --- a/src/render/io/scene.cpp +++ b/src/render/io/scene.cpp @@ -74,7 +74,7 @@ void Scene::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) m_source = propertyChange->value().toUrl(); m_sceneManager->addSceneData(m_source, peerUuid()); } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } QUrl Scene::source() const diff --git a/src/render/materialsystem/annotation.cpp b/src/render/materialsystem/annotation.cpp index b0ceeaf5c..60796e94d 100644 --- a/src/render/materialsystem/annotation.cpp +++ b/src/render/materialsystem/annotation.cpp @@ -87,7 +87,7 @@ void Annotation::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) else if (propertyChange->propertyName() == QByteArrayLiteral("name")) m_name = propertyChange->value().toString(); - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } bool Annotation::operator ==(const Annotation &other) diff --git a/src/render/materialsystem/effect.cpp b/src/render/materialsystem/effect.cpp index b31cd9485..2e3ad3e02 100644 --- a/src/render/materialsystem/effect.cpp +++ b/src/render/materialsystem/effect.cpp @@ -105,7 +105,7 @@ void Effect::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) break; } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } void Effect::appendRenderTechnique(Qt3DCore::QNodeId technique) diff --git a/src/render/materialsystem/material.cpp b/src/render/materialsystem/material.cpp index b93422015..ca111e012 100644 --- a/src/render/materialsystem/material.cpp +++ b/src/render/materialsystem/material.cpp @@ -113,7 +113,7 @@ void Material::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) default: break; } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } QList<Qt3DCore::QNodeId> Material::parameters() const diff --git a/src/render/materialsystem/materialsystem.pri b/src/render/materialsystem/materialsystem.pri index 53f7e94f7..06b2caaae 100644 --- a/src/render/materialsystem/materialsystem.pri +++ b/src/render/materialsystem/materialsystem.pri @@ -5,7 +5,6 @@ HEADERS += \ $$PWD/effect_p.h \ $$PWD/material_p.h \ $$PWD/parameter_p.h \ - $$PWD/parametermapping_p.h \ $$PWD/qannotation.h \ $$PWD/qannotation_p.h \ $$PWD/qeffect.h \ @@ -14,8 +13,6 @@ HEADERS += \ $$PWD/qmaterial_p.h \ $$PWD/qparameter.h \ $$PWD/qparameter_p.h \ - $$PWD/qparametermapping.h \ - $$PWD/qparametermapping_p.h \ $$PWD/qrenderpass_p.h \ $$PWD/qrenderpass.h \ $$PWD/qshaderdata.h \ @@ -35,12 +32,10 @@ SOURCES += \ $$PWD/effect.cpp \ $$PWD/material.cpp \ $$PWD/parameter.cpp \ - $$PWD/parametermapping.cpp \ $$PWD/qannotation.cpp \ $$PWD/qeffect.cpp \ $$PWD/qmaterial.cpp \ $$PWD/qparameter.cpp \ - $$PWD/qparametermapping.cpp \ $$PWD/qrenderpass.cpp \ $$PWD/qshaderdata.cpp \ $$PWD/qshaderprogram.cpp \ diff --git a/src/render/materialsystem/parameter.cpp b/src/render/materialsystem/parameter.cpp index 58e5bb6bd..d0739bd20 100644 --- a/src/render/materialsystem/parameter.cpp +++ b/src/render/materialsystem/parameter.cpp @@ -81,7 +81,7 @@ void Parameter::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) } else if (propertyChange->propertyName() == QByteArrayLiteral("value")) { m_value = propertyChange->value(); } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/materialsystem/parametermapping.cpp b/src/render/materialsystem/parametermapping.cpp deleted file mode 100644 index 574025030..000000000 --- a/src/render/materialsystem/parametermapping.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt3D module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "parametermapping_p.h" -#include <Qt3DRender/private/stringtoint_p.h> - -QT_BEGIN_NAMESPACE - -namespace Qt3DRender { -namespace Render { - -ParameterMapping::ParameterMapping() - : m_bindingType(QParameterMapping::Uniform) - , m_parameterNameId(-1) - , m_shaderVariableNameId(-1) -{ -} - -ParameterMapping::ParameterMapping(QParameterMapping *mapping) - : m_id(mapping ? mapping->id() : Qt3DCore::QNodeId()) - , m_parameterName(mapping ? mapping->parameterName() : QString()) - , m_shaderVariableName(mapping ? mapping->shaderVariableName() : QString()) - , m_parameterNameId(StringToInt::lookupId(m_parameterName)) - , m_shaderVariableNameId(StringToInt::lookupId(m_shaderVariableName)) - , m_bindingType(mapping ? mapping->bindingType() : QParameterMapping::Uniform) -{ -} - -bool ParameterMapping::isValid() const -{ - return !m_id.isNull(); -} - -Qt3DCore::QNodeId ParameterMapping::id() const -{ - return m_id; -} - -QString ParameterMapping::parameterName() const -{ - return m_parameterName; -} - -QString ParameterMapping::shaderVariableName() const -{ - return m_shaderVariableName; -} - -int ParameterMapping::parameterNameId() const -{ - return m_parameterNameId; -} - -int ParameterMapping::shaderVariableNameId() const -{ - return m_shaderVariableNameId; -} - -QParameterMapping::Binding ParameterMapping::bindingType() const -{ - return m_bindingType; -} - -} // namespace Render -} // namespace Qt3DRender - -QT_END_NAMESPACE diff --git a/src/render/materialsystem/parametermapping_p.h b/src/render/materialsystem/parametermapping_p.h deleted file mode 100644 index 975fed18e..000000000 --- a/src/render/materialsystem/parametermapping_p.h +++ /dev/null @@ -1,92 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt3D module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QT3DRENDER_RENDER_PARAMETERMAPPING_P_H -#define QT3DRENDER_RENDER_PARAMETERMAPPING_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of other Qt classes. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include <Qt3DRender/qparametermapping.h> - -QT_BEGIN_NAMESPACE - -namespace Qt3DRender { - -namespace Render { - -class Q_AUTOTEST_EXPORT ParameterMapping -{ -public: - ParameterMapping(); - ParameterMapping(QParameterMapping *mapping); - - bool isValid() const; - - Qt3DCore::QNodeId id() const; - QString parameterName() const; - QString shaderVariableName() const; - int parameterNameId() const; - int shaderVariableNameId() const; - QParameterMapping::Binding bindingType() const; - -private: - Qt3DCore::QNodeId m_id; - QString m_parameterName; - QString m_shaderVariableName; - int m_parameterNameId; - int m_shaderVariableNameId; - QParameterMapping::Binding m_bindingType; -}; - -} // namespace Render - -} // namespace Qt3DRender - -QT_END_NAMESPACE - -#endif // QT3DRENDER_RENDER_PARAMETERMAPPING_P_H diff --git a/src/render/materialsystem/qparametermapping.cpp b/src/render/materialsystem/qparametermapping.cpp deleted file mode 100644 index eeaa8a621..000000000 --- a/src/render/materialsystem/qparametermapping.cpp +++ /dev/null @@ -1,203 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt3D module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qparametermapping.h" -#include <private/qparametermapping_p.h> - -QT_BEGIN_NAMESPACE - -namespace Qt3DRender { - -QParameterMappingPrivate::QParameterMappingPrivate() - : QNodePrivate() - , m_bindingType(QParameterMapping::Uniform) -{ -} -/*! - \class Qt3DRender::QParameterMapping - \inmodule Qt3DRender - \since 5.5 - \brief The QParameterMapping class provides ... -*/ - -/*! - \qmltype ParameterMapping - \instantiates Qt3DRender::QParameterMapping - \inherits Node - \inqmlmodule Qt3D.Render - \since 5.5 - \brief For ... -*/ - -/*! \fn void Qt3DRender::QParameterMapping::copy(const Qt3DCore::QNode *ref) - Copies the \a ref instance into this one. - */ -void QParameterMapping::copy(const QNode *ref) -{ - QNode::copy(ref); - const QParameterMapping *mapper = static_cast<const QParameterMapping*>(ref); - d_func()->m_parameterName = mapper->d_func()->m_parameterName; - d_func()->m_shaderVariableName = mapper->d_func()->m_shaderVariableName; - d_func()->m_bindingType = mapper->d_func()->m_bindingType; -} - -/*! \fn Qt3DRender::QParameterMapping::QParameterMapping(Qt3DCore::QNode *parent) - Constructs a new QParameterMapping with the specified \a parent. - */ -QParameterMapping::QParameterMapping(QNode *parent) - : QNode(*new QParameterMappingPrivate, parent) -{ -} - -/*! - \enum Qt3DRender::QParameterMapping::Binding - - \value Uniform - \value Attribute - \value StandardUniform - \value FragmentOutput - \value UniformBufferObject - \value ShaderStorageBufferObject -*/ - -/*! \internal */ -QParameterMapping::QParameterMapping(QParameterMappingPrivate &dd, QNode *parent) - : QNode(dd, parent) -{ -} - -/*! - This constructor takes a \a parameterName, a \a shaderParameterName, - a \a bindingType, and a \a parent. - */ -QParameterMapping::QParameterMapping(const QString ¶meterName, const QString &shaderParameterName, QParameterMapping::Binding bindingType, QNode *parent) - : QNode(*new QParameterMappingPrivate, parent) -{ - Q_D(QParameterMapping); - d->m_parameterName = parameterName; - d->m_shaderVariableName = shaderParameterName; - d->m_bindingType = bindingType; -} - -QParameterMapping::~QParameterMapping() -{ - QNode::cleanup(); -} - -/*! - \property Qt3DRender::QParameterMapping::parameterName - -*/ - -/*! - \qmlproperty string Qt3D.Render::ParameterMapping::parameterName - -*/ - -void QParameterMapping::setParameterName(const QString &name) -{ - Q_D(QParameterMapping); - if (d->m_parameterName != name) { - d->m_parameterName = name; - emit parameterNameChanged(name); - } -} - -/*! - \property Qt3DRender::QParameterMapping::shaderVariableName - -*/ - -/*! - \qmlproperty string Qt3D.Render::ParameterMapping::shaderVariableName - -*/ - -void QParameterMapping::setShaderVariableName(const QString &name) -{ - Q_D(QParameterMapping); - if (d->m_shaderVariableName != name) { - d->m_shaderVariableName = name; - emit shaderVariableNameChanged(name); - } -} - -/*! - \property Qt3DRender::QParameterMapping::bindingType - -*/ - -/*! - \qmlproperty BindingType Qt3D.Render::ParameterMapping::bindingType - - \value Uniform - \value Attribute - \value StandardUniform - \value FragmentOutput -*/ -void QParameterMapping::setBindingType(QParameterMapping::Binding type) -{ - Q_D(QParameterMapping); - if (d->m_bindingType != type) { - d->m_bindingType = type; - emit bindingTypeChanged(type); - } -} - -QString QParameterMapping::parameterName() const -{ - Q_D(const QParameterMapping); - return d->m_parameterName; -} - -QString QParameterMapping::shaderVariableName() const -{ - Q_D(const QParameterMapping); - return d->m_shaderVariableName; -} - -QParameterMapping::Binding QParameterMapping::bindingType() const -{ - Q_D(const QParameterMapping); - return d->m_bindingType; -} - -} // namespace Qt3DRender - -QT_END_NAMESPACE diff --git a/src/render/materialsystem/qparametermapping.h b/src/render/materialsystem/qparametermapping.h deleted file mode 100644 index 3b17a4191..000000000 --- a/src/render/materialsystem/qparametermapping.h +++ /dev/null @@ -1,101 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt3D module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QT3DRENDER_QPARAMETERMAPPING_H -#define QT3DRENDER_QPARAMETERMAPPING_H - -#include <Qt3DCore/qnode.h> -#include <Qt3DRender/qt3drender_global.h> - -QT_BEGIN_NAMESPACE - -namespace Qt3DRender { - -class QParameterMappingPrivate; - -class QT3DRENDERSHARED_EXPORT QParameterMapping : public Qt3DCore::QNode -{ - Q_OBJECT - Q_PROPERTY(QString parameterName READ parameterName WRITE setParameterName NOTIFY parameterNameChanged) - Q_PROPERTY(QString shaderVariableName READ shaderVariableName WRITE setShaderVariableName NOTIFY shaderVariableNameChanged) - Q_PROPERTY(Binding bindingType READ bindingType WRITE setBindingType NOTIFY bindingTypeChanged) -public: - enum Binding - { - Uniform = 0, - Attribute, - StandardUniform, - FragmentOutput, - UniformBufferObject, - ShaderStorageBufferObject - }; - Q_ENUM(Binding) - - explicit QParameterMapping(Qt3DCore::QNode *parent = 0); - QParameterMapping(const QString ¶meterName, const QString &shaderParameterName, QParameterMapping::Binding bindingType, Qt3DCore::QNode *parent = 0); - ~QParameterMapping(); - - QString parameterName() const; - QString shaderVariableName() const; - Binding bindingType() const; - -public Q_SLOTS: - void setParameterName(const QString &name); - void setShaderVariableName(const QString &name); - void setBindingType(Binding type); - -Q_SIGNALS: - void parameterNameChanged(const QString ¶meterName); - void shaderVariableNameChanged(const QString &shaderVariableName); - void bindingTypeChanged(Binding bindingType); - -protected: - QParameterMapping(QParameterMappingPrivate &dd, Qt3DCore::QNode *parent = 0); - void copy(const Qt3DCore::QNode *ref) Q_DECL_OVERRIDE; - -private: - Q_DECLARE_PRIVATE(QParameterMapping) - QT3D_CLONEABLE(QParameterMapping) -}; - -} // namespace Qt3DRender - -QT_END_NAMESPACE - -#endif // QT3DRENDER_QPARAMETERBINDER_H diff --git a/src/render/materialsystem/qparametermapping_p.h b/src/render/materialsystem/qparametermapping_p.h deleted file mode 100644 index 2fee05639..000000000 --- a/src/render/materialsystem/qparametermapping_p.h +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt3D module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QT3DRENDER_QPARAMETERMAPPING_P_H -#define QT3DRENDER_QPARAMETERMAPPING_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of other Qt classes. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include <private/qnode_p.h> -#include <Qt3DRender/QParameterMapping> - -QT_BEGIN_NAMESPACE - -namespace Qt3DRender { - -class QParameterMappingPrivate : public Qt3DCore::QNodePrivate -{ -public: - QParameterMappingPrivate(); - - Q_DECLARE_PUBLIC(QParameterMapping) - - QString m_parameterName; - QString m_shaderVariableName; - QParameterMapping::Binding m_bindingType; -}; - -} // namespace Qt3DRender - -QT_END_NAMESPACE - -#endif // QT3DRENDER_QPARAMETERMAPPING_P_H diff --git a/src/render/materialsystem/qrenderpass.cpp b/src/render/materialsystem/qrenderpass.cpp index d62adffe2..5efbafb19 100644 --- a/src/render/materialsystem/qrenderpass.cpp +++ b/src/render/materialsystem/qrenderpass.cpp @@ -42,7 +42,6 @@ #include "qrenderpass_p.h" #include "qparameter.h" #include "qannotation.h" -#include "qparametermapping.h" #include "qscenepropertychange.h" #include "qrenderstate.h" #include "private/qnode_p.h" @@ -67,10 +66,10 @@ void QRenderPass::copy(const QNode *ref) Q_FOREACH (QAnnotation *crit, other->d_func()->m_annotationList) addAnnotation(qobject_cast<QAnnotation *>(QNode::clone(crit))); - Q_FOREACH (QParameterMapping *binding, other->d_func()->m_bindings) - addBinding(qobject_cast<QParameterMapping *>(QNode::clone(binding))); Q_FOREACH (QRenderState *renderState, other->d_func()->m_renderStates) addRenderState(qobject_cast<QRenderState *>(QNode::clone(renderState))); + Q_FOREACH (QParameter *p, other->d_func()->m_parameters) + addParameter(qobject_cast<QParameter *>(QNode::clone(p))); } QRenderPass::QRenderPass(QNode *parent) @@ -183,42 +182,6 @@ QList<QAnnotation *> QRenderPass::annotations() const return d->m_annotationList; } -void QRenderPass::addBinding(QParameterMapping *binding) -{ - Q_D(QRenderPass); - if (!d->m_bindings.contains(binding)) { - d->m_bindings.append(binding); - - if (!binding->parent()) - binding->setParent(this); - - if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); - change->setPropertyName("binding"); - change->setValue(QVariant::fromValue(QNode::clone(binding))); - d->notifyObservers(change); - } - } -} - -void QRenderPass::removeBinding(QParameterMapping *binding) -{ - Q_D(QRenderPass); - if (d->m_changeArbiter != Q_NULLPTR) { - QScenePropertyChangePtr change(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); - change->setPropertyName("binding"); - change->setValue(QVariant::fromValue(binding->id())); - d->notifyObservers(change); - } - d->m_bindings.removeOne(binding); -} - -QList<QParameterMapping *> QRenderPass::bindings() const -{ - Q_D(const QRenderPass); - return d->m_bindings; -} - /*! * Adds a Qt3DCore::QRenderState \a state to the rendering pass. That implies that * when the pass is executed at render time, the globally set render state will diff --git a/src/render/materialsystem/qrenderpass.h b/src/render/materialsystem/qrenderpass.h index a6cffaa3a..9f6ea329c 100644 --- a/src/render/materialsystem/qrenderpass.h +++ b/src/render/materialsystem/qrenderpass.h @@ -81,10 +81,6 @@ public: void removeAnnotation(QAnnotation *criterion); QList<QAnnotation *> annotations() const; - void addBinding(QParameterMapping *binding); - void removeBinding(QParameterMapping *binding); - QList<QParameterMapping *> bindings() const; - void addRenderState(QRenderState *state); void removeRenderState(QRenderState *state); QList<QRenderState *> renderStates() const; diff --git a/src/render/materialsystem/renderpass.cpp b/src/render/materialsystem/renderpass.cpp index ece7972db..ae3022a1c 100644 --- a/src/render/materialsystem/renderpass.cpp +++ b/src/render/materialsystem/renderpass.cpp @@ -40,7 +40,6 @@ #include "renderpass_p.h" #include <Qt3DRender/private/annotation_p.h> -#include <Qt3DRender/qparametermapping.h> #include <Qt3DRender/qrenderstate.h> #include <Qt3DRender/qrenderpass.h> #include <Qt3DRender/qparameter.h> @@ -80,8 +79,6 @@ void RenderPass::updateFromPeer(Qt3DCore::QNode *peer) m_shaderUuid = pass->shaderProgram()->id(); // The RenderPass clones frontend bindings in case the frontend ever removes them // TO DO: We probably need a QParameterMapper manager - Q_FOREACH (QParameterMapping *binding, pass->bindings()) - appendBinding(ParameterMapping(binding)); Q_FOREACH (QAnnotation *c, pass->annotations()) appendAnnotation(c->id()); Q_FOREACH (QRenderState *renderState, pass->renderStates()) @@ -100,8 +97,6 @@ void RenderPass::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) appendAnnotation(propertyChange->value().value<QNodeId>()); } else if (propertyChange->propertyName() == QByteArrayLiteral("shaderProgram")) { m_shaderUuid = propertyChange->value().value<QNodeId>(); - } else if (propertyChange->propertyName() == QByteArrayLiteral("binding")) { - appendBinding(ParameterMapping(propertyChange->value().value<QParameterMapping *>())); } else if (propertyChange->propertyName() == QByteArrayLiteral("renderState")) { QNodePtr nodePtr = propertyChange->value().value<QNodePtr>(); appendRenderState(nodePtr->id()); @@ -116,8 +111,6 @@ void RenderPass::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) removeAnnotation(propertyChange->value().value<QNodeId>()); } else if (propertyChange->propertyName() == QByteArrayLiteral("shaderProgram")) { m_shaderUuid = QNodeId(); - } else if (propertyChange->propertyName() == QByteArrayLiteral("binding")) { - removeBinding(propertyChange->value().value<QNodeId>()); } else if (propertyChange->propertyName() == QByteArrayLiteral("renderState")) { removeRenderState(propertyChange->value().value<QNodeId>()); } else if (propertyChange->propertyName() == QByteArrayLiteral("parameter")) { @@ -129,7 +122,7 @@ void RenderPass::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) default: break; } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } Qt3DCore::QNodeId RenderPass::shaderProgram() const @@ -137,11 +130,6 @@ Qt3DCore::QNodeId RenderPass::shaderProgram() const return m_shaderUuid; } -QList<ParameterMapping> RenderPass::bindings() const -{ - return m_bindings.values(); -} - QList<Qt3DCore::QNodeId> RenderPass::annotations() const { return m_annotationList; @@ -163,17 +151,6 @@ void RenderPass::removeAnnotation(Qt3DCore::QNodeId annotationId) m_annotationList.removeOne(annotationId); } -void RenderPass::appendBinding(const ParameterMapping &binding) -{ - if (!m_bindings.contains(binding.id())) - m_bindings[binding.id()] = binding; -} - -void RenderPass::removeBinding(Qt3DCore::QNodeId bindingId) -{ - m_bindings.remove(bindingId); -} - } // namespace Render } // namespace Qt3DRender diff --git a/src/render/materialsystem/renderpass_p.h b/src/render/materialsystem/renderpass_p.h index 5b6ef6bf3..bdd3ab6a4 100644 --- a/src/render/materialsystem/renderpass_p.h +++ b/src/render/materialsystem/renderpass_p.h @@ -54,7 +54,6 @@ #include <Qt3DRender/private/backendnode_p.h> #include <Qt3DRender/qt3drender_global.h> -#include <Qt3DRender/private/parametermapping_p.h> #include <Qt3DRender/private/parameterpack_p.h> #include <Qt3DRender/private/renderstatecollection_p.h> #include <Qt3DCore/private/qabstractaspect_p.h> @@ -86,7 +85,6 @@ public: void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) Q_DECL_OVERRIDE; Qt3DCore::QNodeId shaderProgram() const; - QList<ParameterMapping> bindings() const; QList<Qt3DCore::QNodeId> annotations() const; QList<Qt3DCore::QNodeId> parameters() const; @@ -94,11 +92,7 @@ private: void appendAnnotation(Qt3DCore::QNodeId criterionId); void removeAnnotation(Qt3DCore::QNodeId criterionId); - void appendBinding(const ParameterMapping &binding); - void removeBinding(Qt3DCore::QNodeId bindingId); - Qt3DCore::QNodeId m_shaderUuid; - QHash<Qt3DCore::QNodeId, ParameterMapping> m_bindings; QList<Qt3DCore::QNodeId> m_annotationList; ParameterPack m_parameterPack; }; diff --git a/src/render/materialsystem/shader.cpp b/src/render/materialsystem/shader.cpp index e4ffe59e4..6d2e1b96b 100644 --- a/src/render/materialsystem/shader.cpp +++ b/src/render/materialsystem/shader.cpp @@ -156,7 +156,7 @@ void Shader::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) } if (!m_isLoaded) updateDNA(); - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } @@ -362,8 +362,12 @@ void Shader::initializeAttributes(const QVector<ShaderAttribute> &attributesDesc { m_attributes = attributesDescription; m_attributesNames.resize(attributesDescription.size()); + m_attributeNamesIds.resize(attributesDescription.size()); for (int i = 0, m = attributesDescription.size(); i < m; i++) { m_attributesNames[i] = attributesDescription[i].m_name; + m_attributes[i].m_nameId = StringToInt::lookupId(m_attributesNames[i]); + m_attributeNamesIds[i] = m_attributes[i].m_nameId; + qDebug() << m_attributes[i].m_nameId << m_attributeNamesIds[i] << m_attributesNames[i]; qCDebug(Shaders) << "Active Attribute " << attributesDescription[i].m_name; } } @@ -430,6 +434,7 @@ void Shader::initialize(const Shader &other) m_uniformsNames = other.m_uniformsNames; m_uniforms = other.m_uniforms; m_attributesNames = other.m_attributesNames; + m_attributeNamesIds = other.m_attributeNamesIds; m_attributes = other.m_attributes; m_uniformBlockNamesIds = other.m_uniformBlockNamesIds; m_uniformBlockNames = other.m_uniformBlockNames; diff --git a/src/render/materialsystem/shader_p.h b/src/render/materialsystem/shader_p.h index 614914bd7..175584e0c 100644 --- a/src/render/materialsystem/shader_p.h +++ b/src/render/materialsystem/shader_p.h @@ -87,6 +87,7 @@ public: inline QVector<int> uniformsNamesIds() const Q_DECL_NOEXCEPT { return m_uniformsNamesIds; } inline QVector<int> uniformBlockNamesIds() const Q_DECL_NOEXCEPT { return m_uniformBlockNamesIds; } inline QVector<int> storageBlockNamesIds() const Q_DECL_NOEXCEPT { return m_shaderStorageBlockNamesIds; } + inline QVector<int> attributeNamesIds() const Q_DECL_NOEXCEPT { return m_attributeNamesIds; } QVector<QString> uniformsNames() const; QVector<QString> attributesNames() const; @@ -124,6 +125,7 @@ private: QVector<ShaderUniform> m_uniforms; QVector<QString> m_attributesNames; + QVector<int> m_attributeNamesIds; QVector<ShaderAttribute> m_attributes; QVector<QString> m_uniformBlockNames; diff --git a/src/render/materialsystem/shaderdata.cpp b/src/render/materialsystem/shaderdata.cpp index 52ee7220b..5c6a50156 100644 --- a/src/render/materialsystem/shaderdata.cpp +++ b/src/render/materialsystem/shaderdata.cpp @@ -322,7 +322,7 @@ void ShaderData::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) default: break; } - BackendNode::markDirty(BackendNodeDirtyFlag::Any); + BackendNode::markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/materialsystem/technique.cpp b/src/render/materialsystem/technique.cpp index 3526e134f..895175752 100644 --- a/src/render/materialsystem/technique.cpp +++ b/src/render/materialsystem/technique.cpp @@ -149,7 +149,7 @@ void Technique::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) default: break; } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } QList<Qt3DCore::QNodeId> Technique::parameters() const diff --git a/src/render/picking/objectpicker.cpp b/src/render/picking/objectpicker.cpp index 172f1733e..15ce64e15 100644 --- a/src/render/picking/objectpicker.cpp +++ b/src/render/picking/objectpicker.cpp @@ -95,7 +95,7 @@ void ObjectPicker::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) m_mouseTrackingEnabled = propertyChange->value().toBool(); m_isDirty = true; } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/renderstates/renderstates.cpp b/src/render/renderstates/renderstates.cpp index 3cce233b8..2f5f95753 100644 --- a/src/render/renderstates/renderstates.cpp +++ b/src/render/renderstates/renderstates.cpp @@ -99,7 +99,7 @@ void RenderStateNode::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) } else { m_impl->updateProperty(propertyChange->propertyName(), propertyChange->value()); } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } } diff --git a/src/render/texture/texture.cpp b/src/render/texture/texture.cpp index f17ac8ee5..18b526ad0 100644 --- a/src/render/texture/texture.cpp +++ b/src/render/texture/texture.cpp @@ -597,7 +597,7 @@ void Texture::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) break; } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } TextureDNA Texture::dna() const diff --git a/src/render/texture/textureimage.cpp b/src/render/texture/textureimage.cpp index aef4908bb..fe4247410 100644 --- a/src/render/texture/textureimage.cpp +++ b/src/render/texture/textureimage.cpp @@ -121,7 +121,7 @@ void TextureImage::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) if (txt != Q_NULLPTR) txt->addToPendingTextureJobs(); } - markDirty(BackendNodeDirtyFlag::Any); + markDirty(AbstractRenderer::AllDirty); } void TextureImage::setTextureManager(TextureManager *manager) diff --git a/tests/auto/render/commons/testrenderer.cpp b/tests/auto/render/commons/testrenderer.cpp index 39cf936ac..db038dbc4 100644 --- a/tests/auto/render/commons/testrenderer.cpp +++ b/tests/auto/render/commons/testrenderer.cpp @@ -39,17 +39,22 @@ TestRenderer::~TestRenderer() { } -void TestRenderer::markDirty(Qt3DRender::Render::BackendNodeDirtySet changes, Qt3DRender::Render::BackendNode *node) +void TestRenderer::markDirty(Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet changes, Qt3DRender::Render::BackendNode *node) { Q_UNUSED(node); m_changes |= changes; } -Qt3DRender::Render::BackendNodeDirtySet TestRenderer::dirtyBits() +Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet TestRenderer::dirtyBits() { return m_changes; } +void TestRenderer::clearDirtyBits(Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet changes) +{ + m_changes &= changes; +} + void TestRenderer::resetDirty() { m_changes = 0; diff --git a/tests/auto/render/commons/testrenderer.h b/tests/auto/render/commons/testrenderer.h index d237b6051..1194e6c38 100644 --- a/tests/auto/render/commons/testrenderer.h +++ b/tests/auto/render/commons/testrenderer.h @@ -67,13 +67,14 @@ public: void setSettings(Qt3DRender::Render::RendererSettings *settings) Q_DECL_OVERRIDE { Q_UNUSED(settings); } Qt3DRender::Render::RendererSettings *settings() const Q_DECL_OVERRIDE { return Q_NULLPTR; } - void markDirty(Qt3DRender::Render::BackendNodeDirtySet changes, Qt3DRender::Render::BackendNode *node) Q_DECL_OVERRIDE; - Qt3DRender::Render::BackendNodeDirtySet dirtyBits() Q_DECL_OVERRIDE; + void markDirty(Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet changes, Qt3DRender::Render::BackendNode *node) Q_DECL_OVERRIDE; + Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet dirtyBits() Q_DECL_OVERRIDE; + void clearDirtyBits(Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet changes) Q_DECL_OVERRIDE; void resetDirty(); protected: - Qt3DRender::Render::BackendNodeDirtySet m_changes; + Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet m_changes; }; QT_END_NAMESPACE diff --git a/tests/auto/render/qmaterial/tst_qmaterial.cpp b/tests/auto/render/qmaterial/tst_qmaterial.cpp index 3b6171030..7b52a798c 100644 --- a/tests/auto/render/qmaterial/tst_qmaterial.cpp +++ b/tests/auto/render/qmaterial/tst_qmaterial.cpp @@ -36,7 +36,6 @@ #include <Qt3DRender/QTechnique> #include <Qt3DRender/QRenderPass> #include <Qt3DRender/QPhongMaterial> -#include <Qt3DRender/QParameterMapping> #include <Qt3DRender/QDiffuseMapMaterial> #include <Qt3DRender/QPerVertexColorMaterial> #include <Qt3DRender/QNormalDiffuseMapMaterial> @@ -131,7 +130,6 @@ private: compareParameters(original->parameters(), clone->parameters()); compareRenderStates(original->renderStates(), clone->renderStates()); compareAnnotations(original->annotations(), clone->annotations()); - compareBindings(original->bindings(), clone->bindings()); compareShaderPrograms(original->shaderProgram(), clone->shaderProgram()); } @@ -162,22 +160,6 @@ private: } } - void compareBindings(const QList<Qt3DRender::QParameterMapping *> &original, const QList<Qt3DRender::QParameterMapping *> &clone) - { - const int bindingsCount = original.size(); - QCOMPARE(bindingsCount, clone.size()); - - for (int i = 0; i < bindingsCount; ++i) { - const Qt3DRender::QParameterMapping *origMapping = original.at(i); - const Qt3DRender::QParameterMapping *cloneMapping = clone.at(i); - - QCOMPARE(origMapping->id(), cloneMapping->id()); - QCOMPARE(origMapping->bindingType(), cloneMapping->bindingType()); - QCOMPARE(origMapping->parameterName(), cloneMapping->parameterName()); - QCOMPARE(origMapping->shaderVariableName(), cloneMapping->shaderVariableName()); - } - } - void compareRenderStates(const QList<Qt3DRender::QRenderState *> &original, const QList<Qt3DRender::QRenderState *> &clone) { const int renderStatesCount = original.size(); diff --git a/tests/auto/render/renderpass/tst_renderpass.cpp b/tests/auto/render/renderpass/tst_renderpass.cpp index 603cfb2a2..390946042 100644 --- a/tests/auto/render/renderpass/tst_renderpass.cpp +++ b/tests/auto/render/renderpass/tst_renderpass.cpp @@ -32,7 +32,6 @@ #include <Qt3DCore/QScenePropertyChange> #include <Qt3DRender/QAnnotation> -#include <Qt3DRender/QParameterMapping> #include <Qt3DRender/QRenderPass> #include <Qt3DRender/QShaderProgram> #include <Qt3DRender/QParameter> @@ -84,7 +83,6 @@ private slots: // THEN QVERIFY(backend.shaderProgram().isNull()); QVERIFY(backend.annotations().isEmpty()); - QVERIFY(backend.bindings().isEmpty()); QVERIFY(backend.renderStates(m_renderStateManager).isEmpty()); QVERIFY(backend.parameters().isEmpty()); } @@ -97,8 +95,6 @@ private slots: frontend.addAnnotation(new QAnnotation(&frontend)); - frontend.addBinding(new QParameterMapping(&frontend)); - frontend.addParameter(new QParameter(&frontend)); QRenderState *frontendState = new QBlendState(); @@ -119,12 +115,6 @@ private slots: QCOMPARE(backend.annotations().size(), 1); QCOMPARE(backend.annotations().first(), frontend.annotations().first()->id()); - QCOMPARE(backend.bindings().size(), 1); - QCOMPARE(backend.bindings().first().id(), frontend.bindings().first()->id()); - QCOMPARE(backend.bindings().first().bindingType(), frontend.bindings().first()->bindingType()); - QCOMPARE(backend.bindings().first().parameterName(), frontend.bindings().first()->parameterName()); - QCOMPARE(backend.bindings().first().shaderVariableName(), frontend.bindings().first()->shaderVariableName()); - QCOMPARE(backend.parameters().size(), 1); QCOMPARE(backend.parameters().first(), frontend.parameters().first()->id()); @@ -191,39 +181,6 @@ private slots: QVERIFY(backend.annotations().isEmpty()); } - void shouldHandleBindingsPropertyChangeEvents() - { - // GIVEN - QScopedPointer<QParameterMapping> binding(new QParameterMapping); - - RenderPass backend; - TestRenderer renderer; - backend.setRenderer(&renderer); - - // WHEN - QScenePropertyChangePtr addChange(new QScenePropertyChange(NodeAdded, QSceneChange::Node, binding->id())); - addChange->setValue(QVariant::fromValue(binding.data())); - addChange->setPropertyName("binding"); - backend.sceneChangeEvent(addChange); - - // THEN - QCOMPARE(backend.bindings().size(), 1); - QCOMPARE(backend.bindings().first().id(), binding->id()); - QCOMPARE(backend.bindings().first().bindingType(), binding->bindingType()); - QCOMPARE(backend.bindings().first().parameterName(), binding->parameterName()); - QCOMPARE(backend.bindings().first().shaderVariableName(), binding->shaderVariableName()); - QVERIFY(renderer.dirtyBits() != 0); - - // WHEN - QScenePropertyChangePtr removeChange(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, binding->id())); - removeChange->setValue(QVariant::fromValue(binding->id())); - removeChange->setPropertyName("binding"); - backend.sceneChangeEvent(removeChange); - - // THEN - QVERIFY(backend.bindings().isEmpty()); - } - void shouldHandleParametersPropertyChangeEvents() { // GIVEN |