diff options
author | Tomi Korpipaa <tomi.korpipaa@qt.io> | 2019-03-21 10:07:51 +0200 |
---|---|---|
committer | Tomi Korpipää <tomi.korpipaa@qt.io> | 2019-03-21 10:32:43 +0000 |
commit | 8d04fda51ae00cdb8f6aa1eb68ade24aea1750ac (patch) | |
tree | afa89635d98e8530438d6b198a1fe0f58fc04f7f | |
parent | 78f9adbfd2e1fb7803b48c1746e2a30204eb07c9 (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.cpp | 7 | ||||
-rw-r--r-- | src/runtime/q3dscustommaterialgenerator_p.h | 3 | ||||
-rw-r--r-- | src/runtime/q3dsscenemanager.cpp | 3 |
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 *> ¶ms, 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 *> ¶ms, 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()); |