diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2014-06-04 13:07:07 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-06-07 11:18:08 +0200 |
commit | f01be721572e4b56176cda042ea77879eb0ee658 (patch) | |
tree | 3aa3acf456ed8bf0403354734af18a8035bcd137 /src | |
parent | 2eee1f2c45ef7d0fc3832b501e0c029a3eb00a84 (diff) |
Completed QAbstractShader and QAbstractRenderPass
QAbstractRenderPass now contains a QAbstractShader.
Backend was updated to use QAbstractRenderPass.
Change-Id: I0353d6cf7ec7f74c5506d6c6a6513d54ca27fcd4
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/core-components/qabstractrenderpass.cpp | 20 | ||||
-rw-r--r-- | src/core/core-components/qabstractrenderpass.h | 6 | ||||
-rw-r--r-- | src/quick3d/imports/core/qt3dquick3dcoreplugin.cpp | 6 | ||||
-rw-r--r-- | src/render/backend/renderer.cpp | 2 | ||||
-rw-r--r-- | src/render/backend/renderview.cpp | 10 | ||||
-rw-r--r-- | src/render/frontend/renderpass.cpp | 28 | ||||
-rw-r--r-- | src/render/frontend/renderpass.h | 12 |
7 files changed, 35 insertions, 49 deletions
diff --git a/src/core/core-components/qabstractrenderpass.cpp b/src/core/core-components/qabstractrenderpass.cpp index 1444f4ada..b6e3c2a62 100644 --- a/src/core/core-components/qabstractrenderpass.cpp +++ b/src/core/core-components/qabstractrenderpass.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "qabstractrenderpass.h" +#include "qabstractshader.h" QT_BEGIN_NAMESPACE @@ -50,11 +51,13 @@ class QAbstractRenderPassPrivate public: QAbstractRenderPassPrivate(QAbstractRenderPass *qq) : q_ptr(qq) + , m_shader(Q_NULLPTR) {} - QString m_name; Q_DECLARE_PUBLIC(QAbstractRenderPass) QAbstractRenderPass *q_ptr; + QAbstractShader *m_shader; + QString m_name; }; QAbstractRenderPass::QAbstractRenderPass(Node *parent) @@ -78,6 +81,21 @@ QString QAbstractRenderPass::name() const return d->m_name; } +void QAbstractRenderPass::setShaderProgram(QAbstractShader *shaderProgram) +{ + Q_D(QAbstractRenderPass); + if (d->m_shader != shaderProgram) { + d->m_shader = shaderProgram; + emit shaderProgramChanged(); + } +} + +QAbstractShader *QAbstractRenderPass::shaderProgram() const +{ + Q_D(const QAbstractRenderPass); + return d->m_shader; +} + } // Qt3D QT_END_NAMESPACE diff --git a/src/core/core-components/qabstractrenderpass.h b/src/core/core-components/qabstractrenderpass.h index 3e1b27490..2dba32e7f 100644 --- a/src/core/core-components/qabstractrenderpass.h +++ b/src/core/core-components/qabstractrenderpass.h @@ -48,12 +48,14 @@ QT_BEGIN_NAMESPACE namespace Qt3D { +class QAbstractShader; class QAbstractRenderPassPrivate; class QT3DCORESHARED_EXPORT QAbstractRenderPass : public Node { Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) + Q_PROPERTY(Qt3D::QAbstractShader * shaderProgram READ shaderProgram WRITE setShaderProgram NOTIFY shaderProgramChanged) public: explicit QAbstractRenderPass(Node *parent = 0); @@ -61,9 +63,11 @@ public: virtual void setName(const QString &name); QString name() const; + virtual void setShaderProgram(QAbstractShader* shaderProgram); + QAbstractShader* shaderProgram() const; Q_SIGNALS: void nameChanged(); - + void shaderProgramChanged(); private: Q_DECLARE_PRIVATE(QAbstractRenderPass) diff --git a/src/quick3d/imports/core/qt3dquick3dcoreplugin.cpp b/src/quick3d/imports/core/qt3dquick3dcoreplugin.cpp index c75a387f3..2833ffad4 100644 --- a/src/quick3d/imports/core/qt3dquick3dcoreplugin.cpp +++ b/src/quick3d/imports/core/qt3dquick3dcoreplugin.cpp @@ -41,8 +41,6 @@ #include <QtQml> #include "qt3dquick3dcoreplugin.h" -#include <Qt3DQuick/quick3dentity.h> -#include <Qt3DQuick/quick3dtransform.h> #include <Qt3DCore/cameralens.h> #include <Qt3DCore/camera.h> #include <Qt3DCore/scaletransform.h> @@ -55,6 +53,9 @@ #include <Qt3DCore/qabstracttechnique.h> #include <Qt3DCore/qabstractmesh.h> #include <Qt3DCore/qabstractrenderpass.h> +#include <Qt3DCore/qabstractshader.h> +#include <Qt3DQuick/quick3dentity.h> +#include <Qt3DQuick/quick3dtransform.h> #include <Qt3DQuick/quick3dconfiguration.h> QT_BEGIN_NAMESPACE @@ -67,6 +68,7 @@ void Qt3DQuick3DCorePlugin::registerTypes(const char *uri) qmlRegisterUncreatableType<Qt3D::QAbstractTechnique>(uri, 2, 0, "QAbstractTechnique", ""); qmlRegisterUncreatableType<Qt3D::QAbstractRenderPass>(uri, 2, 0, "QAbstractRenderPass", ""); qmlRegisterUncreatableType<Qt3D::QAbstractEffect>(uri, 2, 0, "QAbstractEffect", ""); + qmlRegisterUncreatableType<Qt3D::QAbstractShader>(uri, 2, 0, "QAbstractShader", ""); qmlRegisterType<Qt3D::Quick::Quick3DConfiguration>(uri, 2, 0, "Configuration"); qmlRegisterExtendedType<Qt3D::Entity, Qt3D::Quick::Quick3DEntity>(uri, 2, 0, "Entity"); diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp index 928d3e713..76355b938 100644 --- a/src/render/backend/renderer.cpp +++ b/src/render/backend/renderer.cpp @@ -588,7 +588,7 @@ RenderTechnique* Renderer::createTechnique(Technique* tech) rt->setPeer(tech); for (unsigned int p=0; p<rt->passCount(); ++p) { RenderPass* frontendPass = qobject_cast<RenderPass*>(tech->renderPasses().at(p)); - RenderShader* rshader = getOrCreateShader(frontendPass->shaderProgram()); + RenderShader* rshader = getOrCreateShader(qobject_cast<ShaderProgram*>(frontendPass->shaderProgram())); rt->setShaderForPass(p, rshader); RenderBin* bin = getOrCreateBinForPass(tech, frontendPass); diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp index 2f079c583..f411d9d81 100644 --- a/src/render/backend/renderview.cpp +++ b/src/render/backend/renderview.cpp @@ -282,17 +282,17 @@ void RenderView::setCommandShaderTechniqueEffect(RenderCommand *command) // Load RenderPass and ShaderPrograms QString passName = m_passFilter->filter(); if (technique != Q_NULLPTR) - Q_FOREACH (QAbstractRenderPass *p, technique->peer()->renderPasses()) { - RenderPass *pass = qobject_cast<RenderPass *>(p); - if (p != Q_NULLPTR && pass->name() == passName) { + Q_FOREACH (QAbstractRenderPass *pass, technique->peer()->renderPasses()) { + if (pass->name() == passName && pass->shaderProgram() != Q_NULLPTR) { // Index RenderShader by Shader UUID command->m_shader = m_renderer->shaderManager()->lookupHandle(pass->shaderProgram()->uuid()); if (command->m_shader.isNull()) { RenderShader *shader = m_renderer->shaderManager()->getOrCreateResource(pass->shaderProgram()->uuid()); - shader->setPeer(pass->shaderProgram()); + shader->setPeer(qobject_cast<ShaderProgram*>(pass->shaderProgram())); command->m_shader = m_renderer->shaderManager()->lookupHandle(pass->shaderProgram()->uuid()); } - command->m_stateSet = pass->stateSet(); + // TO DO : To be corrected later on + command->m_stateSet = qobject_cast<RenderPass*>(pass)->stateSet(); break; } } diff --git a/src/render/frontend/renderpass.cpp b/src/render/frontend/renderpass.cpp index 98b300c71..ffded5393 100644 --- a/src/render/frontend/renderpass.cpp +++ b/src/render/frontend/renderpass.cpp @@ -50,38 +50,10 @@ namespace Qt3D { RenderPass::RenderPass(Node *parent) : QAbstractRenderPass(parent) - , m_name() - , m_shaderProgram(0) , m_stateSet(0) { } -void RenderPass::setName(const QString &name) -{ - if (name != m_name) { - m_name = name; - emit nameChanged(); - } -} - -QString RenderPass::name() const -{ - return m_name; -} - -void RenderPass::setShaderProgram(Qt3D::ShaderProgram *shaderProgram) -{ - if (shaderProgram != m_shaderProgram) { - m_shaderProgram = shaderProgram; - emit shaderProgramChanged(); - } -} - -Qt3D::ShaderProgram *RenderPass::shaderProgram() const -{ - return m_shaderProgram; -} - void RenderPass::addUniformBinding(Parameter *param, QString glslUniformName) { m_uniforms.append(param); diff --git a/src/render/frontend/renderpass.h b/src/render/frontend/renderpass.h index 8fd39e277..127249fd2 100644 --- a/src/render/frontend/renderpass.h +++ b/src/render/frontend/renderpass.h @@ -60,17 +60,10 @@ typedef QList<Parameter*> ParameterList; class QT3DRENDERERSHARED_EXPORT RenderPass : public QAbstractRenderPass { Q_OBJECT - Q_PROPERTY(Qt3D::ShaderProgram * shaderProgram READ shaderProgram WRITE setShaderProgram NOTIFY shaderProgramChanged) public: explicit RenderPass(Node *parent = 0); - void setName(const QString &name); - QString name() const; - - void setShaderProgram(Qt3D::ShaderProgram* shaderProgram); - Qt3D::ShaderProgram* shaderProgram() const; - void addUniformBinding(Parameter* param, QString glslUniformName); void addAttributeBinding(Parameter* param, QString glslAttributeName); @@ -83,12 +76,9 @@ public: void setStateSet(Render::DrawStateSet* ss); Render::DrawStateSet* stateSet() const; -Q_SIGNALS: - void shaderProgramChanged(); + protected: - QString m_name; - ShaderProgram* m_shaderProgram; ParameterList m_attributes; ParameterList m_uniforms; |