Modify default shader according to the gltf pbr spec
[platform/core/uifw/dali-toolkit.git] / dali-scene-loader / public-api / shader-definition-factory.cpp
index 6f9ab4e..e025ebe 100644 (file)
@@ -204,11 +204,27 @@ Index ShaderDefinitionFactory::ProduceShader(const NodeDefinition& nodeDef)
   }
 
   if(hasTransparency ||
-     materialDef.CheckTextures(MaterialDefinition::ALBEDO) ||
-     materialDef.CheckTextures(MaterialDefinition::METALLIC | MaterialDefinition::ROUGHNESS) ||
-     materialDef.CheckTextures(MaterialDefinition::NORMAL))
+     !materialDef.CheckTextures(MaterialDefinition::ALBEDO | MaterialDefinition::METALLIC) ||
+     !materialDef.CheckTextures(MaterialDefinition::NORMAL | MaterialDefinition::ROUGHNESS))
+
   {
     shaderDef.mDefines.push_back("THREE_TEX");
+
+    // For the glTF, each of basecolor, metallic_roughness, normal texture is not essential.
+    if(MaskMatch(materialDef.mFlags, MaterialDefinition::ALBEDO))
+    {
+      shaderDef.mDefines.push_back("BASECOLOR_TEX");
+    }
+
+    if(materialDef.CheckTextures(MaterialDefinition::METALLIC | MaterialDefinition::ROUGHNESS))
+    {
+      shaderDef.mDefines.push_back("METALLIC_ROUGHNESS_TEX");
+    }
+
+    if(MaskMatch(materialDef.mFlags, MaterialDefinition::NORMAL))
+    {
+      shaderDef.mDefines.push_back("NORMAL_TEX");
+    }
   }
 
   if(materialDef.GetAlphaCutoff() > 0.f)
@@ -280,6 +296,11 @@ Index ShaderDefinitionFactory::ProduceShader(const NodeDefinition& nodeDef)
     }
   }
 
+  if(meshDef.mTangentType == Property::VECTOR4)
+  {
+    shaderDef.mDefines.push_back("VEC4_TANGENT");
+  }
+
   shaderDef.mUniforms["uMaxLOD"]     = 6.f;
   shaderDef.mUniforms["uCubeMatrix"] = Matrix::IDENTITY;