summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2014-09-12 18:17:32 +0200
committerSean Harmer <sean.harmer@kdab.com>2014-09-29 22:53:21 +0200
commit0d5b71f4df0d0acfc807076441a52b4ceefb410b (patch)
treecb714bb858a50b8692258ea1f84611bf41d48d90
parentc2332dd5480943e5bbcc190c879a2b6647d69bf5 (diff)
QParameter new overloaded ctors
Change-Id: Ia6e3c3285884265b303485176109a4d2c80ccabe Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--examples/deferred-renderer-cpp/main.cpp20
-rw-r--r--src/plugins/sceneparsers/assimp/assimpparser.cpp30
-rw-r--r--src/render/backend/renderer.cpp16
-rw-r--r--src/render/frontend/qparameter.cpp11
-rw-r--r--src/render/frontend/qparameter.h4
-rw-r--r--src/render/io/gltfparser.cpp2
6 files changed, 45 insertions, 38 deletions
diff --git a/examples/deferred-renderer-cpp/main.cpp b/examples/deferred-renderer-cpp/main.cpp
index 8c26ba343..d331f672f 100644
--- a/examples/deferred-renderer-cpp/main.cpp
+++ b/examples/deferred-renderer-cpp/main.cpp
@@ -141,20 +141,18 @@ int main(int ac, char **av)
Qt3D::QMaterial *sphereOneMaterial = new Qt3D::QMaterial();
sphereOneMaterial->setEffect(sceneEffect);
- sphereOneMaterial->addParameter(new Qt3D::QParameter(sphereOneMaterial, QStringLiteral("meshColor"), QColor(Qt::blue)));
+ sphereOneMaterial->addParameter(new Qt3D::QParameter(QStringLiteral("meshColor"), QColor(Qt::blue)));
- Qt3D::QTransform *sphereOneTransform = new Qt3D::QTransform();
Qt3D::QTranslateTransform *sphereOneTranslate = new Qt3D::QTranslateTransform();
sphereOneTranslate->setDx(-10.0f);
sphereOneTranslate->setDy(0.0f);
sphereOneTranslate->setDz(25.0f);
- sphereOneTransform->appendTransform(sphereOneTranslate);
Qt3D::QPointLight *light2 = new Qt3D::QPointLight();
light2->setColor(Qt::white);
light2->setIntensity(1.5f);
- sphereOne->addComponent(sphereOneTransform);
+ sphereOne->addComponent(new Qt3D::QTransform(sphereOneTranslate));
sphereOne->addComponent(sphereOneMaterial);
sphereOne->addComponent(sphereMesh);
sphereOne->addComponent(sceneLayer);
@@ -163,7 +161,7 @@ int main(int ac, char **av)
Qt3D::QEntity *sphereTwo = new Qt3D::QEntity();
Qt3D::QMaterial *sphereTwoMaterial = new Qt3D::QMaterial();
sphereTwoMaterial->setEffect(sceneEffect);
- sphereTwoMaterial->addParameter(new Qt3D::QParameter(sphereTwoMaterial, QStringLiteral("meshColor"), QColor(Qt::yellow)));
+ sphereTwoMaterial->addParameter(new Qt3D::QParameter(QStringLiteral("meshColor"), QColor(Qt::yellow)));
Qt3D::QPointLight *light3 = new Qt3D::QPointLight();
light3->setColor(Qt::blue);
@@ -177,20 +175,18 @@ int main(int ac, char **av)
// Screen Quad
Qt3D::QEntity *screenQuad = new Qt3D::QEntity();
Qt3D::QMaterial *screenQuadMaterial = new Qt3D::QMaterial();
- screenQuadMaterial->addParameter(new Qt3D::QParameter(0, QStringLiteral("position"),QVariant::fromValue(gBuffer->positionTexture())));
- screenQuadMaterial->addParameter(new Qt3D::QParameter(0, QStringLiteral("normal"), QVariant::fromValue(gBuffer->normalTexture())));
- screenQuadMaterial->addParameter(new Qt3D::QParameter(0, QStringLiteral("color"), QVariant::fromValue(gBuffer->colorTexture())));
- screenQuadMaterial->addParameter(new Qt3D::QParameter(0, QStringLiteral("winSize"), QSize(1024, 1024)));
+ screenQuadMaterial->addParameter(new Qt3D::QParameter(QStringLiteral("position"), gBuffer->positionTexture()));
+ screenQuadMaterial->addParameter(new Qt3D::QParameter(QStringLiteral("normal"), gBuffer->normalTexture()));
+ screenQuadMaterial->addParameter(new Qt3D::QParameter(QStringLiteral("color"), gBuffer->colorTexture()));
+ screenQuadMaterial->addParameter(new Qt3D::QParameter(QStringLiteral("winSize"), QSize(1024, 1024)));
screenQuadMaterial->setEffect(finalEffect);
- Qt3D::QTransform *screenQuadTransform = new Qt3D::QTransform();
Qt3D::QRotateTransform *screenPlaneRotation = new Qt3D::QRotateTransform();
screenPlaneRotation->setAngleDeg(90);
screenPlaneRotation->setAxis(QVector3D(1.0f, 0.0f, 0.0f));
- screenQuadTransform->appendTransform(screenPlaneRotation);
screenQuad->addComponent(quadLayer);
- screenQuad->addComponent(screenQuadTransform);
+ screenQuad->addComponent(new Qt3D::QTransform(screenPlaneRotation));
screenQuad->addComponent(screenQuadMaterial);
screenQuad->addComponent(planeMesh);
diff --git a/src/plugins/sceneparsers/assimp/assimpparser.cpp b/src/plugins/sceneparsers/assimp/assimpparser.cpp
index 9adac2fca..66d429945 100644
--- a/src/plugins/sceneparsers/assimp/assimpparser.cpp
+++ b/src/plugins/sceneparsers/assimp/assimpparser.cpp
@@ -694,17 +694,17 @@ void AssimpParser::copyMaterialColorProperties(QMaterial *material, aiMaterial *
{
aiColor3D color;
if (assimpMaterial->Get(AI_MATKEY_COLOR_DIFFUSE, color) == aiReturn_SUCCESS)
- material->addParameter(new QParameter(material, ASSIMP_MATERIAL_DIFFUSE_COLOR, QColor::fromRgbF(color.r, color.g, color.b)));
+ material->addParameter(new QParameter(ASSIMP_MATERIAL_DIFFUSE_COLOR, QColor::fromRgbF(color.r, color.g, color.b), material));
if (assimpMaterial->Get(AI_MATKEY_COLOR_SPECULAR, color) == aiReturn_SUCCESS)
- material->addParameter(new QParameter(material, ASSIMP_MATERIAL_SPECULAR_COLOR, QColor::fromRgbF(color.r, color.g, color.b)));
+ material->addParameter(new QParameter(ASSIMP_MATERIAL_SPECULAR_COLOR, QColor::fromRgbF(color.r, color.g, color.b), material));
if (assimpMaterial->Get(AI_MATKEY_COLOR_AMBIENT, color) == aiReturn_SUCCESS)
- material->addParameter(new QParameter(material, ASSIMP_MATERIAL_AMBIENT_COLOR, QColor::fromRgbF(color.r, color.g, color.b)));
+ material->addParameter(new QParameter(ASSIMP_MATERIAL_AMBIENT_COLOR, QColor::fromRgbF(color.r, color.g, color.b), material));
if (assimpMaterial->Get(AI_MATKEY_COLOR_EMISSIVE, color) == aiReturn_SUCCESS)
- material->addParameter(new QParameter(material, ASSIMP_MATERIAL_EMISSIVE_COLOR, QColor::fromRgbF(color.r, color.g, color.b)));
+ material->addParameter(new QParameter(ASSIMP_MATERIAL_EMISSIVE_COLOR, QColor::fromRgbF(color.r, color.g, color.b), material));
if (assimpMaterial->Get(AI_MATKEY_COLOR_TRANSPARENT, color) == aiReturn_SUCCESS)
- material->addParameter(new QParameter(material, ASSIMP_MATERIAL_TRANSPARENT_COLOR, QColor::fromRgbF(color.r, color.g, color.b)));
+ material->addParameter(new QParameter(ASSIMP_MATERIAL_TRANSPARENT_COLOR, QColor::fromRgbF(color.r, color.g, color.b), material));
if (assimpMaterial->Get(AI_MATKEY_COLOR_REFLECTIVE, color) == aiReturn_SUCCESS)
- material->addParameter(new QParameter(material, ASSIMP_MATERIAL_REFLECTIVE_COLOR, QColor::fromRgbF(color.r, color.g, color.b)));
+ material->addParameter(new QParameter(ASSIMP_MATERIAL_REFLECTIVE_COLOR, QColor::fromRgbF(color.r, color.g, color.b), material));
}
/*!
@@ -714,9 +714,9 @@ void AssimpParser::copyMaterialBoolProperties(QMaterial *material, aiMaterial *a
{
int value;
if (assimpMaterial->Get(AI_MATKEY_TWOSIDED, value) == aiReturn_SUCCESS)
- material->addParameter(new QParameter(material, ASSIMP_MATERIAL_IS_TWOSIDED, (value == 0) ? false : true));
+ material->addParameter(new QParameter(ASSIMP_MATERIAL_IS_TWOSIDED, (value == 0) ? false : true, material));
if (assimpMaterial->Get(AI_MATKEY_ENABLE_WIREFRAME, value) == aiReturn_SUCCESS)
- material->addParameter(new QParameter(material, ASSIMP_MATERIAL_IS_WIREFRAME, (value == 0) ? false : true));
+ material->addParameter(new QParameter(ASSIMP_MATERIAL_IS_WIREFRAME, (value == 0) ? false : true, material));
}
void AssimpParser::copyMaterialShadingModel(QMaterial *material, aiMaterial *assimpMaterial)
@@ -789,8 +789,8 @@ void AssimpParser::copyMaterialTextures(QMaterial *material, aiMaterial *assimpM
}
}
if (textureLoaded) {
- material->addParameter(new QParameter(material, m_textureToParameterName[textureType[i]],
- QVariant::fromValue(m_materialTextures[fullPath])));
+ material->addParameter(new QParameter(m_textureToParameterName[textureType[i]],
+ m_materialTextures[fullPath], material));
}
}
}
@@ -803,15 +803,15 @@ void AssimpParser::copyMaterialFloatProperties(QMaterial *material, aiMaterial *
{
float value = 0;
if (assimpMaterial->Get(AI_MATKEY_OPACITY, value) == aiReturn_SUCCESS)
- material->addParameter(new QParameter(material, ASSIMP_MATERIAL_OPACITY, value));
+ material->addParameter(new QParameter(ASSIMP_MATERIAL_OPACITY, value, material));
if (assimpMaterial->Get(AI_MATKEY_SHININESS, value) == aiReturn_SUCCESS)
- material->addParameter(new QParameter(material, ASSIMP_MATERIAL_SHININESS,value));
+ material->addParameter(new QParameter(ASSIMP_MATERIAL_SHININESS, value, material));
if (assimpMaterial->Get(AI_MATKEY_SHININESS_STRENGTH, value) == aiReturn_SUCCESS)
- material->addParameter(new QParameter(material, ASSIMP_MATERIAL_SHININESS_STRENGTH, value));
+ material->addParameter(new QParameter(ASSIMP_MATERIAL_SHININESS_STRENGTH, value, material));
if (assimpMaterial->Get(AI_MATKEY_REFRACTI, value) == aiReturn_SUCCESS)
- material->addParameter(new QParameter(material, ASSIMP_MATERIAL_REFRACTI, value));
+ material->addParameter(new QParameter(ASSIMP_MATERIAL_REFRACTI, value, material));
if (assimpMaterial->Get(AI_MATKEY_REFLECTIVITY, value) == aiReturn_SUCCESS)
- material->addParameter(new QParameter(material, ASSIMP_MATERIAL_REFLECTIVITY, value));
+ material->addParameter(new QParameter(ASSIMP_MATERIAL_REFLECTIVITY, value, material));
}
AssimpMesh::AssimpMesh(QNode *parent)
diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp
index 6cf5c30f2..9453a2c1e 100644
--- a/src/render/backend/renderer.cpp
+++ b/src/render/backend/renderer.cpp
@@ -198,18 +198,18 @@ void Renderer::buildDefaultTechnique()
m_defaultTechnique->addPass(basicPass);
// diffuse lighting uniforms
- QParameter* lightPos = new QParameter(m_defaultTechnique, QStringLiteral("lightPos"), QVector4D(10.0f, 10.0f, 0.0f, 1.0f));
+ QParameter* lightPos = new QParameter(QStringLiteral("lightPos"), QVector4D(10.0f, 10.0f, 0.0f, 1.0f));
m_defaultTechnique->addParameter(lightPos);
basicPass->addBinding(new QParameterMapper(QStringLiteral("lightPos"), QStringLiteral("lightPosition"), QParameterMapper::Uniform));
- QParameter* lightIntensity = new QParameter(m_defaultTechnique, QStringLiteral("lightIntensity"), QVector3D(0.5f, 0.5f, 0.5f));
+ QParameter* lightIntensity = new QParameter(QStringLiteral("lightIntensity"), QVector3D(0.5f, 0.5f, 0.5f));
m_defaultTechnique->addParameter(lightIntensity);
- QParameter* kd = new QParameter(m_defaultTechnique, QStringLiteral("diffuse"), QVector3D(1.0f, 0.5f, 0.0f));
+ QParameter* kd = new QParameter(QStringLiteral("diffuse"), QVector3D(1.0f, 0.5f, 0.0f));
m_defaultTechnique->addParameter(kd);
basicPass->addBinding(new QParameterMapper(QStringLiteral("diffuse"), QStringLiteral("kd"), QParameterMapper::Uniform));
- QParameter* ka = new QParameter(m_defaultTechnique, QStringLiteral("ambient"), QVector3D(0.2f, 0.2f, 0.2f));
+ QParameter* ka = new QParameter(QStringLiteral("ambient"), QVector3D(0.2f, 0.2f, 0.2f));
m_defaultTechnique->addParameter(ka);
basicPass->addBinding(new QParameterMapper(QStringLiteral("ambient"), QStringLiteral("ka"), QParameterMapper::Uniform));
@@ -219,10 +219,10 @@ void Renderer::buildDefaultMaterial()
{
m_defaultMaterial = new QMaterial();
m_defaultMaterial->setObjectName(QStringLiteral("DefaultMaterial"));
- m_defaultMaterial->addParameter(new QParameter(m_defaultMaterial, QStringLiteral("lightPos"), QVector4D(10.0f, 10.0f, 0.0f, 1.0f)));
- m_defaultMaterial->addParameter(new QParameter(m_defaultMaterial, QStringLiteral("lightIntensity"), QVector3D(0.5f, 0.5f, 0.5f)));
- m_defaultMaterial->addParameter(new QParameter(m_defaultMaterial, QStringLiteral("ambient"), QVector3D(0.2f, 0.2f, 0.2f)));
- m_defaultMaterial->addParameter(new QParameter(m_defaultMaterial, QStringLiteral("diffuse"), QVector3D(1.0f, 0.5f, 0.0f)));
+ m_defaultMaterial->addParameter(new QParameter(QStringLiteral("lightPos"), QVector4D(10.0f, 10.0f, 0.0f, 1.0f)));
+ m_defaultMaterial->addParameter(new QParameter(QStringLiteral("lightIntensity"), QVector3D(0.5f, 0.5f, 0.5f)));
+ m_defaultMaterial->addParameter(new QParameter(QStringLiteral("ambient"), QVector3D(0.2f, 0.2f, 0.2f)));
+ m_defaultMaterial->addParameter(new QParameter(QStringLiteral("diffuse"), QVector3D(1.0f, 0.5f, 0.0f)));
QEffect* defEff = new QEffect;
defEff->addTechnique(m_defaultTechnique);
diff --git a/src/render/frontend/qparameter.cpp b/src/render/frontend/qparameter.cpp
index ba964abef..c771202a4 100644
--- a/src/render/frontend/qparameter.cpp
+++ b/src/render/frontend/qparameter.cpp
@@ -72,7 +72,7 @@ QParameter::QParameter(QNode *parent)
{
}
-QParameter::QParameter(QNode *parent, const QString &name, const QVariant &value, QParameter::OpenGLTypes ty)
+QParameter::QParameter(const QString &name, const QVariant &value, QNode *parent, QParameter::OpenGLTypes ty)
: QNode(*new QParameterPrivate(this), parent)
{
Q_D(QParameter);
@@ -81,6 +81,15 @@ QParameter::QParameter(QNode *parent, const QString &name, const QVariant &value
d->m_type = ty;
}
+QParameter::QParameter(const QString &name, QTexture *texture, QNode *parent)
+ : QNode(*new QParameterPrivate(this), parent)
+{
+ Q_D(QParameter);
+ d->m_name = name;
+ d->m_value = QVariant::fromValue(texture);
+ d->m_type = Undefined;
+}
+
void QParameter::copy(const QNode *ref)
{
Q_D(QParameter);
diff --git a/src/render/frontend/qparameter.h b/src/render/frontend/qparameter.h
index 5eec02517..b60f53488 100644
--- a/src/render/frontend/qparameter.h
+++ b/src/render/frontend/qparameter.h
@@ -50,6 +50,7 @@ QT_BEGIN_NAMESPACE
namespace Qt3D {
class QParameterPrivate;
+class QTexture;
class QT3DRENDERERSHARED_EXPORT QParameter : public QNode
{
@@ -90,7 +91,8 @@ public:
};
explicit QParameter(QNode *parent = 0);
- QParameter(QNode* parent, const QString& name, const QVariant& value, OpenGLTypes ty = Undefined);
+ QParameter(const QString& name, const QVariant& value, QNode* parent = 0, OpenGLTypes ty = Undefined);
+ QParameter(const QString &name, QTexture *texture, QNode *parent = 0);
void copy(const QNode *ref) Q_DECL_OVERRIDE;
diff --git a/src/render/io/gltfparser.cpp b/src/render/io/gltfparser.cpp
index 527f10272..012d8c438 100644
--- a/src/render/io/gltfparser.cpp
+++ b/src/render/io/gltfparser.cpp
@@ -824,7 +824,7 @@ void GLTFParser::processJSONTechnique( QString id, QJsonObject jsonObj )
QString semantic = po.value(KEY_SEMANTIC).toString();
// The Standard has changed, it doesn't return the raw int value for a type
// But a string
- QParameter* p = new QParameter(t, pname, parseType(po.value(KEY_TYPE).toString().toUtf8()));
+ QParameter* p = new QParameter(pname, parseType(po.value(KEY_TYPE).toString().toUtf8()), t);
// Parameter::StandardUniform su = parseSemanticName(semantic.toUtf8());
// if (su != Parameter::None) {
// p->setStandardUniform(su);