X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-scene-loader%2Fpublic-api%2Fshader-definition-factory.cpp;h=e025ebe40df14f897efbb4f27fdf629e79d6a89e;hb=2de119eaa5b2c3947dddc35ee2621fe119e72cc0;hp=bd6b168d71822713cbe9348afe9f36f49ed4eb66;hpb=4bc73f2e78812b262f09830bb2b1d87034f34496;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-scene-loader/public-api/shader-definition-factory.cpp b/dali-scene-loader/public-api/shader-definition-factory.cpp index bd6b168..e025ebe 100644 --- a/dali-scene-loader/public-api/shader-definition-factory.cpp +++ b/dali-scene-loader/public-api/shader-definition-factory.cpp @@ -56,8 +56,6 @@ struct ResourceReceiver : IResourceReceiver } }; -const std::string PBR_SHADER_NAME = "dli_pbr"; - void RetrieveBlendShapeComponents(const std::vector& blendShapes, bool& hasPositions, bool& hasNormals, bool& hasTangents) { for(const auto& blendShape : blendShapes) @@ -72,9 +70,6 @@ uint64_t HashNode(const NodeDefinition& nodeDef, const MaterialDefinition& mater { Hash hash; - // note: could be per vertex / fragment component - in WatchViewer, these have the same name. - hash.Add(PBR_SHADER_NAME); - const bool hasTransparency = MaskMatch(materialDef.mFlags, MaterialDefinition::TRANSPARENCY); hash.Add(hasTransparency); @@ -101,6 +96,11 @@ uint64_t HashNode(const NodeDefinition& nodeDef, const MaterialDefinition& mater hash.Add("OCCL" /*USION*/); } + if(MaskMatch(materialDef.mFlags, MaterialDefinition::EMISSIVE)) + { + hash.Add("EMIS" /*SIVE*/); + } + if(MaskMatch(materialDef.mFlags, MaterialDefinition::GLTF_CHANNELS)) { hash.Add("GLTF" /*_CHANNELS*/); @@ -192,8 +192,7 @@ Index ShaderDefinitionFactory::ProduceShader(const NodeDefinition& nodeDef) } ShaderDefinition shaderDef; - shaderDef.mVertexShaderPath = PBR_SHADER_NAME + ".vsh"; - shaderDef.mFragmentShaderPath = PBR_SHADER_NAME + ".fsh"; + shaderDef.mUseBuiltInShader = true; shaderDef.mRendererState = RendererState::DEPTH_TEST | RendererState::DEPTH_WRITE | RendererState::CULL_BACK; auto& materialDef = *receiver.mMaterialDef; @@ -205,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) @@ -222,12 +237,17 @@ Index ShaderDefinitionFactory::ProduceShader(const NodeDefinition& nodeDef) shaderDef.mDefines.push_back("SSS"); } - if(MaskMatch(receiver.mMaterialDef->mFlags, MaterialDefinition::OCCLUSION)) + if(MaskMatch(materialDef.mFlags, MaterialDefinition::OCCLUSION)) { shaderDef.mDefines.push_back("OCCLUSION"); } - if(MaskMatch(receiver.mMaterialDef->mFlags, MaterialDefinition::GLTF_CHANNELS)) + if(MaskMatch(materialDef.mFlags, MaterialDefinition::EMISSIVE)) + { + shaderDef.mDefines.push_back("EMISSIVE"); + } + + if(MaskMatch(materialDef.mFlags, MaterialDefinition::GLTF_CHANNELS)) { shaderDef.mDefines.push_back("GLTF_CHANNELS"); } @@ -276,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;