summaryrefslogtreecommitdiffstats
path: root/src/extras
diff options
context:
space:
mode:
Diffstat (limited to 'src/extras')
-rw-r--r--src/extras/defaults/qdiffusemapmaterial.cpp20
-rw-r--r--src/extras/defaults/qdiffusemapmaterial_p.h4
-rw-r--r--src/extras/defaults/qdiffusespecularmapmaterial.cpp20
-rw-r--r--src/extras/defaults/qdiffusespecularmapmaterial_p.h4
-rw-r--r--src/extras/defaults/qdiffusespecularmaterial.cpp24
-rw-r--r--src/extras/defaults/qdiffusespecularmaterial_p.h4
-rw-r--r--src/extras/defaults/qgoochmaterial.cpp14
-rw-r--r--src/extras/defaults/qgoochmaterial_p.h3
-rw-r--r--src/extras/defaults/qmetalroughmaterial.cpp23
-rw-r--r--src/extras/defaults/qmetalroughmaterial_p.h4
-rw-r--r--src/extras/defaults/qmorphphongmaterial.cpp21
-rw-r--r--src/extras/defaults/qmorphphongmaterial_p.h4
-rw-r--r--src/extras/defaults/qnormaldiffusemapalphamaterial.cpp19
-rw-r--r--src/extras/defaults/qnormaldiffusemapmaterial.cpp20
-rw-r--r--src/extras/defaults/qnormaldiffusemapmaterial_p.h4
-rw-r--r--src/extras/defaults/qnormaldiffusespecularmapmaterial.cpp20
-rw-r--r--src/extras/defaults/qnormaldiffusespecularmapmaterial_p.h4
-rw-r--r--src/extras/defaults/qpervertexcolormaterial.cpp13
-rw-r--r--src/extras/defaults/qpervertexcolormaterial_p.h3
-rw-r--r--src/extras/defaults/qphongalphamaterial.cpp24
-rw-r--r--src/extras/defaults/qphongalphamaterial_p.h4
-rw-r--r--src/extras/defaults/qphongmaterial.cpp20
-rw-r--r--src/extras/defaults/qphongmaterial_p.h4
-rw-r--r--src/extras/defaults/qt3dwindow.cpp1
-rw-r--r--src/extras/extras.qrc1
-rw-r--r--src/extras/shaders/rhi/default.vert55
-rw-r--r--src/extras/shaders/rhi/defaultuniforms.inc30
-rw-r--r--src/extras/shaders/rhi/distancefieldtext.frag20
-rw-r--r--src/extras/shaders/rhi/distancefieldtext.vert21
-rw-r--r--src/extras/shaders/rhi/gooch.frag84
-rw-r--r--src/extras/shaders/rhi/gooch.vert22
-rw-r--r--src/extras/shaders/rhi/light.inc.frag16
-rw-r--r--src/extras/shaders/rhi/metalrough.inc.frag5
-rw-r--r--src/extras/shaders/rhi/morphphong.vert31
-rw-r--r--src/extras/shaders/rhi/pervertexcolor.frag147
-rw-r--r--src/extras/shaders/rhi/pervertexcolor.vert26
-rw-r--r--src/extras/shaders/rhi/skybox.frag32
-rw-r--r--src/extras/shaders/rhi/skybox.vert35
-rw-r--r--src/extras/shaders/rhi/unlittexture.frag10
-rw-r--r--src/extras/shaders/rhi/unlittexture.vert43
40 files changed, 736 insertions, 123 deletions
diff --git a/src/extras/defaults/qdiffusemapmaterial.cpp b/src/extras/defaults/qdiffusemapmaterial.cpp
index 83eec26a8..95ab7e9ac 100644
--- a/src/extras/defaults/qdiffusemapmaterial.cpp
+++ b/src/extras/defaults/qdiffusemapmaterial.cpp
@@ -72,13 +72,17 @@ QDiffuseMapMaterialPrivate::QDiffuseMapMaterialPrivate()
, m_diffuseMapGL3Technique(new QTechnique())
, m_diffuseMapGL2Technique(new QTechnique())
, m_diffuseMapES2Technique(new QTechnique())
+ , m_diffuseMapRHITechnique(new QTechnique())
, m_diffuseMapGL3RenderPass(new QRenderPass())
, m_diffuseMapGL2RenderPass(new QRenderPass())
, m_diffuseMapES2RenderPass(new QRenderPass())
+ , m_diffuseMapRHIRenderPass(new QRenderPass())
, m_diffuseMapGL3Shader(new QShaderProgram())
, m_diffuseMapGL3ShaderBuilder(new QShaderProgramBuilder())
, m_diffuseMapGL2ES2Shader(new QShaderProgram())
, m_diffuseMapGL2ES2ShaderBuilder(new QShaderProgramBuilder())
+ , m_diffuseMapRHIShader(new QShaderProgram())
+ , m_diffuseMapRHIShaderBuilder(new QShaderProgramBuilder())
, m_filterKey(new QFilterKey)
{
m_diffuseTexture->setMagnificationFilter(QAbstractTexture::Linear);
@@ -119,6 +123,14 @@ void QDiffuseMapMaterialPrivate::init()
QStringLiteral("specular"),
QStringLiteral("normal")});
+ m_diffuseMapRHIShader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/rhi/default.vert"))));
+ m_diffuseMapRHIShaderBuilder->setParent(q);
+ m_diffuseMapRHIShaderBuilder->setShaderProgram(m_diffuseMapRHIShader);
+ m_diffuseMapRHIShaderBuilder->setFragmentShaderGraph(QUrl(QStringLiteral("qrc:/shaders/graphs/phong.frag.json")));
+ m_diffuseMapRHIShaderBuilder->setEnabledLayers({QStringLiteral("diffuseTexture"),
+ QStringLiteral("specular"),
+ QStringLiteral("normal")});
+
m_diffuseMapGL3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
m_diffuseMapGL3Technique->graphicsApiFilter()->setMajorVersion(3);
m_diffuseMapGL3Technique->graphicsApiFilter()->setMinorVersion(1);
@@ -134,6 +146,10 @@ void QDiffuseMapMaterialPrivate::init()
m_diffuseMapES2Technique->graphicsApiFilter()->setMinorVersion(0);
m_diffuseMapES2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
+ m_diffuseMapRHITechnique->graphicsApiFilter()->setApi(QGraphicsApiFilter::RHI);
+ m_diffuseMapRHITechnique->graphicsApiFilter()->setMajorVersion(1);
+ m_diffuseMapRHITechnique->graphicsApiFilter()->setMinorVersion(0);
+
m_filterKey->setParent(q);
m_filterKey->setName(QStringLiteral("renderingStyle"));
m_filterKey->setValue(QStringLiteral("forward"));
@@ -141,18 +157,22 @@ void QDiffuseMapMaterialPrivate::init()
m_diffuseMapGL3Technique->addFilterKey(m_filterKey);
m_diffuseMapGL2Technique->addFilterKey(m_filterKey);
m_diffuseMapES2Technique->addFilterKey(m_filterKey);
+ m_diffuseMapRHITechnique->addFilterKey(m_filterKey);
m_diffuseMapGL3RenderPass->setShaderProgram(m_diffuseMapGL3Shader);
m_diffuseMapGL2RenderPass->setShaderProgram(m_diffuseMapGL2ES2Shader);
m_diffuseMapES2RenderPass->setShaderProgram(m_diffuseMapGL2ES2Shader);
+ m_diffuseMapRHIRenderPass->setShaderProgram(m_diffuseMapRHIShader);
m_diffuseMapGL3Technique->addRenderPass(m_diffuseMapGL3RenderPass);
m_diffuseMapGL2Technique->addRenderPass(m_diffuseMapGL2RenderPass);
m_diffuseMapES2Technique->addRenderPass(m_diffuseMapES2RenderPass);
+ m_diffuseMapRHITechnique->addRenderPass(m_diffuseMapRHIRenderPass);
m_diffuseMapEffect->addTechnique(m_diffuseMapGL3Technique);
m_diffuseMapEffect->addTechnique(m_diffuseMapGL2Technique);
m_diffuseMapEffect->addTechnique(m_diffuseMapES2Technique);
+ m_diffuseMapEffect->addTechnique(m_diffuseMapRHITechnique);
m_diffuseMapEffect->addParameter(m_ambientParameter);
m_diffuseMapEffect->addParameter(m_diffuseParameter);
diff --git a/src/extras/defaults/qdiffusemapmaterial_p.h b/src/extras/defaults/qdiffusemapmaterial_p.h
index cef75a3f0..d83e8bff0 100644
--- a/src/extras/defaults/qdiffusemapmaterial_p.h
+++ b/src/extras/defaults/qdiffusemapmaterial_p.h
@@ -94,13 +94,17 @@ class QDiffuseMapMaterialPrivate : public Qt3DRender::QMaterialPrivate
Qt3DRender::QTechnique *m_diffuseMapGL3Technique;
Qt3DRender::QTechnique *m_diffuseMapGL2Technique;
Qt3DRender::QTechnique *m_diffuseMapES2Technique;
+ Qt3DRender::QTechnique *m_diffuseMapRHITechnique;
Qt3DRender::QRenderPass *m_diffuseMapGL3RenderPass;
Qt3DRender::QRenderPass *m_diffuseMapGL2RenderPass;
Qt3DRender::QRenderPass *m_diffuseMapES2RenderPass;
+ Qt3DRender::QRenderPass *m_diffuseMapRHIRenderPass;
Qt3DRender::QShaderProgram *m_diffuseMapGL3Shader;
Qt3DRender::QShaderProgramBuilder *m_diffuseMapGL3ShaderBuilder;
Qt3DRender::QShaderProgram *m_diffuseMapGL2ES2Shader;
Qt3DRender::QShaderProgramBuilder *m_diffuseMapGL2ES2ShaderBuilder;
+ Qt3DRender::QShaderProgram *m_diffuseMapRHIShader;
+ Qt3DRender::QShaderProgramBuilder *m_diffuseMapRHIShaderBuilder;
Qt3DRender::QFilterKey *m_filterKey;
Q_DECLARE_PUBLIC(QDiffuseMapMaterial)
diff --git a/src/extras/defaults/qdiffusespecularmapmaterial.cpp b/src/extras/defaults/qdiffusespecularmapmaterial.cpp
index 9a1092fbc..15dcb36bf 100644
--- a/src/extras/defaults/qdiffusespecularmapmaterial.cpp
+++ b/src/extras/defaults/qdiffusespecularmapmaterial.cpp
@@ -73,13 +73,17 @@ QDiffuseSpecularMapMaterialPrivate::QDiffuseSpecularMapMaterialPrivate()
, m_diffuseSpecularMapGL3Technique(new QTechnique())
, m_diffuseSpecularMapGL2Technique(new QTechnique())
, m_diffuseSpecularMapES2Technique(new QTechnique())
+ , m_diffuseSpecularMapRHITechnique(new QTechnique())
, m_diffuseSpecularMapGL3RenderPass(new QRenderPass())
, m_diffuseSpecularMapGL2RenderPass(new QRenderPass())
, m_diffuseSpecularMapES2RenderPass(new QRenderPass())
+ , m_diffuseSpecularMapRHIRenderPass(new QRenderPass())
, m_diffuseSpecularMapGL3Shader(new QShaderProgram())
, m_diffuseSpecularMapGL3ShaderBuilder(new QShaderProgramBuilder())
, m_diffuseSpecularMapGL2ES2Shader(new QShaderProgram())
, m_diffuseSpecularMapGL2ES2ShaderBuilder(new QShaderProgramBuilder())
+ , m_diffuseSpecularMapRHIShader(new QShaderProgram())
+ , m_diffuseSpecularMapRHIShaderBuilder(new QShaderProgramBuilder())
, m_filterKey(new QFilterKey)
{
m_diffuseTexture->setMagnificationFilter(QAbstractTexture::Linear);
@@ -126,6 +130,14 @@ void QDiffuseSpecularMapMaterialPrivate::init()
QStringLiteral("specularTexture"),
QStringLiteral("normal")});
+ m_diffuseSpecularMapRHIShader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/rhi/default.vert"))));
+ m_diffuseSpecularMapRHIShaderBuilder->setParent(q);
+ m_diffuseSpecularMapRHIShaderBuilder->setShaderProgram(m_diffuseSpecularMapRHIShader);
+ m_diffuseSpecularMapRHIShaderBuilder->setFragmentShaderGraph(QUrl(QStringLiteral("qrc:/shaders/graphs/phong.frag.json")));
+ m_diffuseSpecularMapRHIShaderBuilder->setEnabledLayers({QStringLiteral("diffuseTexture"),
+ QStringLiteral("specularTexture"),
+ QStringLiteral("normal")});
+
m_diffuseSpecularMapGL3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
m_diffuseSpecularMapGL3Technique->graphicsApiFilter()->setMajorVersion(3);
m_diffuseSpecularMapGL3Technique->graphicsApiFilter()->setMinorVersion(1);
@@ -141,6 +153,10 @@ void QDiffuseSpecularMapMaterialPrivate::init()
m_diffuseSpecularMapES2Technique->graphicsApiFilter()->setMinorVersion(0);
m_diffuseSpecularMapES2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
+ m_diffuseSpecularMapRHITechnique->graphicsApiFilter()->setApi(QGraphicsApiFilter::RHI);
+ m_diffuseSpecularMapRHITechnique->graphicsApiFilter()->setMajorVersion(1);
+ m_diffuseSpecularMapRHITechnique->graphicsApiFilter()->setMinorVersion(0);
+
m_filterKey->setParent(q);
m_filterKey->setName(QStringLiteral("renderingStyle"));
m_filterKey->setValue(QStringLiteral("forward"));
@@ -148,18 +164,22 @@ void QDiffuseSpecularMapMaterialPrivate::init()
m_diffuseSpecularMapGL3Technique->addFilterKey(m_filterKey);
m_diffuseSpecularMapGL2Technique->addFilterKey(m_filterKey);
m_diffuseSpecularMapES2Technique->addFilterKey(m_filterKey);
+ m_diffuseSpecularMapRHITechnique->addFilterKey(m_filterKey);
m_diffuseSpecularMapGL3RenderPass->setShaderProgram(m_diffuseSpecularMapGL3Shader);
m_diffuseSpecularMapGL2RenderPass->setShaderProgram(m_diffuseSpecularMapGL2ES2Shader);
m_diffuseSpecularMapES2RenderPass->setShaderProgram(m_diffuseSpecularMapGL2ES2Shader);
+ m_diffuseSpecularMapRHIRenderPass->setShaderProgram(m_diffuseSpecularMapRHIShader);
m_diffuseSpecularMapGL3Technique->addRenderPass(m_diffuseSpecularMapGL3RenderPass);
m_diffuseSpecularMapGL2Technique->addRenderPass(m_diffuseSpecularMapGL2RenderPass);
m_diffuseSpecularMapES2Technique->addRenderPass(m_diffuseSpecularMapES2RenderPass);
+ m_diffuseSpecularMapRHITechnique->addRenderPass(m_diffuseSpecularMapRHIRenderPass);
m_diffuseSpecularMapEffect->addTechnique(m_diffuseSpecularMapGL3Technique);
m_diffuseSpecularMapEffect->addTechnique(m_diffuseSpecularMapGL2Technique);
m_diffuseSpecularMapEffect->addTechnique(m_diffuseSpecularMapES2Technique);
+ m_diffuseSpecularMapEffect->addTechnique(m_diffuseSpecularMapRHITechnique);
m_diffuseSpecularMapEffect->addParameter(m_ambientParameter);
m_diffuseSpecularMapEffect->addParameter(m_diffuseParameter);
diff --git a/src/extras/defaults/qdiffusespecularmapmaterial_p.h b/src/extras/defaults/qdiffusespecularmapmaterial_p.h
index f80922dff..021836c14 100644
--- a/src/extras/defaults/qdiffusespecularmapmaterial_p.h
+++ b/src/extras/defaults/qdiffusespecularmapmaterial_p.h
@@ -96,13 +96,17 @@ public:
Qt3DRender::QTechnique *m_diffuseSpecularMapGL3Technique;
Qt3DRender::QTechnique *m_diffuseSpecularMapGL2Technique;
Qt3DRender::QTechnique *m_diffuseSpecularMapES2Technique;
+ Qt3DRender::QTechnique *m_diffuseSpecularMapRHITechnique;
Qt3DRender::QRenderPass *m_diffuseSpecularMapGL3RenderPass;
Qt3DRender::QRenderPass *m_diffuseSpecularMapGL2RenderPass;
Qt3DRender::QRenderPass *m_diffuseSpecularMapES2RenderPass;
+ Qt3DRender::QRenderPass *m_diffuseSpecularMapRHIRenderPass;
Qt3DRender::QShaderProgram *m_diffuseSpecularMapGL3Shader;
Qt3DRender::QShaderProgramBuilder *m_diffuseSpecularMapGL3ShaderBuilder;
Qt3DRender::QShaderProgram *m_diffuseSpecularMapGL2ES2Shader;
Qt3DRender::QShaderProgramBuilder *m_diffuseSpecularMapGL2ES2ShaderBuilder;
+ Qt3DRender::QShaderProgram *m_diffuseSpecularMapRHIShader;
+ Qt3DRender::QShaderProgramBuilder *m_diffuseSpecularMapRHIShaderBuilder;
Qt3DRender::QFilterKey *m_filterKey;
Q_DECLARE_PUBLIC(QDiffuseSpecularMapMaterial)
diff --git a/src/extras/defaults/qdiffusespecularmaterial.cpp b/src/extras/defaults/qdiffusespecularmaterial.cpp
index 8938ce19a..2cb4c137c 100644
--- a/src/extras/defaults/qdiffusespecularmaterial.cpp
+++ b/src/extras/defaults/qdiffusespecularmaterial.cpp
@@ -78,13 +78,17 @@ QDiffuseSpecularMaterialPrivate::QDiffuseSpecularMaterialPrivate()
, m_gl3Technique(new QTechnique())
, m_gl2Technique(new QTechnique())
, m_es2Technique(new QTechnique())
+ , m_rhiTechnique(new QTechnique())
, m_gl3RenderPass(new QRenderPass())
, m_gl2RenderPass(new QRenderPass())
, m_es2RenderPass(new QRenderPass())
+ , m_rhiRenderPass(new QRenderPass())
, m_gl3Shader(new QShaderProgram())
, m_gl3ShaderBuilder(new QShaderProgramBuilder())
, m_gl2es2Shader(new QShaderProgram())
, m_gl2es2ShaderBuilder(new QShaderProgramBuilder())
+ , m_rhiShader(new QShaderProgram())
+ , m_rhiShaderBuilder(new QShaderProgramBuilder())
, m_noDepthMask(new QNoDepthMask())
, m_blendState(new QBlendEquationArguments())
, m_blendEquation(new QBlendEquation())
@@ -127,6 +131,14 @@ void QDiffuseSpecularMaterialPrivate::init()
QStringLiteral("specular"),
QStringLiteral("normal")});
+ m_rhiShader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/rhi/default.vert"))));
+ m_rhiShaderBuilder->setParent(q);
+ m_rhiShaderBuilder->setShaderProgram(m_rhiShader);
+ m_rhiShaderBuilder->setFragmentShaderGraph(QUrl(QStringLiteral("qrc:/shaders/graphs/phong.frag.json")));
+ m_rhiShaderBuilder->setEnabledLayers({QStringLiteral("diffuse"),
+ QStringLiteral("specular"),
+ QStringLiteral("normal")});
+
m_gl3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
m_gl3Technique->graphicsApiFilter()->setMajorVersion(3);
@@ -143,6 +155,10 @@ void QDiffuseSpecularMaterialPrivate::init()
m_es2Technique->graphicsApiFilter()->setMinorVersion(0);
m_es2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
+ m_rhiTechnique->graphicsApiFilter()->setApi(QGraphicsApiFilter::RHI);
+ m_rhiTechnique->graphicsApiFilter()->setMajorVersion(1);
+ m_rhiTechnique->graphicsApiFilter()->setMinorVersion(0);
+
m_noDepthMask->setEnabled(false);
m_blendState->setEnabled(false);
m_blendState->setSourceRgb(QBlendEquationArguments::SourceAlpha);
@@ -153,6 +169,7 @@ void QDiffuseSpecularMaterialPrivate::init()
m_gl3RenderPass->setShaderProgram(m_gl3Shader);
m_gl2RenderPass->setShaderProgram(m_gl2es2Shader);
m_es2RenderPass->setShaderProgram(m_gl2es2Shader);
+ m_rhiRenderPass->setShaderProgram(m_rhiShader);
m_gl3RenderPass->addRenderState(m_noDepthMask);
m_gl3RenderPass->addRenderState(m_blendState);
@@ -166,9 +183,14 @@ void QDiffuseSpecularMaterialPrivate::init()
m_es2RenderPass->addRenderState(m_blendState);
m_es2RenderPass->addRenderState(m_blendEquation);
+ m_rhiRenderPass->addRenderState(m_noDepthMask);
+ m_rhiRenderPass->addRenderState(m_blendState);
+ m_rhiRenderPass->addRenderState(m_blendEquation);
+
m_gl3Technique->addRenderPass(m_gl3RenderPass);
m_gl2Technique->addRenderPass(m_gl2RenderPass);
m_es2Technique->addRenderPass(m_es2RenderPass);
+ m_rhiTechnique->addRenderPass(m_rhiRenderPass);
m_filterKey->setParent(q);
m_filterKey->setName(QStringLiteral("renderingStyle"));
@@ -177,10 +199,12 @@ void QDiffuseSpecularMaterialPrivate::init()
m_gl3Technique->addFilterKey(m_filterKey);
m_gl2Technique->addFilterKey(m_filterKey);
m_es2Technique->addFilterKey(m_filterKey);
+ m_rhiTechnique->addFilterKey(m_filterKey);
m_effect->addTechnique(m_gl3Technique);
m_effect->addTechnique(m_gl2Technique);
m_effect->addTechnique(m_es2Technique);
+ m_effect->addTechnique(m_rhiTechnique);
m_effect->addParameter(m_ambientParameter);
m_effect->addParameter(m_diffuseParameter);
diff --git a/src/extras/defaults/qdiffusespecularmaterial_p.h b/src/extras/defaults/qdiffusespecularmaterial_p.h
index 2b0b2184f..9e2b2bbbb 100644
--- a/src/extras/defaults/qdiffusespecularmaterial_p.h
+++ b/src/extras/defaults/qdiffusespecularmaterial_p.h
@@ -97,13 +97,17 @@ public:
Qt3DRender::QTechnique *m_gl3Technique;
Qt3DRender::QTechnique *m_gl2Technique;
Qt3DRender::QTechnique *m_es2Technique;
+ Qt3DRender::QTechnique *m_rhiTechnique;
Qt3DRender::QRenderPass *m_gl3RenderPass;
Qt3DRender::QRenderPass *m_gl2RenderPass;
Qt3DRender::QRenderPass *m_es2RenderPass;
+ Qt3DRender::QRenderPass *m_rhiRenderPass;
Qt3DRender::QShaderProgram *m_gl3Shader;
Qt3DRender::QShaderProgramBuilder *m_gl3ShaderBuilder;
Qt3DRender::QShaderProgram *m_gl2es2Shader;
Qt3DRender::QShaderProgramBuilder *m_gl2es2ShaderBuilder;
+ Qt3DRender::QShaderProgram *m_rhiShader;
+ Qt3DRender::QShaderProgramBuilder *m_rhiShaderBuilder;
Qt3DRender::QNoDepthMask *m_noDepthMask;
Qt3DRender::QBlendEquationArguments *m_blendState;
Qt3DRender::QBlendEquation *m_blendEquation;
diff --git a/src/extras/defaults/qgoochmaterial.cpp b/src/extras/defaults/qgoochmaterial.cpp
index 57ec359b3..b5665d776 100644
--- a/src/extras/defaults/qgoochmaterial.cpp
+++ b/src/extras/defaults/qgoochmaterial.cpp
@@ -65,11 +65,14 @@ QGoochMaterialPrivate::QGoochMaterialPrivate()
, m_gl3Technique(new Qt3DRender::QTechnique)
, m_gl2Technique(new Qt3DRender::QTechnique)
, m_es2Technique(new Qt3DRender::QTechnique)
+ , m_rhiTechnique(new Qt3DRender::QTechnique)
, m_gl3RenderPass(new Qt3DRender::QRenderPass)
, m_gl2RenderPass(new Qt3DRender::QRenderPass)
, m_es2RenderPass(new Qt3DRender::QRenderPass)
+ , m_rhiRenderPass(new Qt3DRender::QRenderPass)
, m_gl3Shader(new Qt3DRender::QShaderProgram)
, m_gl2ES2Shader(new Qt3DRender::QShaderProgram)
+ , m_rhiShader(new Qt3DRender::QShaderProgram)
, m_filterKey(new Qt3DRender::QFilterKey)
{
}
@@ -97,6 +100,8 @@ void QGoochMaterialPrivate::init()
m_gl3Shader->setFragmentShaderCode(Qt3DRender::QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/gl3/gooch.frag"))));
m_gl2ES2Shader->setVertexShaderCode(Qt3DRender::QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/es2/gooch.vert"))));
m_gl2ES2Shader->setFragmentShaderCode(Qt3DRender::QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/es2/gooch.frag"))));
+ m_rhiShader->setVertexShaderCode(Qt3DRender::QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/rhi/gooch.vert"))));
+ m_rhiShader->setFragmentShaderCode(Qt3DRender::QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/rhi/gooch.frag"))));
m_gl3Technique->graphicsApiFilter()->setApi(Qt3DRender::QGraphicsApiFilter::OpenGL);
m_gl3Technique->graphicsApiFilter()->setMajorVersion(3);
@@ -113,6 +118,11 @@ void QGoochMaterialPrivate::init()
m_es2Technique->graphicsApiFilter()->setMinorVersion(0);
m_es2Technique->graphicsApiFilter()->setProfile(Qt3DRender::QGraphicsApiFilter::NoProfile);
+ m_rhiTechnique->graphicsApiFilter()->setApi(Qt3DRender::QGraphicsApiFilter::RHI);
+ m_rhiTechnique->graphicsApiFilter()->setMajorVersion(1);
+ m_rhiTechnique->graphicsApiFilter()->setMinorVersion(0);
+ m_rhiTechnique->graphicsApiFilter()->setProfile(Qt3DRender::QGraphicsApiFilter::CoreProfile);
+
m_filterKey->setParent(q);
m_filterKey->setName(QStringLiteral("renderingStyle"));
m_filterKey->setValue(QStringLiteral("forward"));
@@ -120,18 +130,22 @@ void QGoochMaterialPrivate::init()
m_gl3Technique->addFilterKey(m_filterKey);
m_gl2Technique->addFilterKey(m_filterKey);
m_es2Technique->addFilterKey(m_filterKey);
+ m_rhiTechnique->addFilterKey(m_filterKey);
m_gl3RenderPass->setShaderProgram(m_gl3Shader);
m_gl2RenderPass->setShaderProgram(m_gl2ES2Shader);
m_es2RenderPass->setShaderProgram(m_gl2ES2Shader);
+ m_rhiRenderPass->setShaderProgram(m_rhiShader);
m_gl3Technique->addRenderPass(m_gl3RenderPass);
m_gl2Technique->addRenderPass(m_gl2RenderPass);
m_es2Technique->addRenderPass(m_es2RenderPass);
+ m_rhiTechnique->addRenderPass(m_rhiRenderPass);
m_effect->addTechnique(m_gl3Technique);
m_effect->addTechnique(m_gl2Technique);
m_effect->addTechnique(m_es2Technique);
+ m_effect->addTechnique(m_rhiTechnique);
m_effect->addParameter(m_diffuseParameter);
m_effect->addParameter(m_specularParameter);
diff --git a/src/extras/defaults/qgoochmaterial_p.h b/src/extras/defaults/qgoochmaterial_p.h
index d4ef256f6..aca9ce639 100644
--- a/src/extras/defaults/qgoochmaterial_p.h
+++ b/src/extras/defaults/qgoochmaterial_p.h
@@ -93,11 +93,14 @@ public:
Qt3DRender::QTechnique *m_gl3Technique;
Qt3DRender::QTechnique *m_gl2Technique;
Qt3DRender::QTechnique *m_es2Technique;
+ Qt3DRender::QTechnique *m_rhiTechnique;
Qt3DRender::QRenderPass *m_gl3RenderPass;
Qt3DRender::QRenderPass *m_gl2RenderPass;
Qt3DRender::QRenderPass *m_es2RenderPass;
+ Qt3DRender::QRenderPass *m_rhiRenderPass;
Qt3DRender::QShaderProgram *m_gl3Shader;
Qt3DRender::QShaderProgram *m_gl2ES2Shader;
+ Qt3DRender::QShaderProgram *m_rhiShader;
Qt3DRender::QFilterKey *m_filterKey;
Q_DECLARE_PUBLIC(QGoochMaterial)
diff --git a/src/extras/defaults/qmetalroughmaterial.cpp b/src/extras/defaults/qmetalroughmaterial.cpp
index 7d5ee61ea..7aecfa65d 100644
--- a/src/extras/defaults/qmetalroughmaterial.cpp
+++ b/src/extras/defaults/qmetalroughmaterial.cpp
@@ -79,6 +79,10 @@ QMetalRoughMaterialPrivate::QMetalRoughMaterialPrivate()
, m_metalRoughES3RenderPass(new QRenderPass())
, m_metalRoughES3Shader(new QShaderProgram())
, m_metalRoughES3ShaderBuilder(new QShaderProgramBuilder())
+ , m_metalRoughRHITechnique(new QTechnique())
+ , m_metalRoughRHIRenderPass(new QRenderPass())
+ , m_metalRoughRHIShader(new QShaderProgram())
+ , m_metalRoughRHIShaderBuilder(new QShaderProgramBuilder())
, m_filterKey(new QFilterKey)
{
}
@@ -120,6 +124,16 @@ void QMetalRoughMaterialPrivate::init()
QStringLiteral("ambientOcclusion"),
QStringLiteral("normal")});
+ m_metalRoughRHIShader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/rhi/default.vert"))));
+ m_metalRoughRHIShaderBuilder->setParent(q);
+ m_metalRoughRHIShaderBuilder->setShaderProgram(m_metalRoughRHIShader);
+ m_metalRoughRHIShaderBuilder->setFragmentShaderGraph(QUrl(QStringLiteral("qrc:/shaders/graphs/metalrough.frag.json")));
+ m_metalRoughRHIShaderBuilder->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);
@@ -129,6 +143,10 @@ void QMetalRoughMaterialPrivate::init()
m_metalRoughES3Technique->graphicsApiFilter()->setMajorVersion(3);
m_metalRoughES3Technique->graphicsApiFilter()->setMinorVersion(0);
+ m_metalRoughRHITechnique->graphicsApiFilter()->setApi(QGraphicsApiFilter::RHI);
+ m_metalRoughRHITechnique->graphicsApiFilter()->setMajorVersion(1);
+ m_metalRoughRHITechnique->graphicsApiFilter()->setMinorVersion(0);
+
m_filterKey->setParent(q);
m_filterKey->setName(QStringLiteral("renderingStyle"));
m_filterKey->setValue(QStringLiteral("forward"));
@@ -143,6 +161,11 @@ void QMetalRoughMaterialPrivate::init()
m_metalRoughES3Technique->addRenderPass(m_metalRoughES3RenderPass);
m_metalRoughEffect->addTechnique(m_metalRoughES3Technique);
+ m_metalRoughRHITechnique->addFilterKey(m_filterKey);
+ m_metalRoughRHIRenderPass->setShaderProgram(m_metalRoughRHIShader);
+ m_metalRoughRHITechnique->addRenderPass(m_metalRoughRHIRenderPass);
+ m_metalRoughEffect->addTechnique(m_metalRoughRHITechnique);
+
// Given parameters a parent
m_baseColorMapParameter->setParent(m_metalRoughEffect);
m_metalnessMapParameter->setParent(m_metalRoughEffect);
diff --git a/src/extras/defaults/qmetalroughmaterial_p.h b/src/extras/defaults/qmetalroughmaterial_p.h
index 4d8b68320..15a869ff1 100644
--- a/src/extras/defaults/qmetalroughmaterial_p.h
+++ b/src/extras/defaults/qmetalroughmaterial_p.h
@@ -99,6 +99,10 @@ public:
Qt3DRender::QRenderPass *m_metalRoughES3RenderPass;
Qt3DRender::QShaderProgram *m_metalRoughES3Shader;
Qt3DRender::QShaderProgramBuilder *m_metalRoughES3ShaderBuilder;
+ Qt3DRender::QTechnique *m_metalRoughRHITechnique;
+ Qt3DRender::QRenderPass *m_metalRoughRHIRenderPass;
+ Qt3DRender::QShaderProgram *m_metalRoughRHIShader;
+ Qt3DRender::QShaderProgramBuilder *m_metalRoughRHIShaderBuilder;
Qt3DRender::QFilterKey *m_filterKey;
Q_DECLARE_PUBLIC(QMetalRoughMaterial)
diff --git a/src/extras/defaults/qmorphphongmaterial.cpp b/src/extras/defaults/qmorphphongmaterial.cpp
index 1711a21dd..8469fc127 100644
--- a/src/extras/defaults/qmorphphongmaterial.cpp
+++ b/src/extras/defaults/qmorphphongmaterial.cpp
@@ -66,13 +66,17 @@ QMorphPhongMaterialPrivate::QMorphPhongMaterialPrivate()
, m_phongGL3Technique(new QTechnique())
, m_phongGL2Technique(new QTechnique())
, m_phongES2Technique(new QTechnique())
+ , m_phongRHITechnique(new QTechnique())
, m_phongGL3RenderPass(new QRenderPass())
, m_phongGL2RenderPass(new QRenderPass())
, m_phongES2RenderPass(new QRenderPass())
+ , m_phongRHIRenderPass(new QRenderPass())
, m_phongGL3Shader(new QShaderProgram())
, m_phongGL2ES2Shader(new QShaderProgram())
+ , m_phongRHIShader(new QShaderProgram())
, m_phongGL3ShaderBuilder(new QShaderProgramBuilder())
, m_phongGL2ES2ShaderBuilder(new QShaderProgramBuilder())
+ , m_phongRHIShaderBuilder(new QShaderProgramBuilder())
, m_filterKey(new QFilterKey)
{
}
@@ -99,6 +103,7 @@ void QMorphPhongMaterialPrivate::init()
m_phongGL3ShaderBuilder->setEnabledLayers({QStringLiteral("diffuse"),
QStringLiteral("specular"),
QStringLiteral("normal")});
+
m_phongGL2ES2Shader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/es2/morphphong.vert"))));
m_phongGL2ES2ShaderBuilder->setParent(q);
m_phongGL2ES2ShaderBuilder->setShaderProgram(m_phongGL2ES2Shader);
@@ -107,6 +112,14 @@ void QMorphPhongMaterialPrivate::init()
QStringLiteral("specular"),
QStringLiteral("normal")});
+ m_phongRHIShader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/rhi/morphphong.vert"))));
+ m_phongRHIShaderBuilder->setParent(q);
+ m_phongRHIShaderBuilder->setShaderProgram(m_phongRHIShader);
+ m_phongRHIShaderBuilder->setFragmentShaderGraph(QUrl(QStringLiteral("qrc:/shaders/graphs/phong.frag.json")));
+ m_phongRHIShaderBuilder->setEnabledLayers({QStringLiteral("diffuse"),
+ QStringLiteral("specular"),
+ QStringLiteral("normal")});
+
m_phongGL3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
m_phongGL3Technique->graphicsApiFilter()->setMajorVersion(3);
m_phongGL3Technique->graphicsApiFilter()->setMinorVersion(1);
@@ -122,13 +135,19 @@ void QMorphPhongMaterialPrivate::init()
m_phongES2Technique->graphicsApiFilter()->setMinorVersion(0);
m_phongES2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
+ m_phongRHITechnique->graphicsApiFilter()->setApi(QGraphicsApiFilter::RHI);
+ m_phongRHITechnique->graphicsApiFilter()->setMajorVersion(1);
+ m_phongRHITechnique->graphicsApiFilter()->setMinorVersion(0);
+
m_phongGL3RenderPass->setShaderProgram(m_phongGL3Shader);
m_phongGL2RenderPass->setShaderProgram(m_phongGL2ES2Shader);
m_phongES2RenderPass->setShaderProgram(m_phongGL2ES2Shader);
+ m_phongRHIRenderPass->setShaderProgram(m_phongRHIShader);
m_phongGL3Technique->addRenderPass(m_phongGL3RenderPass);
m_phongGL2Technique->addRenderPass(m_phongGL2RenderPass);
m_phongES2Technique->addRenderPass(m_phongES2RenderPass);
+ m_phongRHITechnique->addRenderPass(m_phongRHIRenderPass);
m_filterKey->setParent(q);
m_filterKey->setName(QStringLiteral("renderingStyle"));
@@ -137,10 +156,12 @@ void QMorphPhongMaterialPrivate::init()
m_phongGL3Technique->addFilterKey(m_filterKey);
m_phongGL2Technique->addFilterKey(m_filterKey);
m_phongES2Technique->addFilterKey(m_filterKey);
+ m_phongRHITechnique->addFilterKey(m_filterKey);
m_phongEffect->addTechnique(m_phongGL3Technique);
m_phongEffect->addTechnique(m_phongGL2Technique);
m_phongEffect->addTechnique(m_phongES2Technique);
+ m_phongEffect->addTechnique(m_phongRHITechnique);
m_phongEffect->addParameter(m_ambientParameter);
m_phongEffect->addParameter(m_diffuseParameter);
diff --git a/src/extras/defaults/qmorphphongmaterial_p.h b/src/extras/defaults/qmorphphongmaterial_p.h
index 28b7750d9..4ee8954fe 100644
--- a/src/extras/defaults/qmorphphongmaterial_p.h
+++ b/src/extras/defaults/qmorphphongmaterial_p.h
@@ -90,13 +90,17 @@ public:
Qt3DRender::QTechnique *m_phongGL3Technique;
Qt3DRender::QTechnique *m_phongGL2Technique;
Qt3DRender::QTechnique *m_phongES2Technique;
+ Qt3DRender::QTechnique *m_phongRHITechnique;
Qt3DRender::QRenderPass *m_phongGL3RenderPass;
Qt3DRender::QRenderPass *m_phongGL2RenderPass;
Qt3DRender::QRenderPass *m_phongES2RenderPass;
+ Qt3DRender::QRenderPass *m_phongRHIRenderPass;
Qt3DRender::QShaderProgram *m_phongGL3Shader;
Qt3DRender::QShaderProgram *m_phongGL2ES2Shader;
+ Qt3DRender::QShaderProgram *m_phongRHIShader;
Qt3DRender::QShaderProgramBuilder *m_phongGL3ShaderBuilder;
Qt3DRender::QShaderProgramBuilder *m_phongGL2ES2ShaderBuilder;
+ Qt3DRender::QShaderProgramBuilder *m_phongRHIShaderBuilder;
Qt3DRender::QFilterKey *m_filterKey;
Q_DECLARE_PUBLIC(QMorphPhongMaterial)
diff --git a/src/extras/defaults/qnormaldiffusemapalphamaterial.cpp b/src/extras/defaults/qnormaldiffusemapalphamaterial.cpp
index 27fda6879..03b8d8385 100644
--- a/src/extras/defaults/qnormaldiffusemapalphamaterial.cpp
+++ b/src/extras/defaults/qnormaldiffusemapalphamaterial.cpp
@@ -101,6 +101,14 @@ void QNormalDiffuseMapAlphaMaterialPrivate::init()
QStringLiteral("specular"),
QStringLiteral("normalTexture")});
+ m_normalDiffuseRHIShader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/rhi/default.vert"))));
+ m_normalDiffuseRHIShaderBuilder->setParent(q);
+ m_normalDiffuseRHIShaderBuilder->setShaderProgram(m_normalDiffuseRHIShader);
+ m_normalDiffuseRHIShaderBuilder->setFragmentShaderGraph(QUrl(QStringLiteral("qrc:/shaders/graphs/phong.frag.json")));
+ m_normalDiffuseRHIShaderBuilder->setEnabledLayers({QStringLiteral("diffuseTexture"),
+ QStringLiteral("specular"),
+ QStringLiteral("normalTexture")});
+
m_normalDiffuseGL3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
m_normalDiffuseGL3Technique->graphicsApiFilter()->setMajorVersion(3);
m_normalDiffuseGL3Technique->graphicsApiFilter()->setMinorVersion(1);
@@ -116,6 +124,10 @@ void QNormalDiffuseMapAlphaMaterialPrivate::init()
m_normalDiffuseES2Technique->graphicsApiFilter()->setMinorVersion(0);
m_normalDiffuseES2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
+ m_normalDiffuseRHITechnique->graphicsApiFilter()->setApi(QGraphicsApiFilter::RHI);
+ m_normalDiffuseRHITechnique->graphicsApiFilter()->setMajorVersion(1);
+ m_normalDiffuseRHITechnique->graphicsApiFilter()->setMinorVersion(0);
+
m_filterKey->setParent(q);
m_filterKey->setName(QStringLiteral("renderingStyle"));
m_filterKey->setValue(QStringLiteral("forward"));
@@ -123,6 +135,7 @@ void QNormalDiffuseMapAlphaMaterialPrivate::init()
m_normalDiffuseGL3Technique->addFilterKey(m_filterKey);
m_normalDiffuseGL2Technique->addFilterKey(m_filterKey);
m_normalDiffuseES2Technique->addFilterKey(m_filterKey);
+ m_normalDiffuseRHITechnique->addFilterKey(m_filterKey);
m_depthTest->setDepthFunction(QDepthTest::Less);
@@ -138,13 +151,19 @@ void QNormalDiffuseMapAlphaMaterialPrivate::init()
m_normalDiffuseES2RenderPass->addRenderState(m_alphaCoverage);
m_normalDiffuseES2RenderPass->addRenderState(m_depthTest);
+ m_normalDiffuseRHIRenderPass->setShaderProgram(m_normalDiffuseRHIShader);
+ m_normalDiffuseRHIRenderPass->addRenderState(m_alphaCoverage);
+ m_normalDiffuseRHIRenderPass->addRenderState(m_depthTest);
+
m_normalDiffuseGL3Technique->addRenderPass(m_normalDiffuseGL3RenderPass);
m_normalDiffuseGL2Technique->addRenderPass(m_normalDiffuseGL2RenderPass);
m_normalDiffuseES2Technique->addRenderPass(m_normalDiffuseES2RenderPass);
+ m_normalDiffuseRHITechnique->addRenderPass(m_normalDiffuseRHIRenderPass);
m_normalDiffuseEffect->addTechnique(m_normalDiffuseGL3Technique);
m_normalDiffuseEffect->addTechnique(m_normalDiffuseGL2Technique);
m_normalDiffuseEffect->addTechnique(m_normalDiffuseES2Technique);
+ m_normalDiffuseEffect->addTechnique(m_normalDiffuseRHITechnique);
m_normalDiffuseEffect->addParameter(m_ambientParameter);
m_normalDiffuseEffect->addParameter(m_diffuseParameter);
diff --git a/src/extras/defaults/qnormaldiffusemapmaterial.cpp b/src/extras/defaults/qnormaldiffusemapmaterial.cpp
index 9d41ddb32..c4f3e15b2 100644
--- a/src/extras/defaults/qnormaldiffusemapmaterial.cpp
+++ b/src/extras/defaults/qnormaldiffusemapmaterial.cpp
@@ -73,13 +73,17 @@ QNormalDiffuseMapMaterialPrivate::QNormalDiffuseMapMaterialPrivate()
, m_normalDiffuseGL3Technique(new QTechnique())
, m_normalDiffuseGL2Technique(new QTechnique())
, m_normalDiffuseES2Technique(new QTechnique())
+ , m_normalDiffuseRHITechnique(new QTechnique())
, m_normalDiffuseGL3RenderPass(new QRenderPass())
, m_normalDiffuseGL2RenderPass(new QRenderPass())
, m_normalDiffuseES2RenderPass(new QRenderPass())
+ , m_normalDiffuseRHIRenderPass(new QRenderPass())
, m_normalDiffuseGL3Shader(new QShaderProgram())
, m_normalDiffuseGL3ShaderBuilder(new QShaderProgramBuilder())
, m_normalDiffuseGL2ES2Shader(new QShaderProgram())
, m_normalDiffuseGL2ES2ShaderBuilder(new QShaderProgramBuilder())
+ , m_normalDiffuseRHIShader(new QShaderProgram())
+ , m_normalDiffuseRHIShaderBuilder(new QShaderProgramBuilder())
, m_filterKey(new QFilterKey)
{
m_diffuseTexture->setMagnificationFilter(QAbstractTexture::Linear);
@@ -128,6 +132,14 @@ void QNormalDiffuseMapMaterialPrivate::init()
QStringLiteral("specular"),
QStringLiteral("normalTexture")});
+ m_normalDiffuseRHIShader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/rhi/default.vert"))));
+ m_normalDiffuseRHIShaderBuilder->setParent(q);
+ m_normalDiffuseRHIShaderBuilder->setShaderProgram(m_normalDiffuseRHIShader);
+ m_normalDiffuseRHIShaderBuilder->setFragmentShaderGraph(QUrl(QStringLiteral("qrc:/shaders/graphs/phong.frag.json")));
+ m_normalDiffuseRHIShaderBuilder->setEnabledLayers({QStringLiteral("diffuseTexture"),
+ QStringLiteral("specular"),
+ QStringLiteral("normalTexture")});
+
m_normalDiffuseGL3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
m_normalDiffuseGL3Technique->graphicsApiFilter()->setMajorVersion(3);
m_normalDiffuseGL3Technique->graphicsApiFilter()->setMinorVersion(1);
@@ -143,6 +155,10 @@ void QNormalDiffuseMapMaterialPrivate::init()
m_normalDiffuseES2Technique->graphicsApiFilter()->setMinorVersion(0);
m_normalDiffuseES2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
+ m_normalDiffuseRHITechnique->graphicsApiFilter()->setApi(QGraphicsApiFilter::RHI);
+ m_normalDiffuseRHITechnique->graphicsApiFilter()->setMajorVersion(1);
+ m_normalDiffuseRHITechnique->graphicsApiFilter()->setMinorVersion(0);
+
m_filterKey->setParent(q);
m_filterKey->setName(QStringLiteral("renderingStyle"));
m_filterKey->setValue(QStringLiteral("forward"));
@@ -150,18 +166,22 @@ void QNormalDiffuseMapMaterialPrivate::init()
m_normalDiffuseGL3Technique->addFilterKey(m_filterKey);
m_normalDiffuseGL2Technique->addFilterKey(m_filterKey);
m_normalDiffuseES2Technique->addFilterKey(m_filterKey);
+ m_normalDiffuseRHITechnique->addFilterKey(m_filterKey);
m_normalDiffuseGL3RenderPass->setShaderProgram(m_normalDiffuseGL3Shader);
m_normalDiffuseGL2RenderPass->setShaderProgram(m_normalDiffuseGL2ES2Shader);
m_normalDiffuseES2RenderPass->setShaderProgram(m_normalDiffuseGL2ES2Shader);
+ m_normalDiffuseRHIRenderPass->setShaderProgram(m_normalDiffuseRHIShader);
m_normalDiffuseGL3Technique->addRenderPass(m_normalDiffuseGL3RenderPass);
m_normalDiffuseGL2Technique->addRenderPass(m_normalDiffuseGL2RenderPass);
m_normalDiffuseES2Technique->addRenderPass(m_normalDiffuseES2RenderPass);
+ m_normalDiffuseRHITechnique->addRenderPass(m_normalDiffuseRHIRenderPass);
m_normalDiffuseEffect->addTechnique(m_normalDiffuseGL3Technique);
m_normalDiffuseEffect->addTechnique(m_normalDiffuseGL2Technique);
m_normalDiffuseEffect->addTechnique(m_normalDiffuseES2Technique);
+ m_normalDiffuseEffect->addTechnique(m_normalDiffuseRHITechnique);
m_normalDiffuseEffect->addParameter(m_ambientParameter);
m_normalDiffuseEffect->addParameter(m_diffuseParameter);
diff --git a/src/extras/defaults/qnormaldiffusemapmaterial_p.h b/src/extras/defaults/qnormaldiffusemapmaterial_p.h
index 1ac937b1e..5a5839682 100644
--- a/src/extras/defaults/qnormaldiffusemapmaterial_p.h
+++ b/src/extras/defaults/qnormaldiffusemapmaterial_p.h
@@ -98,13 +98,17 @@ public:
Qt3DRender::QTechnique *m_normalDiffuseGL3Technique;
Qt3DRender::QTechnique *m_normalDiffuseGL2Technique;
Qt3DRender::QTechnique *m_normalDiffuseES2Technique;
+ Qt3DRender::QTechnique *m_normalDiffuseRHITechnique;
Qt3DRender::QRenderPass *m_normalDiffuseGL3RenderPass;
Qt3DRender::QRenderPass *m_normalDiffuseGL2RenderPass;
Qt3DRender::QRenderPass *m_normalDiffuseES2RenderPass;
+ Qt3DRender::QRenderPass *m_normalDiffuseRHIRenderPass;
Qt3DRender::QShaderProgram *m_normalDiffuseGL3Shader;
Qt3DRender::QShaderProgramBuilder *m_normalDiffuseGL3ShaderBuilder;
Qt3DRender::QShaderProgram *m_normalDiffuseGL2ES2Shader;
Qt3DRender::QShaderProgramBuilder *m_normalDiffuseGL2ES2ShaderBuilder;
+ Qt3DRender::QShaderProgram *m_normalDiffuseRHIShader;
+ Qt3DRender::QShaderProgramBuilder *m_normalDiffuseRHIShaderBuilder;
Qt3DRender::QFilterKey *m_filterKey;
Q_DECLARE_PUBLIC(QNormalDiffuseMapMaterial)
diff --git a/src/extras/defaults/qnormaldiffusespecularmapmaterial.cpp b/src/extras/defaults/qnormaldiffusespecularmapmaterial.cpp
index a76d9856b..66586ef18 100644
--- a/src/extras/defaults/qnormaldiffusespecularmapmaterial.cpp
+++ b/src/extras/defaults/qnormaldiffusespecularmapmaterial.cpp
@@ -75,13 +75,17 @@ QNormalDiffuseSpecularMapMaterialPrivate::QNormalDiffuseSpecularMapMaterialPriva
, m_normalDiffuseSpecularGL3Technique(new QTechnique())
, m_normalDiffuseSpecularGL2Technique(new QTechnique())
, m_normalDiffuseSpecularES2Technique(new QTechnique())
+ , m_normalDiffuseSpecularRHITechnique(new QTechnique())
, m_normalDiffuseSpecularGL3RenderPass(new QRenderPass())
, m_normalDiffuseSpecularGL2RenderPass(new QRenderPass())
, m_normalDiffuseSpecularES2RenderPass(new QRenderPass())
+ , m_normalDiffuseSpecularRHIRenderPass(new QRenderPass())
, m_normalDiffuseSpecularGL3Shader(new QShaderProgram())
, m_normalDiffuseSpecularGL3ShaderBuilder(new QShaderProgramBuilder())
, m_normalDiffuseSpecularGL2ES2Shader(new QShaderProgram())
, m_normalDiffuseSpecularGL2ES2ShaderBuilder(new QShaderProgramBuilder())
+ , m_normalDiffuseSpecularRHIShader(new QShaderProgram())
+ , m_normalDiffuseSpecularRHIShaderBuilder(new QShaderProgramBuilder())
, m_filterKey(new QFilterKey)
{
m_diffuseTexture->setMagnificationFilter(QAbstractTexture::Linear);
@@ -136,6 +140,14 @@ void QNormalDiffuseSpecularMapMaterialPrivate::init()
QStringLiteral("specularTexture"),
QStringLiteral("normalTexture")});
+ m_normalDiffuseSpecularRHIShader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/rhi/default.vert"))));
+ m_normalDiffuseSpecularRHIShaderBuilder->setParent(q);
+ m_normalDiffuseSpecularRHIShaderBuilder->setShaderProgram(m_normalDiffuseSpecularRHIShader);
+ m_normalDiffuseSpecularRHIShaderBuilder->setFragmentShaderGraph(QUrl(QStringLiteral("qrc:/shaders/graphs/phong.frag.json")));
+ m_normalDiffuseSpecularRHIShaderBuilder->setEnabledLayers({QStringLiteral("diffuseTexture"),
+ QStringLiteral("specularTexture"),
+ QStringLiteral("normalTexture")});
+
m_normalDiffuseSpecularGL3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
m_normalDiffuseSpecularGL3Technique->graphicsApiFilter()->setMajorVersion(3);
m_normalDiffuseSpecularGL3Technique->graphicsApiFilter()->setMinorVersion(1);
@@ -151,6 +163,10 @@ void QNormalDiffuseSpecularMapMaterialPrivate::init()
m_normalDiffuseSpecularES2Technique->graphicsApiFilter()->setMinorVersion(0);
m_normalDiffuseSpecularES2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
+ m_normalDiffuseSpecularRHITechnique->graphicsApiFilter()->setApi(QGraphicsApiFilter::RHI);
+ m_normalDiffuseSpecularRHITechnique->graphicsApiFilter()->setMajorVersion(1);
+ m_normalDiffuseSpecularRHITechnique->graphicsApiFilter()->setMinorVersion(0);
+
m_filterKey->setParent(q);
m_filterKey->setName(QStringLiteral("renderingStyle"));
m_filterKey->setValue(QStringLiteral("forward"));
@@ -158,18 +174,22 @@ void QNormalDiffuseSpecularMapMaterialPrivate::init()
m_normalDiffuseSpecularGL3Technique->addFilterKey(m_filterKey);
m_normalDiffuseSpecularGL2Technique->addFilterKey(m_filterKey);
m_normalDiffuseSpecularES2Technique->addFilterKey(m_filterKey);
+ m_normalDiffuseSpecularRHITechnique->addFilterKey(m_filterKey);
m_normalDiffuseSpecularGL3RenderPass->setShaderProgram(m_normalDiffuseSpecularGL3Shader);
m_normalDiffuseSpecularGL2RenderPass->setShaderProgram(m_normalDiffuseSpecularGL2ES2Shader);
m_normalDiffuseSpecularES2RenderPass->setShaderProgram(m_normalDiffuseSpecularGL2ES2Shader);
+ m_normalDiffuseSpecularRHIRenderPass->setShaderProgram(m_normalDiffuseSpecularRHIShader);
m_normalDiffuseSpecularGL3Technique->addRenderPass(m_normalDiffuseSpecularGL3RenderPass);
m_normalDiffuseSpecularGL2Technique->addRenderPass(m_normalDiffuseSpecularGL2RenderPass);
m_normalDiffuseSpecularES2Technique->addRenderPass(m_normalDiffuseSpecularES2RenderPass);
+ m_normalDiffuseSpecularRHITechnique->addRenderPass(m_normalDiffuseSpecularRHIRenderPass);
m_normalDiffuseSpecularEffect->addTechnique(m_normalDiffuseSpecularGL3Technique);
m_normalDiffuseSpecularEffect->addTechnique(m_normalDiffuseSpecularGL2Technique);
m_normalDiffuseSpecularEffect->addTechnique(m_normalDiffuseSpecularES2Technique);
+ m_normalDiffuseSpecularEffect->addTechnique(m_normalDiffuseSpecularRHITechnique);
m_normalDiffuseSpecularEffect->addParameter(m_ambientParameter);
m_normalDiffuseSpecularEffect->addParameter(m_diffuseParameter);
diff --git a/src/extras/defaults/qnormaldiffusespecularmapmaterial_p.h b/src/extras/defaults/qnormaldiffusespecularmapmaterial_p.h
index e02451cc0..0a0d519ad 100644
--- a/src/extras/defaults/qnormaldiffusespecularmapmaterial_p.h
+++ b/src/extras/defaults/qnormaldiffusespecularmapmaterial_p.h
@@ -99,13 +99,17 @@ public:
Qt3DRender::QTechnique *m_normalDiffuseSpecularGL3Technique;
Qt3DRender::QTechnique *m_normalDiffuseSpecularGL2Technique;
Qt3DRender::QTechnique *m_normalDiffuseSpecularES2Technique;
+ Qt3DRender::QTechnique *m_normalDiffuseSpecularRHITechnique;
Qt3DRender::QRenderPass *m_normalDiffuseSpecularGL3RenderPass;
Qt3DRender::QRenderPass *m_normalDiffuseSpecularGL2RenderPass;
Qt3DRender::QRenderPass *m_normalDiffuseSpecularES2RenderPass;
+ Qt3DRender::QRenderPass *m_normalDiffuseSpecularRHIRenderPass;
Qt3DRender::QShaderProgram *m_normalDiffuseSpecularGL3Shader;
Qt3DRender::QShaderProgramBuilder *m_normalDiffuseSpecularGL3ShaderBuilder;
Qt3DRender::QShaderProgram *m_normalDiffuseSpecularGL2ES2Shader;
Qt3DRender::QShaderProgramBuilder *m_normalDiffuseSpecularGL2ES2ShaderBuilder;
+ Qt3DRender::QShaderProgram *m_normalDiffuseSpecularRHIShader;
+ Qt3DRender::QShaderProgramBuilder *m_normalDiffuseSpecularRHIShaderBuilder;
Qt3DRender::QFilterKey *m_filterKey;
Q_DECLARE_PUBLIC(QNormalDiffuseSpecularMapMaterial)
diff --git a/src/extras/defaults/qpervertexcolormaterial.cpp b/src/extras/defaults/qpervertexcolormaterial.cpp
index f0462039e..ef41cbce7 100644
--- a/src/extras/defaults/qpervertexcolormaterial.cpp
+++ b/src/extras/defaults/qpervertexcolormaterial.cpp
@@ -64,11 +64,14 @@ QPerVertexColorMaterialPrivate::QPerVertexColorMaterialPrivate()
, m_vertexGL3Technique(new QTechnique())
, m_vertexGL2Technique(new QTechnique())
, m_vertexES2Technique(new QTechnique())
+ , m_vertexRHITechnique(new QTechnique())
, m_vertexGL3RenderPass(new QRenderPass())
, m_vertexGL2RenderPass(new QRenderPass())
, m_vertexES2RenderPass(new QRenderPass())
+ , m_vertexRHIRenderPass(new QRenderPass())
, m_vertexGL3Shader(new QShaderProgram())
, m_vertexGL2ES2Shader(new QShaderProgram())
+ , m_vertexRHIShader(new QShaderProgram())
, m_filterKey(new QFilterKey)
{
}
@@ -119,6 +122,8 @@ void QPerVertexColorMaterialPrivate::init()
m_vertexGL3Shader->setFragmentShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/gl3/pervertexcolor.frag"))));
m_vertexGL2ES2Shader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/es2/pervertexcolor.vert"))));
m_vertexGL2ES2Shader->setFragmentShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/es2/pervertexcolor.frag"))));
+ m_vertexRHIShader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/rhi/pervertexcolor.vert"))));
+ m_vertexRHIShader->setFragmentShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/rhi/pervertexcolor.frag"))));
m_vertexGL3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
m_vertexGL3Technique->graphicsApiFilter()->setMajorVersion(3);
@@ -135,6 +140,10 @@ void QPerVertexColorMaterialPrivate::init()
m_vertexES2Technique->graphicsApiFilter()->setMinorVersion(0);
m_vertexES2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
+ m_vertexRHITechnique->graphicsApiFilter()->setApi(QGraphicsApiFilter::RHI);
+ m_vertexRHITechnique->graphicsApiFilter()->setMajorVersion(1);
+ m_vertexRHITechnique->graphicsApiFilter()->setMinorVersion(0);
+
Q_Q(QPerVertexColorMaterial);
m_filterKey->setParent(q);
m_filterKey->setName(QStringLiteral("renderingStyle"));
@@ -143,18 +152,22 @@ void QPerVertexColorMaterialPrivate::init()
m_vertexGL3Technique->addFilterKey(m_filterKey);
m_vertexGL2Technique->addFilterKey(m_filterKey);
m_vertexES2Technique->addFilterKey(m_filterKey);
+ m_vertexRHITechnique->addFilterKey(m_filterKey);
m_vertexGL3RenderPass->setShaderProgram(m_vertexGL3Shader);
m_vertexGL2RenderPass->setShaderProgram(m_vertexGL2ES2Shader);
m_vertexES2RenderPass->setShaderProgram(m_vertexGL2ES2Shader);
+ m_vertexRHIRenderPass->setShaderProgram(m_vertexRHIShader);
m_vertexGL3Technique->addRenderPass(m_vertexGL3RenderPass);
m_vertexGL2Technique->addRenderPass(m_vertexGL2RenderPass);
m_vertexES2Technique->addRenderPass(m_vertexES2RenderPass);
+ m_vertexRHITechnique->addRenderPass(m_vertexRHIRenderPass);
m_vertexEffect->addTechnique(m_vertexGL3Technique);
m_vertexEffect->addTechnique(m_vertexGL2Technique);
m_vertexEffect->addTechnique(m_vertexES2Technique);
+ m_vertexEffect->addTechnique(m_vertexRHITechnique);
q->setEffect(m_vertexEffect);
}
diff --git a/src/extras/defaults/qpervertexcolormaterial_p.h b/src/extras/defaults/qpervertexcolormaterial_p.h
index 678353525..8c5c3eefa 100644
--- a/src/extras/defaults/qpervertexcolormaterial_p.h
+++ b/src/extras/defaults/qpervertexcolormaterial_p.h
@@ -81,11 +81,14 @@ public:
Qt3DRender::QTechnique *m_vertexGL3Technique;
Qt3DRender::QTechnique *m_vertexGL2Technique;
Qt3DRender::QTechnique *m_vertexES2Technique;
+ Qt3DRender::QTechnique *m_vertexRHITechnique;
Qt3DRender::QRenderPass *m_vertexGL3RenderPass;
Qt3DRender::QRenderPass *m_vertexGL2RenderPass;
Qt3DRender::QRenderPass *m_vertexES2RenderPass;
+ Qt3DRender::QRenderPass *m_vertexRHIRenderPass;
Qt3DRender::QShaderProgram *m_vertexGL3Shader;
Qt3DRender::QShaderProgram *m_vertexGL2ES2Shader;
+ Qt3DRender::QShaderProgram *m_vertexRHIShader;
Qt3DRender::QFilterKey *m_filterKey;
Q_DECLARE_PUBLIC(QPerVertexColorMaterial)
diff --git a/src/extras/defaults/qphongalphamaterial.cpp b/src/extras/defaults/qphongalphamaterial.cpp
index 2f705072f..8d8464d85 100644
--- a/src/extras/defaults/qphongalphamaterial.cpp
+++ b/src/extras/defaults/qphongalphamaterial.cpp
@@ -72,13 +72,17 @@ QPhongAlphaMaterialPrivate::QPhongAlphaMaterialPrivate()
, m_phongAlphaGL3Technique(new QTechnique())
, m_phongAlphaGL2Technique(new QTechnique())
, m_phongAlphaES2Technique(new QTechnique())
+ , m_phongAlphaRHITechnique(new QTechnique())
, m_phongAlphaGL3RenderPass(new QRenderPass())
, m_phongAlphaGL2RenderPass(new QRenderPass())
, m_phongAlphaES2RenderPass(new QRenderPass())
+ , m_phongAlphaRHIRenderPass(new QRenderPass())
, m_phongAlphaGL3Shader(new QShaderProgram())
, m_phongAlphaGL3ShaderBuilder(new QShaderProgramBuilder())
, m_phongAlphaGL2ES2Shader(new QShaderProgram())
, m_phongAlphaGL2ES2ShaderBuilder(new QShaderProgramBuilder())
+ , m_phongAlphaRHIShader(new QShaderProgram())
+ , m_phongAlphaRHIShaderBuilder(new QShaderProgramBuilder())
, m_noDepthMask(new QNoDepthMask())
, m_blendState(new QBlendEquationArguments())
, m_blendEquation(new QBlendEquation())
@@ -116,6 +120,14 @@ void QPhongAlphaMaterialPrivate::init()
QStringLiteral("specular"),
QStringLiteral("normal")});
+ m_phongAlphaRHIShader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/rhi/default.vert"))));
+ m_phongAlphaRHIShaderBuilder->setParent(q);
+ m_phongAlphaRHIShaderBuilder->setShaderProgram(m_phongAlphaRHIShader);
+ m_phongAlphaRHIShaderBuilder->setFragmentShaderGraph(QUrl(QStringLiteral("qrc:/shaders/graphs/phong.frag.json")));
+ m_phongAlphaRHIShaderBuilder->setEnabledLayers({QStringLiteral("diffuse"),
+ QStringLiteral("specular"),
+ QStringLiteral("normal")});
+
m_phongAlphaGL3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
m_phongAlphaGL3Technique->graphicsApiFilter()->setMajorVersion(3);
m_phongAlphaGL3Technique->graphicsApiFilter()->setMinorVersion(1);
@@ -131,6 +143,10 @@ void QPhongAlphaMaterialPrivate::init()
m_phongAlphaES2Technique->graphicsApiFilter()->setMinorVersion(0);
m_phongAlphaES2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
+ m_phongAlphaRHITechnique->graphicsApiFilter()->setApi(QGraphicsApiFilter::RHI);
+ m_phongAlphaRHITechnique->graphicsApiFilter()->setMajorVersion(1);
+ m_phongAlphaRHITechnique->graphicsApiFilter()->setMinorVersion(0);
+
m_filterKey->setParent(q);
m_filterKey->setName(QStringLiteral("renderingStyle"));
m_filterKey->setValue(QStringLiteral("forward"));
@@ -138,6 +154,7 @@ void QPhongAlphaMaterialPrivate::init()
m_phongAlphaGL3Technique->addFilterKey(m_filterKey);
m_phongAlphaGL2Technique->addFilterKey(m_filterKey);
m_phongAlphaES2Technique->addFilterKey(m_filterKey);
+ m_phongAlphaRHITechnique->addFilterKey(m_filterKey);
m_blendState->setSourceRgb(QBlendEquationArguments::SourceAlpha);
m_blendState->setDestinationRgb(QBlendEquationArguments::OneMinusSourceAlpha);
@@ -146,6 +163,7 @@ void QPhongAlphaMaterialPrivate::init()
m_phongAlphaGL3RenderPass->setShaderProgram(m_phongAlphaGL3Shader);
m_phongAlphaGL2RenderPass->setShaderProgram(m_phongAlphaGL2ES2Shader);
m_phongAlphaES2RenderPass->setShaderProgram(m_phongAlphaGL2ES2Shader);
+ m_phongAlphaRHIRenderPass->setShaderProgram(m_phongAlphaRHIShader);
m_phongAlphaGL3RenderPass->addRenderState(m_noDepthMask);
m_phongAlphaGL3RenderPass->addRenderState(m_blendState);
@@ -159,13 +177,19 @@ void QPhongAlphaMaterialPrivate::init()
m_phongAlphaES2RenderPass->addRenderState(m_blendState);
m_phongAlphaES2RenderPass->addRenderState(m_blendEquation);
+ m_phongAlphaRHIRenderPass->addRenderState(m_noDepthMask);
+ m_phongAlphaRHIRenderPass->addRenderState(m_blendState);
+ m_phongAlphaRHIRenderPass->addRenderState(m_blendEquation);
+
m_phongAlphaGL3Technique->addRenderPass(m_phongAlphaGL3RenderPass);
m_phongAlphaGL2Technique->addRenderPass(m_phongAlphaGL2RenderPass);
m_phongAlphaES2Technique->addRenderPass(m_phongAlphaES2RenderPass);
+ m_phongAlphaRHITechnique->addRenderPass(m_phongAlphaRHIRenderPass);
m_phongEffect->addTechnique(m_phongAlphaGL3Technique);
m_phongEffect->addTechnique(m_phongAlphaGL2Technique);
m_phongEffect->addTechnique(m_phongAlphaES2Technique);
+ m_phongEffect->addTechnique(m_phongAlphaRHITechnique);
m_phongEffect->addParameter(m_ambientParameter);
m_phongEffect->addParameter(m_diffuseParameter);
diff --git a/src/extras/defaults/qphongalphamaterial_p.h b/src/extras/defaults/qphongalphamaterial_p.h
index 97eaf7bc4..7909f4e34 100644
--- a/src/extras/defaults/qphongalphamaterial_p.h
+++ b/src/extras/defaults/qphongalphamaterial_p.h
@@ -94,13 +94,17 @@ public:
Qt3DRender::QTechnique *m_phongAlphaGL3Technique;
Qt3DRender::QTechnique *m_phongAlphaGL2Technique;
Qt3DRender::QTechnique *m_phongAlphaES2Technique;
+ Qt3DRender::QTechnique *m_phongAlphaRHITechnique;
Qt3DRender::QRenderPass *m_phongAlphaGL3RenderPass;
Qt3DRender::QRenderPass *m_phongAlphaGL2RenderPass;
Qt3DRender::QRenderPass *m_phongAlphaES2RenderPass;
+ Qt3DRender::QRenderPass *m_phongAlphaRHIRenderPass;
Qt3DRender::QShaderProgram *m_phongAlphaGL3Shader;
Qt3DRender::QShaderProgramBuilder *m_phongAlphaGL3ShaderBuilder;
Qt3DRender::QShaderProgram *m_phongAlphaGL2ES2Shader;
Qt3DRender::QShaderProgramBuilder *m_phongAlphaGL2ES2ShaderBuilder;
+ Qt3DRender::QShaderProgram *m_phongAlphaRHIShader;
+ Qt3DRender::QShaderProgramBuilder *m_phongAlphaRHIShaderBuilder;
Qt3DRender::QNoDepthMask *m_noDepthMask;
Qt3DRender::QBlendEquationArguments *m_blendState;
Qt3DRender::QBlendEquation *m_blendEquation;
diff --git a/src/extras/defaults/qphongmaterial.cpp b/src/extras/defaults/qphongmaterial.cpp
index 6318ea140..460bc9bb2 100644
--- a/src/extras/defaults/qphongmaterial.cpp
+++ b/src/extras/defaults/qphongmaterial.cpp
@@ -70,13 +70,17 @@ QPhongMaterialPrivate::QPhongMaterialPrivate()
, m_phongGL3Technique(new QTechnique())
, m_phongGL2Technique(new QTechnique())
, m_phongES2Technique(new QTechnique())
+ , m_phongRHITechnique(new QTechnique())
, m_phongGL3RenderPass(new QRenderPass())
, m_phongGL2RenderPass(new QRenderPass())
, m_phongES2RenderPass(new QRenderPass())
+ , m_phongRHIRenderPass(new QRenderPass())
, m_phongGL3Shader(new QShaderProgram())
, m_phongGL3ShaderBuilder(new QShaderProgramBuilder())
, m_phongGL2ES2Shader(new QShaderProgram())
, m_phongGL2ES2ShaderBuilder(new QShaderProgramBuilder())
+ , m_phongRHIShader(new QShaderProgram())
+ , m_phongRHIShaderBuilder(new QShaderProgramBuilder())
, m_filterKey(new QFilterKey)
{
}
@@ -110,6 +114,14 @@ void QPhongMaterialPrivate::init()
QStringLiteral("specular"),
QStringLiteral("normal")});
+ m_phongRHIShader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/shaders/rhi/default.vert"))));
+ m_phongRHIShaderBuilder->setParent(q);
+ m_phongRHIShaderBuilder->setShaderProgram(m_phongRHIShader);
+ m_phongRHIShaderBuilder->setFragmentShaderGraph(QUrl(QStringLiteral("qrc:/shaders/graphs/phong.frag.json")));
+ m_phongRHIShaderBuilder->setEnabledLayers({QStringLiteral("diffuse"),
+ QStringLiteral("specular"),
+ QStringLiteral("normal")});
+
m_phongGL3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
m_phongGL3Technique->graphicsApiFilter()->setMajorVersion(3);
m_phongGL3Technique->graphicsApiFilter()->setMinorVersion(1);
@@ -125,13 +137,19 @@ void QPhongMaterialPrivate::init()
m_phongES2Technique->graphicsApiFilter()->setMinorVersion(0);
m_phongES2Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::NoProfile);
+ m_phongRHITechnique->graphicsApiFilter()->setApi(QGraphicsApiFilter::RHI);
+ m_phongRHITechnique->graphicsApiFilter()->setMajorVersion(1);
+ m_phongRHITechnique->graphicsApiFilter()->setMinorVersion(0);
+
m_phongGL3RenderPass->setShaderProgram(m_phongGL3Shader);
m_phongGL2RenderPass->setShaderProgram(m_phongGL2ES2Shader);
m_phongES2RenderPass->setShaderProgram(m_phongGL2ES2Shader);
+ m_phongRHIRenderPass->setShaderProgram(m_phongRHIShader);
m_phongGL3Technique->addRenderPass(m_phongGL3RenderPass);
m_phongGL2Technique->addRenderPass(m_phongGL2RenderPass);
m_phongES2Technique->addRenderPass(m_phongES2RenderPass);
+ m_phongRHITechnique->addRenderPass(m_phongRHIRenderPass);
m_filterKey->setParent(q);
m_filterKey->setName(QStringLiteral("renderingStyle"));
@@ -140,10 +158,12 @@ void QPhongMaterialPrivate::init()
m_phongGL3Technique->addFilterKey(m_filterKey);
m_phongGL2Technique->addFilterKey(m_filterKey);
m_phongES2Technique->addFilterKey(m_filterKey);
+ m_phongRHITechnique->addFilterKey(m_filterKey);
m_phongEffect->addTechnique(m_phongGL3Technique);
m_phongEffect->addTechnique(m_phongGL2Technique);
m_phongEffect->addTechnique(m_phongES2Technique);
+ m_phongEffect->addTechnique(m_phongRHITechnique);
m_phongEffect->addParameter(m_ambientParameter);
m_phongEffect->addParameter(m_diffuseParameter);
diff --git a/src/extras/defaults/qphongmaterial_p.h b/src/extras/defaults/qphongmaterial_p.h
index f1e55242b..2d8ae1be2 100644
--- a/src/extras/defaults/qphongmaterial_p.h
+++ b/src/extras/defaults/qphongmaterial_p.h
@@ -91,13 +91,17 @@ public:
Qt3DRender::QTechnique *m_phongGL3Technique;
Qt3DRender::QTechnique *m_phongGL2Technique;
Qt3DRender::QTechnique *m_phongES2Technique;
+ Qt3DRender::QTechnique *m_phongRHITechnique;
Qt3DRender::QRenderPass *m_phongGL3RenderPass;
Qt3DRender::QRenderPass *m_phongGL2RenderPass;
Qt3DRender::QRenderPass *m_phongES2RenderPass;
+ Qt3DRender::QRenderPass *m_phongRHIRenderPass;
Qt3DRender::QShaderProgram *m_phongGL3Shader;
Qt3DRender::QShaderProgramBuilder *m_phongGL3ShaderBuilder;
Qt3DRender::QShaderProgram *m_phongGL2ES2Shader;
Qt3DRender::QShaderProgramBuilder *m_phongGL2ES2ShaderBuilder;
+ Qt3DRender::QShaderProgram *m_phongRHIShader;
+ Qt3DRender::QShaderProgramBuilder *m_phongRHIShaderBuilder;
Qt3DRender::QFilterKey *m_filterKey;
Q_DECLARE_PUBLIC(QPhongMaterial)
diff --git a/src/extras/defaults/qt3dwindow.cpp b/src/extras/defaults/qt3dwindow.cpp
index 4cf3af250..fa48dba50 100644
--- a/src/extras/defaults/qt3dwindow.cpp
+++ b/src/extras/defaults/qt3dwindow.cpp
@@ -183,7 +183,6 @@ Qt3DWindow::Qt3DWindow(QScreen *screen, Qt3DRender::API api)
format.setProfile(QSurfaceFormat::CoreProfile);
}
#endif
-
if (!userRequestedApi.isEmpty()) {
// This is used for RHI
format.setVersion(1, 0);
diff --git a/src/extras/extras.qrc b/src/extras/extras.qrc
index 8d7085264..e31a6164b 100644
--- a/src/extras/extras.qrc
+++ b/src/extras/extras.qrc
@@ -56,5 +56,6 @@
<file>shaders/rhi/distancefieldtext.frag</file>
<file>shaders/rhi/default.vert</file>
<file>shaders/rhi/coordinatesystems.inc</file>
+ <file>shaders/rhi/defaultuniforms.inc</file>
</qresource>
</RCC>
diff --git a/src/extras/shaders/rhi/default.vert b/src/extras/shaders/rhi/default.vert
index f97cd099d..5679d8681 100644
--- a/src/extras/shaders/rhi/default.vert
+++ b/src/extras/shaders/rhi/default.vert
@@ -48,23 +48,48 @@
**
****************************************************************************/
-#version 150 core
+#version 450
-in vec3 vertexPosition;
-in vec3 vertexNormal;
-in vec4 vertexTangent;
-in vec2 vertexTexCoord;
+layout(location = 0) in vec3 vertexPosition;
+layout(location = 1) in vec3 vertexNormal;
+layout(location = 2) in vec4 vertexTangent;
+layout(location = 3) in vec2 vertexTexCoord;
-out vec3 worldPosition;
-out vec3 worldNormal;
-out vec4 worldTangent;
-out vec2 texCoord;
+layout(location = 0) out vec3 worldPosition;
+layout(location = 1) out vec3 worldNormal;
+layout(location = 2) out vec4 worldTangent;
+layout(location = 3) out vec2 texCoord;
-uniform mat4 modelMatrix;
-uniform mat3 modelNormalMatrix;
-uniform mat4 modelViewProjection;
+layout(std140, binding = 0) uniform qt3d_render_view_uniforms {
+ mat4 viewMatrix;
+ mat4 projectionMatrix;
+ mat4 viewProjectionMatrix;
+ mat4 inverseViewMatrix;
+ mat4 inverseProjectionMatrix;
+ mat4 inverseViewProjectionMatrix;
+ mat4 viewportMatrix;
+ mat4 inverseViewportMatrix;
+ vec4 textureTransformMatrix;
+ vec3 eyePosition;
+ float aspectRatio;
+ float gamma;
+ float exposure;
+ float time;
+};
-uniform float texCoordScale;
+layout(std140, binding = 1) uniform qt3d_command_uniforms {
+ mat4 modelMatrix;
+ mat4 inverseModelMatrix;
+ mat4 modelViewMatrix;
+ mat3 modelNormalMatrix;
+ mat4 inverseModelViewMatrix;
+ mat4 modelViewProjection;
+ mat4 inverseModelViewProjectionMatrix;
+};
+
+layout(std140, binding = 2) uniform qt3d_extras_uniforms {
+ float texCoordScale;
+};
void main()
{
@@ -74,8 +99,8 @@ void main()
// Transform position, normal, and tangent to world space
worldPosition = vec3(modelMatrix * vec4(vertexPosition, 1.0));
worldNormal = normalize(modelNormalMatrix * vertexNormal);
- worldTangent.xyz = normalize(vec3(modelMatrix * vec4(vertexTangent.xyz, 0.0)));
- worldTangent.w = vertexTangent.w;
+ vec3 wt = normalize(vec3(modelMatrix * vec4(vertexTangent.xyz, 0.0)));
+ worldTangent = vec4(wt, vertexTangent.w);
// Calculate vertex position in clip coordinates
gl_Position = modelViewProjection * vec4(vertexPosition, 1.0);
diff --git a/src/extras/shaders/rhi/defaultuniforms.inc b/src/extras/shaders/rhi/defaultuniforms.inc
new file mode 100644
index 000000000..ad2c51d50
--- /dev/null
+++ b/src/extras/shaders/rhi/defaultuniforms.inc
@@ -0,0 +1,30 @@
+layout(std140, binding = auto) uniform qt3d_render_view_uniforms {
+ mat4 viewMatrix;
+ mat4 projectionMatrix;
+ mat4 viewProjectionMatrix;
+ mat4 inverseViewMatrix;
+ mat4 inverseProjectionMatrix;
+ mat4 inverseViewProjectionMatrix;
+ mat4 viewportMatrix;
+ mat4 inverseViewportMatrix;
+ vec4 textureTransformMatrix;
+ vec3 eyePosition;
+ float aspectRatio;
+ float gamma;
+ float exposure;
+ float time;
+};
+
+layout(std140, binding = auto) uniform qt3d_command_uniforms {
+ mat4 modelMatrix;
+ mat4 inverseModelMatrix;
+ mat4 modelViewMatrix;
+ mat3 modelNormalMatrix;
+ mat4 inverseModelViewMatrix;
+ mat4 mvp;
+ mat4 inverseModelViewProjectionMatrix;
+};
+
+layout(std140, binding = auto) uniform qt3d_extras_uniforms {
+ float texCoordScale;
+};
diff --git a/src/extras/shaders/rhi/distancefieldtext.frag b/src/extras/shaders/rhi/distancefieldtext.frag
index 998fa6e79..ec42f5056 100644
--- a/src/extras/shaders/rhi/distancefieldtext.frag
+++ b/src/extras/shaders/rhi/distancefieldtext.frag
@@ -1,15 +1,17 @@
-#version 150 core
+#version 450
-uniform sampler2D distanceFieldTexture;
-uniform float minAlpha;
-uniform float maxAlpha;
-uniform float textureSize;
-uniform vec4 color;
+layout(location = 0) in vec2 texCoord;
+layout(location = 1) in float zValue;
-in vec2 texCoord;
-in float zValue;
+layout(location = 0) out vec4 fragColor;
-out vec4 fragColor;
+layout(std140, binding = 2) uniform qt3d_custom_uniforms {
+ float minAlpha;
+ float maxAlpha;
+ float textureSize;
+ vec4 color;
+};
+layout(binding = 3) uniform sampler2D distanceFieldTexture;
void main()
{
diff --git a/src/extras/shaders/rhi/distancefieldtext.vert b/src/extras/shaders/rhi/distancefieldtext.vert
index f6743001c..02efc898f 100644
--- a/src/extras/shaders/rhi/distancefieldtext.vert
+++ b/src/extras/shaders/rhi/distancefieldtext.vert
@@ -1,13 +1,20 @@
-#version 150 core
+#version 450
-in vec3 vertexPosition;
-in vec2 vertexTexCoord;
+layout(location = 0) in vec3 vertexPosition;
+layout(location = 1) in vec2 vertexTexCoord;
-out vec2 texCoord;
-out float zValue;
+layout(location = 0) out vec2 texCoord;
+layout(location = 1) out float zValue;
-uniform mat4 modelView;
-uniform mat4 mvp;
+layout(std140, binding = 1) uniform qt3d_command_uniforms {
+ mat4 modelMatrix;
+ mat4 inverseModelMatrix;
+ mat4 modelViewMatrix;
+ mat3 modelNormalMatrix;
+ mat4 inverseModelViewMatrix;
+ mat4 mvp;
+ mat4 inverseModelViewProjectionMatrix;
+};
void main()
{
diff --git a/src/extras/shaders/rhi/gooch.frag b/src/extras/shaders/rhi/gooch.frag
index 168a862f8..8a0a32f18 100644
--- a/src/extras/shaders/rhi/gooch.frag
+++ b/src/extras/shaders/rhi/gooch.frag
@@ -1,22 +1,70 @@
-#version 150 core
+#version 450
+
+layout(location = 0) in vec3 worldPosition;
+layout(location = 1) in vec3 worldNormal;
+
+layout(location = 0) out vec4 fragColor;
+
+layout(std140, binding = 0) uniform qt3d_render_view_uniforms {
+ mat4 viewMatrix;
+ mat4 projectionMatrix;
+ mat4 viewProjectionMatrix;
+ mat4 inverseViewMatrix;
+ mat4 inverseProjectionMatrix;
+ mat4 inverseViewProjectionMatrix;
+ mat4 viewportMatrix;
+ mat4 inverseViewportMatrix;
+ vec4 textureTransformMatrix;
+ vec3 eyePosition;
+ float aspectRatio;
+ float gamma;
+ float exposure;
+ float time;
+};
+
+layout(std140, binding = 1) uniform qt3d_command_uniforms {
+ mat4 modelMatrix;
+ mat4 inverseModelMatrix;
+ mat4 modelViewMatrix;
+ mat3 modelNormalMatrix;
+ mat4 inverseModelViewMatrix;
+ mat4 mvp;
+ mat4 inverseModelViewProjectionMatrix;
+};
+
+layout(std140, binding = 2) uniform qt3d_custom_uniforms {
+ vec3 kd; // Diffuse reflectivity
+ vec3 ks; // Specular reflectivity
+ vec3 kblue; // Cool color
+ vec3 kyellow; // Warm color
+ float alpha; // Fraction of diffuse added to kblue
+ float beta; // Fraction of diffuse added to kyellow
+ float shininess; // Specular shininess factor
+};
+
+const int MAX_LIGHTS = 8;
+const int TYPE_POINT = 0;
+const int TYPE_DIRECTIONAL = 1;
+const int TYPE_SPOT = 2;
+
+struct Light {
+ int type;
+ vec3 position;
+ vec3 color;
+ float intensity;
+ vec3 direction;
+ float constantAttenuation;
+ float linearAttenuation;
+ float quadraticAttenuation;
+ float cutOffAngle;
+};
+
+layout(std140, binding = 3) uniform qt3d_light_uniforms {
+ uniform Light lights[MAX_LIGHTS];
+ uniform int lightCount;
+ uniform int envLightCount;
+};
-// TODO: Replace with a struct
-uniform vec3 kd; // Diffuse reflectivity
-uniform vec3 ks; // Specular reflectivity
-uniform vec3 kblue; // Cool color
-uniform vec3 kyellow; // Warm color
-uniform float alpha; // Fraction of diffuse added to kblue
-uniform float beta; // Fraction of diffuse added to kyellow
-uniform float shininess; // Specular shininess factor
-
-uniform vec3 eyePosition;
-
-in vec3 worldPosition;
-in vec3 worldNormal;
-
-out vec4 fragColor;
-
-#pragma include light.inc.frag
vec3 goochModel( const in vec3 pos, const in vec3 n )
{
diff --git a/src/extras/shaders/rhi/gooch.vert b/src/extras/shaders/rhi/gooch.vert
index 5230fb70e..0da69bce5 100644
--- a/src/extras/shaders/rhi/gooch.vert
+++ b/src/extras/shaders/rhi/gooch.vert
@@ -1,14 +1,20 @@
-#version 150 core
+#version 450
-in vec3 vertexPosition;
-in vec3 vertexNormal;
+layout(location = 0) in vec3 vertexPosition;
+layout(location = 1) in vec3 vertexNormal;
-out vec3 worldPosition;
-out vec3 worldNormal;
+layout(location = 0) out vec3 worldPosition;
+layout(location = 1) out vec3 worldNormal;
-uniform mat4 modelMatrix;
-uniform mat3 modelNormalMatrix;
-uniform mat4 mvp;
+layout(std140, binding = 1) uniform qt3d_command_uniforms {
+ mat4 modelMatrix;
+ mat4 inverseModelMatrix;
+ mat4 modelViewMatrix;
+ mat3 modelNormalMatrix;
+ mat4 inverseModelViewMatrix;
+ mat4 mvp;
+ mat4 inverseModelViewProjectionMatrix;
+};
void main()
{
diff --git a/src/extras/shaders/rhi/light.inc.frag b/src/extras/shaders/rhi/light.inc.frag
index 861e1ba4a..8079ae8a3 100644
--- a/src/extras/shaders/rhi/light.inc.frag
+++ b/src/extras/shaders/rhi/light.inc.frag
@@ -1,24 +1,26 @@
+#pragma include defaultuniforms.inc
+
const int MAX_LIGHTS = 8;
const int TYPE_POINT = 0;
const int TYPE_DIRECTIONAL = 1;
const int TYPE_SPOT = 2;
+
struct Light {
- int type;
vec3 position;
- vec3 color;
float intensity;
- vec3 direction;
+ vec3 color;
float constantAttenuation;
+ vec3 direction;
float linearAttenuation;
float quadraticAttenuation;
float cutOffAngle;
+ int type;
};
-
layout(std140, binding = auto) uniform qt3d_light_uniforms {
- uniform Light lights[MAX_LIGHTS];
- uniform int lightCount;
- uniform int envLightCount;
+ Light lights[MAX_LIGHTS];
+ int lightCount;
+ int envLightCount;
};
// Pre-convolved environment maps
diff --git a/src/extras/shaders/rhi/metalrough.inc.frag b/src/extras/shaders/rhi/metalrough.inc.frag
index cf85f3b22..817e1192c 100644
--- a/src/extras/shaders/rhi/metalrough.inc.frag
+++ b/src/extras/shaders/rhi/metalrough.inc.frag
@@ -48,11 +48,6 @@
**
****************************************************************************/
-// Exposure correction
-uniform float exposure = 0.0;
-// Gamma correction
-uniform float gamma = 2.2;
-
#pragma include light.inc.frag
int mipLevelCount(const in samplerCube cube)
diff --git a/src/extras/shaders/rhi/morphphong.vert b/src/extras/shaders/rhi/morphphong.vert
index 7a8bdd097..826145b20 100644
--- a/src/extras/shaders/rhi/morphphong.vert
+++ b/src/extras/shaders/rhi/morphphong.vert
@@ -1,17 +1,26 @@
-#version 150 core
+#version 450
-in vec3 vertexPosition;
-in vec3 vertexNormal;
-in vec3 vertexPositionTarget;
-in vec3 vertexNormalTarget;
+layout(location = 0) in vec3 vertexPosition;
+layout(location = 1) in vec3 vertexNormal;
+layout(location = 2) in vec3 vertexPositionTarget;
+layout(location = 3) in vec3 vertexNormalTarget;
-out vec3 worldPosition;
-out vec3 worldNormal;
+layout(location = 0) out vec3 worldPosition;
+layout(location = 1) out vec3 worldNormal;
-uniform mat4 modelMatrix;
-uniform mat3 modelNormalMatrix;
-uniform mat4 modelViewProjection;
-uniform float interpolator;
+layout(std140, binding = 1) uniform qt3d_command_uniforms {
+ mat4 modelMatrix;
+ mat4 inverseModelMatrix;
+ mat4 modelViewMatrix;
+ mat3 modelNormalMatrix;
+ mat4 inverseModelViewMatrix;
+ mat4 modelViewProjection;
+ mat4 inverseModelViewProjectionMatrix;
+};
+
+layout(std140, binding = 3) uniform qt3d_morph_uniforms {
+ float interpolator;
+};
void main()
{
diff --git a/src/extras/shaders/rhi/pervertexcolor.frag b/src/extras/shaders/rhi/pervertexcolor.frag
index 40fc066d6..da3ea149e 100644
--- a/src/extras/shaders/rhi/pervertexcolor.frag
+++ b/src/extras/shaders/rhi/pervertexcolor.frag
@@ -1,14 +1,147 @@
-#version 150 core
+#version 450
-in vec3 worldPosition;
-in vec3 worldNormal;
-in vec4 color;
+layout(location = 0) in vec3 worldPosition;
+layout(location = 1) in vec3 worldNormal;
+layout(location = 2) in vec4 color;
-out vec4 fragColor;
+layout(location = 0) out vec4 fragColor;
-uniform vec3 eyePosition;
+layout(std140, binding = 0) uniform qt3d_render_view_uniforms {
+ mat4 viewMatrix;
+ mat4 projectionMatrix;
+ mat4 viewProjectionMatrix;
+ mat4 inverseViewMatrix;
+ mat4 inverseProjectionMatrix;
+ mat4 inverseViewProjectionMatrix;
+ mat4 viewportMatrix;
+ mat4 inverseViewportMatrix;
+ vec4 textureTransformMatrix;
+ vec3 eyePosition;
+ float aspectRatio;
+ float gamma;
+ float exposure;
+ float time;
+};
-#pragma include phong.inc.frag
+layout(std140, binding = 1) uniform qt3d_command_uniforms {
+ mat4 modelMatrix;
+ mat4 inverseModelMatrix;
+ mat4 modelViewMatrix;
+ mat3 modelNormalMatrix;
+ mat4 inverseModelViewMatrix;
+ mat4 mvp;
+ mat4 inverseModelViewProjectionMatrix;
+};
+
+const int MAX_LIGHTS = 8;
+const int TYPE_POINT = 0;
+const int TYPE_DIRECTIONAL = 1;
+const int TYPE_SPOT = 2;
+
+struct Light {
+ int type;
+ vec3 position;
+ vec3 color;
+ float intensity;
+ vec3 direction;
+ float constantAttenuation;
+ float linearAttenuation;
+ float quadraticAttenuation;
+ float cutOffAngle;
+};
+
+layout(std140, binding = 2) uniform qt3d_light_uniforms {
+ uniform Light lights[MAX_LIGHTS];
+ uniform int lightCount;
+ uniform int envLightCount;
+};
+
+void adsModel(const in vec3 worldPos,
+ const in vec3 worldNormal,
+ const in vec3 worldView,
+ const in float shininess,
+ out vec3 diffuseColor,
+ out vec3 specularColor)
+{
+ diffuseColor = vec3(0.0);
+ specularColor = vec3(0.0);
+
+ // We perform all work in world space
+ vec3 n = normalize(worldNormal);
+ vec3 s = vec3(0.0);
+
+ for (int i = 0; i < lightCount; ++i) {
+ float att = 1.0;
+ float sDotN = 0.0;
+
+ if (lights[i].type != TYPE_DIRECTIONAL) {
+ // Point and Spot lights
+
+ // Light position is already in world space
+ vec3 sUnnormalized = lights[i].position - worldPos;
+ s = normalize(sUnnormalized); // Light direction
+
+ // Calculate the attenuation factor
+ sDotN = dot(s, n);
+ if (sDotN > 0.0) {
+ if (lights[i].constantAttenuation != 0.0
+ || lights[i].linearAttenuation != 0.0
+ || lights[i].quadraticAttenuation != 0.0) {
+ float dist = length(sUnnormalized);
+ att = 1.0 / (lights[i].constantAttenuation +
+ lights[i].linearAttenuation * dist +
+ lights[i].quadraticAttenuation * dist * dist);
+ }
+
+ // The light direction is in world space already
+ if (lights[i].type == TYPE_SPOT) {
+ // Check if fragment is inside or outside of the spot light cone
+ if (degrees(acos(dot(-s, lights[i].direction))) > lights[i].cutOffAngle)
+ sDotN = 0.0;
+ }
+ }
+ } else {
+ // Directional lights
+ // The light direction is in world space already
+ s = normalize(-lights[i].direction);
+ sDotN = dot(s, n);
+ }
+
+ // Calculate the diffuse factor
+ float diffuse = max(sDotN, 0.0);
+
+ // Calculate the specular factor
+ float specular = 0.0;
+ if (diffuse > 0.0 && shininess > 0.0) {
+ float normFactor = (shininess + 2.0) / 2.0;
+ vec3 r = reflect(-s, n); // Reflection direction in world space
+ specular = normFactor * pow(max(dot(r, worldView), 0.0), shininess);
+ }
+
+ // Accumulate the diffuse and specular contributions
+ diffuseColor += att * lights[i].intensity * diffuse * lights[i].color;
+ specularColor += att * lights[i].intensity * specular * lights[i].color;
+ }
+}
+
+vec4 phongFunction(const in vec4 ambient,
+ const in vec4 diffuse,
+ const in vec4 specular,
+ const in float shininess,
+ const in vec3 worldPosition,
+ const in vec3 worldView,
+ const in vec3 worldNormal)
+{
+ // Calculate the lighting model, keeping the specular component separate
+ vec3 diffuseColor, specularColor;
+ adsModel(worldPosition, worldNormal, worldView, shininess, diffuseColor, specularColor);
+
+ // Combine spec with ambient+diffuse for final fragment color
+ vec3 color = (ambient.rgb + diffuseColor) * diffuse.rgb
+ + specularColor * specular.rgb;
+
+ return vec4(color, diffuse.a);
+}
void main()
{
diff --git a/src/extras/shaders/rhi/pervertexcolor.vert b/src/extras/shaders/rhi/pervertexcolor.vert
index 1d721e945..3ae1c9fb0 100644
--- a/src/extras/shaders/rhi/pervertexcolor.vert
+++ b/src/extras/shaders/rhi/pervertexcolor.vert
@@ -1,16 +1,22 @@
-#version 150 core
+#version 450
-in vec3 vertexPosition;
-in vec3 vertexNormal;
-in vec4 vertexColor;
+layout(location = 0) in vec3 vertexPosition;
+layout(location = 1) in vec3 vertexNormal;
+layout(location = 2) in vec4 vertexColor;
-out vec3 worldPosition;
-out vec3 worldNormal;
-out vec4 color;
+layout(location = 0) out vec3 worldPosition;
+layout(location = 1) out vec3 worldNormal;
+layout(location = 2) out vec4 color;
-uniform mat4 modelMatrix;
-uniform mat3 modelNormalMatrix;
-uniform mat4 mvp;
+layout(std140, binding = 1) uniform qt3d_command_uniforms {
+ mat4 modelMatrix;
+ mat4 inverseModelMatrix;
+ mat4 modelViewMatrix;
+ mat3 modelNormalMatrix;
+ mat4 inverseModelViewMatrix;
+ mat4 mvp;
+ mat4 inverseModelViewProjectionMatrix;
+};
void main()
{
diff --git a/src/extras/shaders/rhi/skybox.frag b/src/extras/shaders/rhi/skybox.frag
index ceb13b628..649894b15 100644
--- a/src/extras/shaders/rhi/skybox.frag
+++ b/src/extras/shaders/rhi/skybox.frag
@@ -1,13 +1,33 @@
-#version 330
+#version 450
+
+layout(location = 0) in vec3 texCoord0;
+layout(location = 0) out vec4 fragColor;
-in vec3 texCoord0;
-out vec4 fragColor;
-uniform samplerCube skyboxTexture;
// Gamma correction
-uniform float gamma = 2.2;
-uniform float gammaStrength;
+layout(std140, binding = 0) uniform qt3d_render_view_uniforms {
+ mat4 viewMatrix;
+ mat4 projectionMatrix;
+ mat4 viewProjectionMatrix;
+ mat4 inverseViewMatrix;
+ mat4 inverseProjectionMatrix;
+ mat4 inverseViewProjectionMatrix;
+ mat4 viewportMatrix;
+ mat4 inverseViewportMatrix;
+ vec4 textureTransformMatrix;
+ vec3 eyePosition;
+ float aspectRatio;
+ float gamma;
+ float exposure;
+ float time;
+};
+
+layout(std140, binding = 2) uniform qt3d_morph_uniforms {
+ float gammaStrength;
+};
+
+layout(binding = 3) uniform samplerCube skyboxTexture;
vec3 gammaCorrect(const in vec3 color)
{
diff --git a/src/extras/shaders/rhi/skybox.vert b/src/extras/shaders/rhi/skybox.vert
index cac49893a..8f3de6f62 100644
--- a/src/extras/shaders/rhi/skybox.vert
+++ b/src/extras/shaders/rhi/skybox.vert
@@ -1,11 +1,34 @@
-#version 330
+#version 450
-in vec3 vertexPosition;
-out vec3 texCoord0;
+layout(location = 0) in vec3 vertexPosition;
+layout(location = 0) out vec3 texCoord0;
-uniform mat4 modelMatrix;
-uniform mat4 viewMatrix;
-uniform mat4 projectionMatrix;
+layout(std140, binding = 0) uniform qt3d_render_view_uniforms {
+ mat4 viewMatrix;
+ mat4 projectionMatrix;
+ mat4 viewProjectionMatrix;
+ mat4 inverseViewMatrix;
+ mat4 inverseProjectionMatrix;
+ mat4 inverseViewProjectionMatrix;
+ mat4 viewportMatrix;
+ mat4 inverseViewportMatrix;
+ vec4 textureTransformMatrix;
+ vec3 eyePosition;
+ float aspectRatio;
+ float gamma;
+ float exposure;
+ float time;
+};
+
+layout(std140, binding = 1) uniform qt3d_command_uniforms {
+ mat4 modelMatrix;
+ mat4 inverseModelMatrix;
+ mat4 modelViewMatrix;
+ mat3 modelNormalMatrix;
+ mat4 inverseModelViewMatrix;
+ mat4 modelViewProjection;
+ mat4 inverseModelViewProjectionMatrix;
+};
void main()
{
diff --git a/src/extras/shaders/rhi/unlittexture.frag b/src/extras/shaders/rhi/unlittexture.frag
index 8abbeee8f..e2b2c8fe2 100644
--- a/src/extras/shaders/rhi/unlittexture.frag
+++ b/src/extras/shaders/rhi/unlittexture.frag
@@ -1,11 +1,11 @@
-#version 150 core
+#version 450
-uniform sampler2D diffuseTexture;
+layout(location = 0) in vec3 position;
+layout(location = 1) in vec2 texCoord;
-in vec3 position;
-in vec2 texCoord;
+layout(location = 0) out vec4 fragColor;
-out vec4 fragColor;
+layout(binding = 3) uniform sampler2D diffuseTexture;
void main()
{
diff --git a/src/extras/shaders/rhi/unlittexture.vert b/src/extras/shaders/rhi/unlittexture.vert
index 7e245bd7f..08f06e817 100644
--- a/src/extras/shaders/rhi/unlittexture.vert
+++ b/src/extras/shaders/rhi/unlittexture.vert
@@ -1,14 +1,41 @@
-#version 150 core
+#version 450
-in vec3 vertexPosition;
-in vec2 vertexTexCoord;
+layout(location = 0) in vec3 vertexPosition;
+layout(location = 1) in vec2 vertexTexCoord;
-out vec3 position;
-out vec2 texCoord;
+layout(location = 0) out vec3 position;
+layout(location = 1) out vec2 texCoord;
-uniform mat4 modelView;
-uniform mat4 mvp;
-uniform mat3 texCoordTransform;
+layout(std140, binding = 0) uniform qt3d_render_view_uniforms {
+ mat4 viewMatrix;
+ mat4 projectionMatrix;
+ mat4 viewProjectionMatrix;
+ mat4 inverseViewMatrix;
+ mat4 inverseProjectionMatrix;
+ mat4 inverseViewProjectionMatrix;
+ mat4 viewportMatrix;
+ mat4 inverseViewportMatrix;
+ vec4 textureTransformMatrix;
+ vec3 eyePosition;
+ float aspectRatio;
+ float gamma;
+ float exposure;
+ float time;
+};
+
+layout(std140, binding = 1) uniform qt3d_command_uniforms {
+ mat4 modelMatrix;
+ mat4 inverseModelMatrix;
+ mat4 modelView;
+ mat3 modelNormalMatrix;
+ mat4 inverseModelViewMatrix;
+ mat4 mvp;
+ mat4 inverseModelViewProjectionMatrix;
+};
+
+layout(std140, binding = 2) uniform qt3d_custom_uniforms {
+ mat3 texCoordTransform;
+};
void main()
{