X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-scene-loader%2Fpublic-api%2Fshader-definition-factory.cpp;h=843fbcf6eb032f08274cce3b9292fb2298ffdffa;hb=aefac7b91818861d25e2312ea4b63d2deb1a9a86;hp=f0a2ad8d8843640f8679d5b75745a9520703c892;hpb=bd126b5d480c08bf7a995b2c4532e80e76ec4ad2;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 f0a2ad8..843fbcf 100644 --- a/dali-scene-loader/public-api/shader-definition-factory.cpp +++ b/dali-scene-loader/public-api/shader-definition-factory.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,12 +14,12 @@ * limitations under the License. * */ -#include "dali-scene-loader/internal/hash.h" #include "dali-scene-loader/public-api/shader-definition-factory.h" -#include "dali-scene-loader/public-api/node-definition.h" +#include +#include "dali-scene-loader/internal/hash.h" #include "dali-scene-loader/public-api/blend-shape-details.h" +#include "dali-scene-loader/public-api/node-definition.h" #include "dali/devel-api/common/map-wrapper.h" -#include namespace Dali { @@ -29,28 +29,29 @@ namespace { struct ResourceReceiver : IResourceReceiver { - const ResourceBundle& mResources; - const MeshDefinition* mMeshDef = nullptr; + const ResourceBundle& mResources; + const MeshDefinition* mMeshDef = nullptr; const MaterialDefinition* mMaterialDef = nullptr; ResourceReceiver(const ResourceBundle& resources) : mResources(resources) - {} + { + } void Register(ResourceType::Value type, Index id) override { - switch (type) + switch(type) { - case ResourceType::Mesh: - mMeshDef = &mResources.mMeshes[id].first; - break; + case ResourceType::Mesh: + mMeshDef = &mResources.mMeshes[id].first; + break; - case ResourceType::Material: - mMaterialDef = &mResources.mMaterials[id].first; - break; + case ResourceType::Material: + mMaterialDef = &mResources.mMaterials[id].first; + break; - default: - break; + default: + break; } } }; @@ -59,11 +60,11 @@ 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) + for(const auto& blendShape : blendShapes) { hasPositions = hasPositions || blendShape.deltas.IsDefined(); - hasNormals = hasNormals || blendShape.normals.IsDefined(); - hasTangents = hasTangents || blendShape.tangents.IsDefined(); + hasNormals = hasNormals || blendShape.normals.IsDefined(); + hasTangents = hasTangents || blendShape.tangents.IsDefined(); } } @@ -77,65 +78,65 @@ uint64_t HashNode(const NodeDefinition& nodeDef, const MaterialDefinition& mater const bool hasTransparency = MaskMatch(materialDef.mFlags, MaterialDefinition::TRANSPARENCY); hash.Add(hasTransparency); - if (hasTransparency || - materialDef.CheckTextures(MaterialDefinition::ALBEDO) || - materialDef.CheckTextures(MaterialDefinition::METALLIC | MaterialDefinition::ROUGHNESS) || - materialDef.CheckTextures(MaterialDefinition::NORMAL)) + if(hasTransparency || + materialDef.CheckTextures(MaterialDefinition::ALBEDO) || + materialDef.CheckTextures(MaterialDefinition::METALLIC | MaterialDefinition::ROUGHNESS) || + materialDef.CheckTextures(MaterialDefinition::NORMAL)) { hash.Add("3TEX"); } - if (materialDef.GetAlphaCutoff() > 0.f) + if(materialDef.GetAlphaCutoff() > 0.f) { - hash.Add("ALPH"/*A_TEST*/); + hash.Add("ALPH" /*A_TEST*/); } - if (MaskMatch(materialDef.mFlags, MaterialDefinition::SUBSURFACE)) + if(MaskMatch(materialDef.mFlags, MaterialDefinition::SUBSURFACE)) { hash.Add("SSS"); } - if (MaskMatch(materialDef.mFlags, MaterialDefinition::GLTF_CHANNELS)) + if(MaskMatch(materialDef.mFlags, MaterialDefinition::GLTF_CHANNELS)) { - hash.Add("GLTF"/*_CHANNELS*/); + hash.Add("GLTF" /*_CHANNELS*/); } - if (meshDef.IsSkinned()) + if(meshDef.IsSkinned()) { - hash.Add("SKIN"/*NING*/); + hash.Add("SKIN" /*NING*/); } - if (MaskMatch(meshDef.mFlags, MeshDefinition::FLIP_UVS_VERTICAL)) + if(MaskMatch(meshDef.mFlags, MeshDefinition::FLIP_UVS_VERTICAL)) { - hash.Add("FLIP"/*_V*/); + hash.Add("FLIP" /*_V*/); } - if (meshDef.HasBlendShapes()) + if(meshDef.HasBlendShapes()) { bool hasPositions = false; - bool hasNormals = false; - bool hasTangents = false; + bool hasNormals = false; + bool hasTangents = false; RetrieveBlendShapeComponents(meshDef.mBlendShapes, hasPositions, hasNormals, hasTangents); - if (hasPositions) + if(hasPositions) { hash.Add("MORPHPOS"); } - if (hasNormals) + if(hasNormals) { hash.Add("MORPHNOR"); } - if (hasTangents) + if(hasTangents) { hash.Add("MORPHTAN"); } - if (hasPositions || hasNormals || hasTangents) + if(hasPositions || hasNormals || hasTangents) { hash.Add("MORPH"); - if (BlendShapes::Version::VERSION_2_0 == meshDef.mBlendShapeVersion) + if(BlendShapes::Version::VERSION_2_0 == meshDef.mBlendShapeVersion) { hash.Add("MORPHV2"); } @@ -144,17 +145,18 @@ uint64_t HashNode(const NodeDefinition& nodeDef, const MaterialDefinition& mater return hash; } -} +} // namespace struct ShaderDefinitionFactory::Impl { - ResourceBundle* mResources; // no ownership + ResourceBundle* mResources; // no ownership std::map mShaderMap; }; ShaderDefinitionFactory::ShaderDefinitionFactory() -: mImpl{ new Impl() } -{} +: mImpl{new Impl()} +{ +} ShaderDefinitionFactory::~ShaderDefinitionFactory() = default; @@ -168,106 +170,106 @@ Index ShaderDefinitionFactory::ProduceShader(const NodeDefinition& nodeDef) { DALI_ASSERT_DEBUG(nodeDef.mRenderable); - auto& resources = *mImpl->mResources; - ResourceReceiver receiver{ resources }; + auto& resources = *mImpl->mResources; + ResourceReceiver receiver{resources}; nodeDef.mRenderable->RegisterResources(receiver); - if (!(receiver.mMeshDef && receiver.mMaterialDef)) + if(!(receiver.mMeshDef && receiver.mMaterialDef)) { return INVALID_INDEX; } - auto& shaderMap = mImpl->mShaderMap; - uint64_t hash = HashNode(nodeDef, *receiver.mMaterialDef, *receiver.mMeshDef); - auto iFind = shaderMap.find(hash); - if (iFind != shaderMap.end()) + auto& shaderMap = mImpl->mShaderMap; + uint64_t hash = HashNode(nodeDef, *receiver.mMaterialDef, *receiver.mMeshDef); + auto iFind = shaderMap.find(hash); + if(iFind != shaderMap.end()) { return iFind->second; } ShaderDefinition shaderDef; - shaderDef.mVertexShaderPath = PBR_SHADER_NAME + ".vsh"; + shaderDef.mVertexShaderPath = PBR_SHADER_NAME + ".vsh"; shaderDef.mFragmentShaderPath = PBR_SHADER_NAME + ".fsh"; - shaderDef.mRendererState = RendererState::DEPTH_TEST | RendererState::DEPTH_WRITE | RendererState::CULL_BACK; + shaderDef.mRendererState = RendererState::DEPTH_TEST | RendererState::DEPTH_WRITE | RendererState::CULL_BACK; - auto& materialDef = *receiver.mMaterialDef; + auto& materialDef = *receiver.mMaterialDef; const bool hasTransparency = MaskMatch(materialDef.mFlags, MaterialDefinition::TRANSPARENCY); - if (hasTransparency) + if(hasTransparency) { // TODO: this requires more granularity shaderDef.mRendererState = (shaderDef.mRendererState | RendererState::ALPHA_BLEND) & ~RendererState::DEPTH_WRITE; } - if (hasTransparency || - materialDef.CheckTextures(MaterialDefinition::ALBEDO) || - materialDef.CheckTextures(MaterialDefinition::METALLIC | MaterialDefinition::ROUGHNESS) || - materialDef.CheckTextures(MaterialDefinition::NORMAL)) + if(hasTransparency || + materialDef.CheckTextures(MaterialDefinition::ALBEDO) || + materialDef.CheckTextures(MaterialDefinition::METALLIC | MaterialDefinition::ROUGHNESS) || + materialDef.CheckTextures(MaterialDefinition::NORMAL)) { shaderDef.mDefines.push_back("THREE_TEX"); } - if (materialDef.GetAlphaCutoff() > 0.f) + if(materialDef.GetAlphaCutoff() > 0.f) { shaderDef.mDefines.push_back("ALPHA_TEST"); } - if (MaskMatch(materialDef.mFlags, MaterialDefinition::SUBSURFACE)) + if(MaskMatch(materialDef.mFlags, MaterialDefinition::SUBSURFACE)) { shaderDef.mDefines.push_back("SSS"); } - if (MaskMatch(receiver.mMaterialDef->mFlags, MaterialDefinition::GLTF_CHANNELS)) + if(MaskMatch(receiver.mMaterialDef->mFlags, MaterialDefinition::GLTF_CHANNELS)) { shaderDef.mDefines.push_back("GLTF_CHANNELS"); } const auto& meshDef = *receiver.mMeshDef; - if (meshDef.IsSkinned()) + if(meshDef.IsSkinned()) { shaderDef.mDefines.push_back("SKINNING"); } - if (MaskMatch(meshDef.mFlags, MeshDefinition::FLIP_UVS_VERTICAL)) + if(MaskMatch(meshDef.mFlags, MeshDefinition::FLIP_UVS_VERTICAL)) { shaderDef.mDefines.push_back("FLIP_V"); } - if (meshDef.HasBlendShapes()) + if(meshDef.HasBlendShapes()) { bool hasPositions = false; - bool hasNormals = false; - bool hasTangents = false; + bool hasNormals = false; + bool hasTangents = false; RetrieveBlendShapeComponents(meshDef.mBlendShapes, hasPositions, hasNormals, hasTangents); - if (hasPositions) + if(hasPositions) { shaderDef.mDefines.push_back("MORPH_POSITION"); } - if (hasNormals) + if(hasNormals) { shaderDef.mDefines.push_back("MORPH_NORMAL"); } - if (hasTangents) + if(hasTangents) { shaderDef.mDefines.push_back("MORPH_TANGENT"); } - if (hasPositions || hasNormals || hasTangents) + if(hasPositions || hasNormals || hasTangents) { shaderDef.mDefines.push_back("MORPH"); - if (BlendShapes::Version::VERSION_2_0 == meshDef.mBlendShapeVersion) + if(BlendShapes::Version::VERSION_2_0 == meshDef.mBlendShapeVersion) { shaderDef.mDefines.push_back("MORPH_VERSION_2_0"); } } } - shaderDef.mUniforms["uMaxLOD"] = 6.f; + shaderDef.mUniforms["uMaxLOD"] = 6.f; shaderDef.mUniforms["uCubeMatrix"] = Matrix::IDENTITY; - Index result = resources.mShaders.size(); + Index result = resources.mShaders.size(); shaderMap[hash] = result; resources.mShaders.emplace_back(std::move(shaderDef), Shader()); @@ -275,5 +277,5 @@ Index ShaderDefinitionFactory::ProduceShader(const NodeDefinition& nodeDef) return result; } -} -} +} // namespace SceneLoader +} // namespace Dali