X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-scene3d%2Fpublic-api%2Floader%2Fnode-definition.cpp;h=d2baa33a4c5e25ca470b5ef022d2940aa71572ee;hb=36ace264481e080b8b7efcf924eb3cd960032277;hp=bbed301914abf1d806bc6982ed00b3a163a17a47;hpb=8e832b294a6ba371814850502ddaefcbe8951c39;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-scene3d/public-api/loader/node-definition.cpp b/dali-scene3d/public-api/loader/node-definition.cpp index bbed301..d2baa33 100644 --- a/dali-scene3d/public-api/loader/node-definition.cpp +++ b/dali-scene3d/public-api/loader/node-definition.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 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. @@ -15,10 +15,12 @@ * */ -// INTERNAL -#include "dali-scene3d/public-api/loader/node-definition.h" -#include "dali-scene3d/public-api/loader/renderer-state.h" -#include "dali-scene3d/public-api/loader/utils.h" +// CLASS HEADER +#include + +// INTERNAL INCLUDES +#include +#include namespace Dali { @@ -26,6 +28,7 @@ namespace { constexpr std::string_view IBL_INTENSITY_STRING("uIblIntensity"); constexpr std::string_view IBL_Y_DIRECTION("uYDirection"); +constexpr std::string_view IBL_MAXLOD("uMaxLOD"); } // namespace namespace Scene3D @@ -61,11 +64,13 @@ void NodeDefinition::Renderable::OnCreate(const NodeDefinition& node, CreatePara actor.AddRenderer(renderer); } -const std::string NodeDefinition::ORIGINAL_MATRIX_PROPERTY_NAME = "originalMatrix"; +const char* NodeDefinition::ORIGINAL_MATRIX_PROPERTY_NAME = "originalMatrix"; -Actor NodeDefinition::CreateActor(CreateParams& params) const +Actor NodeDefinition::CreateActor(CreateParams& params) { Actor actor = Actor::New(); + mNodeId = actor.GetProperty(Dali::Actor::Property::ID); + SetActorCentered(actor); actor.SetProperty(Actor::Property::NAME, mName); @@ -77,6 +82,8 @@ Actor NodeDefinition::CreateActor(CreateParams& params) const actor.RegisterProperty(ORIGINAL_MATRIX_PROPERTY_NAME, GetLocalSpace(), Property::AccessMode::READ_ONLY); + actor.SetProperty(Actor::Property::COLOR_MODE, ColorMode::USE_OWN_MULTIPLY_PARENT_COLOR); + for(auto& renderable : mRenderables) { renderable->OnCreate(*this, params, actor); @@ -112,6 +119,11 @@ std::string_view NodeDefinition::GetIblYDirectionUniformName() return IBL_Y_DIRECTION; } +std::string_view NodeDefinition::GetIblMaxLodUniformName() +{ + return IBL_MAXLOD; +} + bool NodeDefinition::GetExtents(const ResourceBundle& resources, Vector3& min, Vector3& max) const { if(mRenderables.empty()) @@ -231,40 +243,29 @@ void ModelRenderable::OnCreate(const NodeDefinition& node, NodeDefinition::Creat actor.RegisterProperty("uSpecularFactor", matDef.mSpecularFactor); actor.RegisterProperty("uSpecularColorFactor", matDef.mSpecularColorFactor); actor.RegisterProperty("uNormalScale", matDef.mNormalScale); + actor.RegisterProperty("uEmissiveFactor", matDef.mEmissiveFactor); if(matDef.mFlags & MaterialDefinition::OCCLUSION) { renderer.RegisterProperty("uOcclusionStrength", matDef.mOcclusionStrength); } - if(matDef.mFlags & MaterialDefinition::EMISSIVE) - { - renderer.RegisterProperty("uEmissiveFactor", matDef.mEmissiveFactor); - } Index envIdx = matDef.mEnvironmentIdx; renderer.RegisterProperty(IBL_INTENSITY_STRING.data(), resources.mEnvironmentMaps[envIdx].first.mIblIntensity); renderer.RegisterProperty(IBL_Y_DIRECTION.data(), resources.mEnvironmentMaps[envIdx].first.mYDirection); - float opaque = 0.0f; - float mask = 0.0f; + float opaque = matDef.mIsOpaque ? 1.0f : 0.0f; + float mask = matDef.mIsMask ? 1.0f : 0.0f; float alphaCutoff = matDef.GetAlphaCutoff(); - if(!MaskMatch(matDef.mFlags, MaterialDefinition::TRANSPARENCY)) - { - opaque = 1.0f; - } - else - { - if(alphaCutoff > 0.f) - { - mask = 1.0f; - } - } + renderer.RegisterProperty("uOpaque", opaque); renderer.RegisterProperty("uMask", mask); renderer.RegisterProperty("uAlphaThreshold", alphaCutoff); renderer.SetTextures(textures); + uint32_t specularMipmap = resources.mEnvironmentMaps[envIdx].second.mSpecularMipmapLevels; actor.SetProperty(Actor::Property::COLOR, mColor); + actor.RegisterProperty(IBL_MAXLOD.data(), static_cast(specularMipmap)); } void ArcRenderable::OnCreate(const NodeDefinition& node, NodeDefinition::CreateParams& params, Actor& actor) const