summaryrefslogtreecommitdiffstats
path: root/src/render/defaults/qphongmaterial.cpp
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@theqtcompany.com>2015-12-08 11:50:37 +0200
committerTomi Korpipää <tomi.korpipaa@theqtcompany.com>2015-12-09 05:18:19 +0000
commit0e15154c9f0d982096a551efc53fd363d2b2f68d (patch)
tree4917ca73c44a92297db7cc3dbd72d2716481ccc7 /src/render/defaults/qphongmaterial.cpp
parent036ea9fcfdd343c805e1a900528e7a2367d6c373 (diff)
Added parameters to signals and made setters Q_SLOTS
Change-Id: Icec2f9f207221e35ffdeeb594bb9b4dc6ef890f1 Task-number: QTBUG-49797 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/defaults/qphongmaterial.cpp')
-rw-r--r--src/render/defaults/qphongmaterial.cpp123
1 files changed, 76 insertions, 47 deletions
diff --git a/src/render/defaults/qphongmaterial.cpp b/src/render/defaults/qphongmaterial.cpp
index 7d18afccc..233eebd6e 100644
--- a/src/render/defaults/qphongmaterial.cpp
+++ b/src/render/defaults/qphongmaterial.cpp
@@ -73,6 +73,82 @@ QPhongMaterialPrivate::QPhongMaterialPrivate()
{
}
+// TODO: Define how lights are properties are set in the shaders. Ideally using a QShaderData
+void QPhongMaterialPrivate::init()
+{
+ connect(m_ambientParameter, &Qt3DRender::QParameter::valueChanged,
+ this, &QPhongMaterialPrivate::handleAmbientChanged);
+ connect(m_diffuseParameter, &Qt3DRender::QParameter::valueChanged,
+ this, &QPhongMaterialPrivate::handleDiffuseChanged);
+ connect(m_specularParameter, &Qt3DRender::QParameter::valueChanged,
+ this, &QPhongMaterialPrivate::handleSpecularChanged);
+ connect(m_shininessParameter, &Qt3DRender::QParameter::valueChanged,
+ this, &QPhongMaterialPrivate::handleShininessChanged);
+
+ m_phongGL3Shader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/gl3/phong.vert"))));
+ m_phongGL3Shader->setFragmentShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/gl3/phong.frag"))));
+ m_phongGL2ES2Shader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/es2/phong.vert"))));
+ m_phongGL2ES2Shader->setFragmentShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/es2/phong.frag"))));
+
+ m_phongGL3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
+ m_phongGL3Technique->graphicsApiFilter()->setMajorVersion(3);
+ m_phongGL3Technique->graphicsApiFilter()->setMinorVersion(1);
+ m_phongGL3Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::CoreProfile);
+
+ m_phongGL2Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
+ m_phongGL2Technique->graphicsApiFilter()->setMajorVersion(2);
+ m_phongGL2Technique->graphicsApiFilter()->setMinorVersion(0);
+ m_phongGL2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
+
+ m_phongES2Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGLES);
+ m_phongES2Technique->graphicsApiFilter()->setMajorVersion(2);
+ m_phongES2Technique->graphicsApiFilter()->setMinorVersion(0);
+ m_phongES2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
+
+ m_phongGL3RenderPass->setShaderProgram(m_phongGL3Shader);
+ m_phongGL2RenderPass->setShaderProgram(m_phongGL2ES2Shader);
+ m_phongES2RenderPass->setShaderProgram(m_phongGL2ES2Shader);
+
+ m_phongGL3Technique->addPass(m_phongGL3RenderPass);
+ m_phongGL2Technique->addPass(m_phongGL2RenderPass);
+ m_phongES2Technique->addPass(m_phongES2RenderPass);
+
+ m_phongEffect->addTechnique(m_phongGL3Technique);
+ m_phongEffect->addTechnique(m_phongGL2Technique);
+ m_phongEffect->addTechnique(m_phongES2Technique);
+
+ m_phongEffect->addParameter(m_ambientParameter);
+ m_phongEffect->addParameter(m_diffuseParameter);
+ m_phongEffect->addParameter(m_specularParameter);
+ m_phongEffect->addParameter(m_shininessParameter);
+
+ q_func()->setEffect(m_phongEffect);
+}
+
+void QPhongMaterialPrivate::handleAmbientChanged(const QVariant &var)
+{
+ Q_Q(QPhongMaterial);
+ emit q->ambientChanged(var.value<QColor>());
+}
+
+void QPhongMaterialPrivate::handleDiffuseChanged(const QVariant &var)
+{
+ Q_Q(QPhongMaterial);
+ emit q->diffuseChanged(var.value<QColor>());
+}
+
+void QPhongMaterialPrivate::handleSpecularChanged(const QVariant &var)
+{
+ Q_Q(QPhongMaterial);
+ emit q->specularChanged(var.value<QColor>());
+}
+
+void QPhongMaterialPrivate::handleShininessChanged(const QVariant &var)
+{
+ Q_Q(QPhongMaterial);
+ emit q->shininessChanged(var.toFloat());
+}
+
/*!
\class Qt3DRender::QPhongMaterial
\brief The QPhongMaterial class provides a default implementation of the phong lighting effect.
@@ -102,10 +178,6 @@ QPhongMaterial::QPhongMaterial(QNode *parent)
: QMaterial(*new QPhongMaterialPrivate, parent)
{
Q_D(QPhongMaterial);
- QObject::connect(d->m_ambientParameter, SIGNAL(valueChanged()), this, SIGNAL(ambientChanged()));
- QObject::connect(d->m_diffuseParameter, SIGNAL(valueChanged()), this, SIGNAL(diffuseChanged()));
- QObject::connect(d->m_specularParameter, SIGNAL(valueChanged()), this, SIGNAL(specularChanged()));
- QObject::connect(d->m_shininessParameter, SIGNAL(valueChanged()), this, SIGNAL(shininessChanged()));
d->init();
}
@@ -186,49 +258,6 @@ void QPhongMaterial::setShininess(float shininess)
d->m_shininessParameter->setValue(shininess);
}
-// TODO: Define how lights are properties are set in the shaders. Ideally using a QShaderData
-void QPhongMaterialPrivate::init()
-{
- m_phongGL3Shader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/gl3/phong.vert"))));
- m_phongGL3Shader->setFragmentShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/gl3/phong.frag"))));
- m_phongGL2ES2Shader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/es2/phong.vert"))));
- m_phongGL2ES2Shader->setFragmentShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/es2/phong.frag"))));
-
- m_phongGL3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
- m_phongGL3Technique->graphicsApiFilter()->setMajorVersion(3);
- m_phongGL3Technique->graphicsApiFilter()->setMinorVersion(1);
- m_phongGL3Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::CoreProfile);
-
- m_phongGL2Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
- m_phongGL2Technique->graphicsApiFilter()->setMajorVersion(2);
- m_phongGL2Technique->graphicsApiFilter()->setMinorVersion(0);
- m_phongGL2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
-
- m_phongES2Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGLES);
- m_phongES2Technique->graphicsApiFilter()->setMajorVersion(2);
- m_phongES2Technique->graphicsApiFilter()->setMinorVersion(0);
- m_phongES2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
-
- m_phongGL3RenderPass->setShaderProgram(m_phongGL3Shader);
- m_phongGL2RenderPass->setShaderProgram(m_phongGL2ES2Shader);
- m_phongES2RenderPass->setShaderProgram(m_phongGL2ES2Shader);
-
- m_phongGL3Technique->addPass(m_phongGL3RenderPass);
- m_phongGL2Technique->addPass(m_phongGL2RenderPass);
- m_phongES2Technique->addPass(m_phongES2RenderPass);
-
- m_phongEffect->addTechnique(m_phongGL3Technique);
- m_phongEffect->addTechnique(m_phongGL2Technique);
- m_phongEffect->addTechnique(m_phongES2Technique);
-
- m_phongEffect->addParameter(m_ambientParameter);
- m_phongEffect->addParameter(m_diffuseParameter);
- m_phongEffect->addParameter(m_specularParameter);
- m_phongEffect->addParameter(m_shininessParameter);
-
- q_func()->setEffect(m_phongEffect);
-}
-
} // namespace Qt3DRender
QT_END_NAMESPACE