summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brasser <mbrasser@ford.com>2018-12-04 14:46:29 -0600
committerMichael Brasser <michael.brasser@live.com>2018-12-05 14:29:20 +0000
commit4dbc8ff19c44377af9d9af152aded147a6cb536b (patch)
tree28df7ba1f5f189852fb119245eac4ab04f126244
parentdde33ab2eb631461f23ca29e826c99ad10a56521 (diff)
Enable ES3 rendering of MetalRoughMaterial
Change-Id: I1cc6700c9d16db1ad3e17f63a89d65c02bd8a202 Task-number: QTBUG-64390 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--src/extras/defaults/qmetalroughmaterial.cpp29
-rw-r--r--src/extras/defaults/qmetalroughmaterial_p.h4
2 files changed, 32 insertions, 1 deletions
diff --git a/src/extras/defaults/qmetalroughmaterial.cpp b/src/extras/defaults/qmetalroughmaterial.cpp
index 1cf114423..de21268f1 100644
--- a/src/extras/defaults/qmetalroughmaterial.cpp
+++ b/src/extras/defaults/qmetalroughmaterial.cpp
@@ -79,6 +79,10 @@ QMetalRoughMaterialPrivate::QMetalRoughMaterialPrivate()
, m_metalRoughGL3RenderPass(new QRenderPass())
, m_metalRoughGL3Shader(new QShaderProgram())
, m_metalRoughGL3ShaderBuilder(new QShaderProgramBuilder())
+ , m_metalRoughES3Technique(new QTechnique())
+ , m_metalRoughES3RenderPass(new QRenderPass())
+ , m_metalRoughES3Shader(new QShaderProgram())
+ , m_metalRoughES3ShaderBuilder(new QShaderProgramBuilder())
, m_filterKey(new QFilterKey)
{
m_environmentIrradianceTexture->setMagnificationFilter(QAbstractTexture::Linear);
@@ -112,7 +116,6 @@ void QMetalRoughMaterialPrivate::init()
this, &QMetalRoughMaterialPrivate::handleTextureScaleChanged);
m_metalRoughGL3Shader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/gl3/default.vert"))));
-
m_metalRoughGL3ShaderBuilder->setParent(q);
m_metalRoughGL3ShaderBuilder->setShaderProgram(m_metalRoughGL3Shader);
m_metalRoughGL3ShaderBuilder->setFragmentShaderGraph(QUrl(QStringLiteral("qrc:/shaders/graphs/metalrough.frag.json")));
@@ -122,11 +125,25 @@ void QMetalRoughMaterialPrivate::init()
QStringLiteral("ambientOcclusion"),
QStringLiteral("normal")});
+ m_metalRoughES3Shader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/es3/default.vert"))));
+ m_metalRoughES3ShaderBuilder->setParent(q);
+ m_metalRoughES3ShaderBuilder->setShaderProgram(m_metalRoughES3Shader);
+ m_metalRoughES3ShaderBuilder->setFragmentShaderGraph(QUrl(QStringLiteral("qrc:/shaders/graphs/metalrough.frag.json")));
+ m_metalRoughES3ShaderBuilder->setEnabledLayers({QStringLiteral("baseColor"),
+ QStringLiteral("metalness"),
+ QStringLiteral("roughness"),
+ QStringLiteral("ambientOcclusion"),
+ QStringLiteral("normal")});
+
m_metalRoughGL3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
m_metalRoughGL3Technique->graphicsApiFilter()->setMajorVersion(3);
m_metalRoughGL3Technique->graphicsApiFilter()->setMinorVersion(1);
m_metalRoughGL3Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::CoreProfile);
+ m_metalRoughES3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGLES);
+ m_metalRoughES3Technique->graphicsApiFilter()->setMajorVersion(3);
+ m_metalRoughES3Technique->graphicsApiFilter()->setMinorVersion(0);
+
m_filterKey->setParent(q);
m_filterKey->setName(QStringLiteral("renderingStyle"));
m_filterKey->setValue(QStringLiteral("forward"));
@@ -136,6 +153,11 @@ void QMetalRoughMaterialPrivate::init()
m_metalRoughGL3Technique->addRenderPass(m_metalRoughGL3RenderPass);
m_metalRoughEffect->addTechnique(m_metalRoughGL3Technique);
+ m_metalRoughES3Technique->addFilterKey(m_filterKey);
+ m_metalRoughES3RenderPass->setShaderProgram(m_metalRoughES3Shader);
+ m_metalRoughES3Technique->addRenderPass(m_metalRoughES3RenderPass);
+ m_metalRoughEffect->addTechnique(m_metalRoughES3Technique);
+
m_metalRoughEffect->addParameter(m_baseColorParameter);
m_metalRoughEffect->addParameter(m_metalnessParameter);
m_metalRoughEffect->addParameter(m_roughnessParameter);
@@ -291,6 +313,7 @@ void QMetalRoughMaterial::setBaseColor(const QVariant &baseColor)
d->m_metalRoughEffect->addParameter(d->m_baseColorParameter);
}
d->m_metalRoughGL3ShaderBuilder->setEnabledLayers(layers);
+ d->m_metalRoughES3ShaderBuilder->setEnabledLayers(layers);
}
void QMetalRoughMaterial::setMetalness(const QVariant &metalness)
@@ -312,6 +335,7 @@ void QMetalRoughMaterial::setMetalness(const QVariant &metalness)
d->m_metalRoughEffect->addParameter(d->m_metalnessParameter);
}
d->m_metalRoughGL3ShaderBuilder->setEnabledLayers(layers);
+ d->m_metalRoughES3ShaderBuilder->setEnabledLayers(layers);
}
void QMetalRoughMaterial::setRoughness(const QVariant &roughness)
@@ -333,6 +357,7 @@ void QMetalRoughMaterial::setRoughness(const QVariant &roughness)
d->m_metalRoughEffect->addParameter(d->m_roughnessParameter);
}
d->m_metalRoughGL3ShaderBuilder->setEnabledLayers(layers);
+ d->m_metalRoughES3ShaderBuilder->setEnabledLayers(layers);
}
void QMetalRoughMaterial::setAmbientOcclusion(const QVariant &ambientOcclusion)
@@ -351,6 +376,7 @@ void QMetalRoughMaterial::setAmbientOcclusion(const QVariant &ambientOcclusion)
d->m_metalRoughEffect->removeParameter(d->m_ambientOcclusionMapParameter);
}
d->m_metalRoughGL3ShaderBuilder->setEnabledLayers(layers);
+ d->m_metalRoughES3ShaderBuilder->setEnabledLayers(layers);
}
void QMetalRoughMaterial::setNormal(const QVariant &normal)
@@ -369,6 +395,7 @@ void QMetalRoughMaterial::setNormal(const QVariant &normal)
d->m_metalRoughEffect->removeParameter(d->m_normalMapParameter);
}
d->m_metalRoughGL3ShaderBuilder->setEnabledLayers(layers);
+ d->m_metalRoughES3ShaderBuilder->setEnabledLayers(layers);
}
void QMetalRoughMaterial::setTextureScale(float textureScale)
diff --git a/src/extras/defaults/qmetalroughmaterial_p.h b/src/extras/defaults/qmetalroughmaterial_p.h
index 838474490..e12df1a8b 100644
--- a/src/extras/defaults/qmetalroughmaterial_p.h
+++ b/src/extras/defaults/qmetalroughmaterial_p.h
@@ -99,6 +99,10 @@ public:
Qt3DRender::QRenderPass *m_metalRoughGL3RenderPass;
Qt3DRender::QShaderProgram *m_metalRoughGL3Shader;
Qt3DRender::QShaderProgramBuilder *m_metalRoughGL3ShaderBuilder;
+ Qt3DRender::QTechnique *m_metalRoughES3Technique;
+ Qt3DRender::QRenderPass *m_metalRoughES3RenderPass;
+ Qt3DRender::QShaderProgram *m_metalRoughES3Shader;
+ Qt3DRender::QShaderProgramBuilder *m_metalRoughES3ShaderBuilder;
Qt3DRender::QFilterKey *m_filterKey;
Q_DECLARE_PUBLIC(QMetalRoughMaterial)