[Tizen] Fix bug that didn't make nodes for child of multiple primitive 99/284499/3
authorseungho baek <sbsh.baek@samsung.com>
Fri, 18 Nov 2022 05:56:31 +0000 (14:56 +0900)
committerseungho baek <sbsh.baek@samsung.com>
Mon, 21 Nov 2022 06:54:33 +0000 (15:54 +0900)
     - And add double sided property

Change-Id: I2ccb4977ff79782a5cb2ba154ea313517397ed2a
Signed-off-by: seungho baek <sbsh.baek@samsung.com>
dali-scene3d/public-api/loader/gltf2-loader.cpp
dali-scene3d/public-api/loader/material-definition.h
dali-scene3d/public-api/loader/node-definition.cpp
dali-scene3d/public-api/loader/node-definition.h
dali-scene3d/public-api/loader/scene-definition.cpp
dali-scene3d/public-api/loader/shader-definition-factory.cpp

index 316803d..ceb95d6 100644 (file)
@@ -176,7 +176,8 @@ const auto MATERIAL_READER = std::move(js::Reader<gt::Material>()
                                          .Register(*js::MakeProperty("emissiveTexture", js::ObjectReader<gt::TextureInfo>::Read, &gt::Material::mEmissiveTexture))
                                          .Register(*js::MakeProperty("emissiveFactor", gt::ReadDaliVector<Vector3>, &gt::Material::mEmissiveFactor))
                                          .Register(*js::MakeProperty("alphaMode", gt::ReadStringEnum<gt::AlphaMode>, &gt::Material::mAlphaMode))
-                                         .Register(*js::MakeProperty("alphaCutoff", js::Read::Number<float>, &gt::Material::mAlphaCutoff)));
+                                         .Register(*js::MakeProperty("alphaCutoff", js::Read::Number<float>, &gt::Material::mAlphaCutoff))
+                                         .Register(*js::MakeProperty("doubleSided", js::Read::Boolean, &gt::Material::mDoubleSided)));
 
 std::map<gt::Attribute::Type, gt::Ref<gt::Accessor>> ReadMeshPrimitiveAttributes(const json_value_s& j)
 {
@@ -430,7 +431,7 @@ void ConvertMaterial(const gt::Material& m, decltype(ResourceBundle::mMaterials)
   MaterialDefinition matDef;
 
   auto& pbr = m.mPbrMetallicRoughness;
-  if(m.mAlphaMode != gt::AlphaMode::OPAQUE || pbr.mBaseColorFactor.a < 1.f)
+  if(pbr.mBaseColorFactor.a < 1.f)
   {
     matDef.mFlags |= MaterialDefinition::TRANSPARENCY;
   }
@@ -484,7 +485,6 @@ void ConvertMaterial(const gt::Material& m, decltype(ResourceBundle::mMaterials)
     matDef.mNeedNormalTexture = false;
   }
 
-  // TODO: handle doubleSided
   if(m.mOcclusionTexture)
   {
     const auto semantic = MaterialDefinition::OCCLUSION;
@@ -503,6 +503,8 @@ void ConvertMaterial(const gt::Material& m, decltype(ResourceBundle::mMaterials)
     matDef.mEmissiveFactor = m.mEmissiveFactor;
   }
 
+  matDef.mDoubleSided = m.mDoubleSided;
+
   outMaterials.emplace_back(std::move(matDef), TextureSet());
 }
 
@@ -791,6 +793,7 @@ void ConvertNode(gt::Node const& node, const Index gltfIdx, Index parentIdx, Con
       childModel->mMeshIdx = meshIdx;
 
       child->mRenderable.reset(childModel);
+      child->mInheritColor = true;
 
       scene.AddNode(std::move(child));
 
index d96d888..e45b69b 100644 (file)
@@ -234,6 +234,7 @@ public: // DATA
   bool mNeedAlbedoTexture            = true;
   bool mNeedMetallicRoughnessTexture = true;
   bool mNeedNormalTexture            = true;
+  bool mDoubleSided                  = false;
 
   std::vector<TextureStage> mTextureStages;
 };
index c83fc44..24ad691 100644 (file)
@@ -77,6 +77,11 @@ Actor NodeDefinition::CreateActor(CreateParams& params) const
 
   actor.RegisterProperty(ORIGINAL_MATRIX_PROPERTY_NAME, GetLocalSpace(), Property::AccessMode::READ_ONLY);
 
+  if(mInheritColor)
+  {
+    actor.SetProperty(Actor::Property::COLOR_MODE, ColorMode::USE_PARENT_COLOR);
+  }
+
   if(mRenderable)
   {
     mRenderable->OnCreate(*this, params, actor);
index a86d7e9..8cba317 100644 (file)
@@ -259,7 +259,8 @@ public: // DATA
   Vector3    mScale       = Vector3::ONE;
   Vector3    mSize        = Vector3::ONE;
 
-  bool mIsVisible = true;
+  bool mIsVisible    = true;
+  bool mInheritColor = false;
 
   std::unique_ptr<Renderable>              mRenderable;
   std::unique_ptr<CustomizationDefinition> mCustomization;
index 6e26c0f..1e2cf61 100644 (file)
@@ -526,7 +526,7 @@ void SceneDefinition::GetCustomizationOptions(const Customization::Choices& choi
 
 NodeDefinition* SceneDefinition::AddNode(std::unique_ptr<NodeDefinition>&& nodeDef)
 {
-  if(FindNode(nodeDef->mName))
+  if(!nodeDef->mName.empty() && FindNode(nodeDef->mName))
   {
     return nullptr;
   }
index 59dd3b4..f76745f 100644 (file)
@@ -195,9 +195,14 @@ Index ShaderDefinitionFactory::ProduceShader(const NodeDefinition& nodeDef)
 
   ShaderDefinition shaderDef;
   shaderDef.mUseBuiltInShader = true;
-  shaderDef.mRendererState    = RendererState::DEPTH_TEST | RendererState::DEPTH_WRITE | RendererState::CULL_BACK;
+  shaderDef.mRendererState    = RendererState::DEPTH_TEST | RendererState::DEPTH_WRITE;
+
+  auto& materialDef = *receiver.mMaterialDef;
+  if(!materialDef.mDoubleSided)
+  {
+    shaderDef.mRendererState |= RendererState::CULL_BACK;
+  }
 
-  auto&      materialDef     = *receiver.mMaterialDef;
   const bool hasTransparency = MaskMatch(materialDef.mFlags, MaterialDefinition::TRANSPARENCY);
   if(hasTransparency)
   {