summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomi Korpipaa <tomi.korpipaa@qt.io>2019-03-21 10:07:51 +0200
committerTomi Korpipää <tomi.korpipaa@qt.io>2019-03-21 10:32:43 +0000
commit8d04fda51ae00cdb8f6aa1eb68ade24aea1750ac (patch)
treeafa89635d98e8530438d6b198a1fe0f58fc04f7f
parent78f9adbfd2e1fb7803b48c1746e2a30204eb07c9 (diff)
Fix illegal fragOutput for OpenGL ES
Task-number: QT3DS-3173 Change-Id: Ic6824d8da0b1f26b1e9a561b4a234f19e3c76101 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> Reviewed-by: Antti Määttä <antti.maatta@qt.io>
-rw-r--r--src/runtime/q3dscustommaterialgenerator.cpp7
-rw-r--r--src/runtime/q3dscustommaterialgenerator_p.h3
-rw-r--r--src/runtime/q3dsscenemanager.cpp3
3 files changed, 8 insertions, 5 deletions
diff --git a/src/runtime/q3dscustommaterialgenerator.cpp b/src/runtime/q3dscustommaterialgenerator.cpp
index e85eaff..2566f49 100644
--- a/src/runtime/q3dscustommaterialgenerator.cpp
+++ b/src/runtime/q3dscustommaterialgenerator.cpp
@@ -53,7 +53,7 @@ Qt3DRender::QMaterial *Q3DSCustomMaterialGenerator::generateMaterial(
ParentChildPairs *pairs, Q3DSCustomMaterialInstance *customMaterial,
Q3DSReferencedMaterial *referencedMaterial, const QVector<Qt3DRender::QParameter *> &params,
const QVector<Q3DSLightNode *> &lights, Q3DSLayerNode *layer3DS,
- const Q3DSMaterial::Pass &pass)
+ const Q3DSMaterial::Pass &pass, bool gles)
{
Qt3DRender::QMaterial *material = new Qt3DRender::QMaterial;
Qt3DRender::QEffect *effect = new Qt3DRender::QEffect;
@@ -64,7 +64,7 @@ Qt3DRender::QMaterial *Q3DSCustomMaterialGenerator::generateMaterial(
Q_ASSERT(layerData);
Q3DSShaderFeatureSet features;
- fillFeatureSet(&features, layer3DS, customMaterial, referencedMaterial);
+ fillFeatureSet(&features, layer3DS, gles, customMaterial, referencedMaterial);
Qt3DRender::QShaderProgram *shaderProgram = Q3DSShaderManager::instance().generateShaderProgram(*customMaterial,
referencedMaterial,
@@ -110,7 +110,7 @@ Qt3DRender::QMaterial *Q3DSCustomMaterialGenerator::generateMaterial(
return material;
}
-void Q3DSCustomMaterialGenerator::fillFeatureSet(Q3DSShaderFeatureSet *features, Q3DSLayerNode *layer3DS, Q3DSCustomMaterialInstance *material, Q3DSReferencedMaterial *referencedMaterial)
+void Q3DSCustomMaterialGenerator::fillFeatureSet(Q3DSShaderFeatureSet *features, Q3DSLayerNode *layer3DS, bool gles, Q3DSCustomMaterialInstance *material, Q3DSReferencedMaterial *referencedMaterial)
{
Q3DSLayerAttached *layerData = static_cast<Q3DSLayerAttached *>(layer3DS->attached());
Q_ASSERT(layerData);
@@ -140,6 +140,7 @@ void Q3DSCustomMaterialGenerator::fillFeatureSet(Q3DSShaderFeatureSet *features,
features->append(Q3DSShaderPreprocessorFeature(QLatin1String("QT3DS_ENABLE_SSDO"), false));
features->append(Q3DSShaderPreprocessorFeature(QLatin1String("QT3DS_ENABLE_SSM"), !layerData->shadowMapData.shadowCasters.isEmpty()));
features->append(Q3DSShaderPreprocessorFeature(QLatin1String("QT3DS_ENABLE_SSAO"), layerData->ssaoTextureData.enabled));
+ features->append(Q3DSShaderPreprocessorFeature(QLatin1String("Q3DS_NO_FRAGOUTPUT"), gles));
}
QT_END_NAMESPACE
diff --git a/src/runtime/q3dscustommaterialgenerator_p.h b/src/runtime/q3dscustommaterialgenerator_p.h
index 78bc106..fd2230e 100644
--- a/src/runtime/q3dscustommaterialgenerator_p.h
+++ b/src/runtime/q3dscustommaterialgenerator_p.h
@@ -61,9 +61,10 @@ public:
const QVector<Qt3DRender::QParameter *> &params,
const QVector<Q3DSLightNode *> &lights,
Q3DSLayerNode *layer3DS,
- const Q3DSMaterial::Pass &pass);
+ const Q3DSMaterial::Pass &pass, bool gles);
static void fillFeatureSet(Q3DSShaderFeatureSet *features,
Q3DSLayerNode *layer3DS,
+ bool gles,
Q3DSCustomMaterialInstance *material = nullptr,
Q3DSReferencedMaterial *referencedMaterial = nullptr);
diff --git a/src/runtime/q3dsscenemanager.cpp b/src/runtime/q3dsscenemanager.cpp
index 08b2fed..11d28be 100644
--- a/src/runtime/q3dsscenemanager.cpp
+++ b/src/runtime/q3dsscenemanager.cpp
@@ -6066,7 +6066,8 @@ void Q3DSSceneManager::buildModelMaterial(Q3DSModelNode *model3DS)
if (!passes.isEmpty()) {
// ### TODO support more than one pass
auto pass = passes.first();
- sm.materialComponent = m_customMaterialGen->generateMaterial(m_pairs, customMaterial, sm.referencingMaterial, params, lightNodes, modelData->layer3DS, pass);
+ bool gles = m_gfxLimits.format.renderableType() == QSurfaceFormat::OpenGLES;
+ sm.materialComponent = m_customMaterialGen->generateMaterial(m_pairs, customMaterial, sm.referencingMaterial, params, lightNodes, modelData->layer3DS, pass, gles);
} else {
qCDebug(lcScene, "Custom material %s has no passes. Using dummy material. Object %s will not show.",
customMaterial->id().constData(), model3DS->id().constData());