summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2014-06-04 13:07:07 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-06-07 11:18:08 +0200
commitf01be721572e4b56176cda042ea77879eb0ee658 (patch)
tree3aa3acf456ed8bf0403354734af18a8035bcd137 /src
parent2eee1f2c45ef7d0fc3832b501e0c029a3eb00a84 (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.cpp20
-rw-r--r--src/core/core-components/qabstractrenderpass.h6
-rw-r--r--src/quick3d/imports/core/qt3dquick3dcoreplugin.cpp6
-rw-r--r--src/render/backend/renderer.cpp2
-rw-r--r--src/render/backend/renderview.cpp10
-rw-r--r--src/render/frontend/renderpass.cpp28
-rw-r--r--src/render/frontend/renderpass.h12
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;