summaryrefslogtreecommitdiffstats
path: root/src/runtime/shadergenerator/q3dsshadermanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/shadergenerator/q3dsshadermanager.cpp')
-rw-r--r--src/runtime/shadergenerator/q3dsshadermanager.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/runtime/shadergenerator/q3dsshadermanager.cpp b/src/runtime/shadergenerator/q3dsshadermanager.cpp
index 361469f..6a1db41 100644
--- a/src/runtime/shadergenerator/q3dsshadermanager.cpp
+++ b/src/runtime/shadergenerator/q3dsshadermanager.cpp
@@ -850,6 +850,28 @@ Qt3DRender::QShaderProgram *Q3DSShaderManager::getBlendColorDodgeShader(Qt3DCore
return prog;
}
+Qt3DRender::QShaderProgram *Q3DSShaderManager::getEffectShader(Qt3DCore::QNode *parent,
+ const QString &name,
+ const QString &vertexShaderSrc,
+ const QString &fragmentShaderSrc)
+{
+ // No cache on this level. m_shaderProgramGenerator has one.
+
+ m_shaderProgramGenerator->beginProgram();
+ Q3DSAbstractShaderStageGenerator *vertexShader = m_shaderProgramGenerator->getStage(Q3DSShaderGeneratorStages::Vertex);
+ Q3DSAbstractShaderStageGenerator *fragmentShader = m_shaderProgramGenerator->getStage(Q3DSShaderGeneratorStages::Fragment);
+
+ vertexShader->append("\n#define VERTEX_SHADER\n#include \"effect.glsllib\"\n");
+ vertexShader->append(vertexShaderSrc.toUtf8().constData());
+
+ fragmentShader->append("\n#define FRAGMENT_SHADER\n#include \"effect.glsllib\"\n");
+ fragmentShader->append(fragmentShaderSrc.toUtf8().constData());
+
+ Qt3DRender::QShaderProgram *prog = m_shaderProgramGenerator->compileGeneratedShader(name, Q3DSShaderFeatureSet());
+ prog->setParent(parent);
+ return prog;
+}
+
Q3DSShaderManager::Q3DSShaderManager()
: m_materialShaderGenerator(&Q3DSDefaultMaterialShaderGenerator::createDefaultMaterialShaderGenerator())
, m_customMaterialShaderGenerator(&Q3DSCustomMaterialShaderGenerator::createCustomMaterialShaderGenerator())