diff options
author | Tomi Korpipää <tomi.korpipaa@theqtcompany.com> | 2015-12-08 11:50:37 +0200 |
---|---|---|
committer | Tomi Korpipää <tomi.korpipaa@theqtcompany.com> | 2015-12-09 05:18:19 +0000 |
commit | 0e15154c9f0d982096a551efc53fd363d2b2f68d (patch) | |
tree | 4917ca73c44a92297db7cc3dbd72d2716481ccc7 /src/render/defaults/qphongmaterial.cpp | |
parent | 036ea9fcfdd343c805e1a900528e7a2367d6c373 (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.cpp | 123 |
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 |