Merge changes I8783ad29,I2c860a84 into devel/master
[platform/core/uifw/dali-core.git] / dali / internal / event / rendering / renderer-impl.cpp
index 4342d90..0865182 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 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.
@@ -24,6 +24,7 @@
 #include <dali/internal/event/common/property-input-impl.h>
 #include <dali/internal/render/renderers/render-geometry.h>
 #include <dali/internal/update/manager/update-manager.h>
+#include <dali/internal/update/rendering/scene-graph-renderer-messages.h>
 #include <dali/internal/update/rendering/scene-graph-renderer.h>
 #include <dali/public-api/object/type-registry.h>
 
@@ -80,6 +81,7 @@ DALI_ENUM_TO_STRING_TABLE_BEGIN(BLEND_MODE)
   DALI_ENUM_TO_STRING_WITH_SCOPE(BlendMode, AUTO)
   DALI_ENUM_TO_STRING_WITH_SCOPE(BlendMode, ON)
   DALI_ENUM_TO_STRING_WITH_SCOPE(BlendMode, ON_WITHOUT_CULL)
+  DALI_ENUM_TO_STRING_WITH_SCOPE(BlendMode, USE_ACTOR_OPACITY)
 DALI_ENUM_TO_STRING_TABLE_END(BLEND_MODE)
 
 DALI_ENUM_TO_STRING_TABLE_BEGIN(BLEND_EQUATION)
@@ -193,14 +195,14 @@ TypeRegistration mType(typeid(Dali::Renderer), typeid(Dali::Handle), Create, Ren
 RendererPtr Renderer::New()
 {
   // create scene object first so it's guaranteed to exist for the event side
-  auto                               sceneObject = SceneGraph::Renderer::New();
-  OwnerPointer<SceneGraph::Renderer> transferOwnership(sceneObject);
+  auto sceneObjectKey = SceneGraph::Renderer::NewKey();
+
   // pass the pointer to base for message passing
-  RendererPtr rendererPtr(new Renderer(sceneObject));
-  // transfer scene object ownership to update manager
+  RendererPtr rendererPtr(new Renderer(sceneObjectKey.Get()));
+
   EventThreadServices&       eventThreadServices = rendererPtr->GetEventThreadServices();
   SceneGraph::UpdateManager& updateManager       = eventThreadServices.GetUpdateManager();
-  AddRendererMessage(updateManager, transferOwnership);
+  AddRendererMessage(updateManager, sceneObjectKey);
 
   eventThreadServices.RegisterObject(rendererPtr.Get());
   return rendererPtr;
@@ -662,8 +664,9 @@ void Renderer::SetDefaultProperty(Property::Index        index,
       {
         if(!Equals(mOpacity, opacity))
         {
-          mOpacity = opacity;
-          BakeOpacityMessage(GetEventThreadServices(), GetRendererSceneObject(), mOpacity);
+          mOpacity         = opacity;
+          auto sceneObject = const_cast<SceneGraph::Renderer*>(&GetRendererSceneObject());
+          SceneGraph::BakeOpacityMessage(GetEventThreadServices(), *sceneObject, mOpacity);
         }
       }
       break;
@@ -763,6 +766,23 @@ const PropertyInputImpl* Renderer::GetSceneObjectInputProperty(Property::Index i
   return GetSceneObjectAnimatableProperty(index);
 }
 
+void Renderer::AddDrawCommand(const Dali::DevelRenderer::DrawCommand& command)
+{
+  if(!mDrawCommands.capacity())
+  {
+    mDrawCommands.reserve(8);
+  }
+
+  mDrawCommands.emplace_back(command);
+
+  Dali::Internal::SceneGraph::SetDrawCommandsMessage(GetEventThreadServices(),
+                                                     GetRendererSceneObject(),
+                                                     mDrawCommands.data(),
+                                                     uint32_t(mDrawCommands.size())
+
+  );
+}
+
 Renderer::Renderer(const SceneGraph::Renderer* sceneObject)
 : Object(sceneObject),
   mDepthIndex(0),
@@ -781,29 +801,13 @@ Renderer::Renderer(const SceneGraph::Renderer* sceneObject)
 {
 }
 
-void Renderer::SetBlendColor(const Vector4& blendColor)
-{
-  mBlendingOptions.SetBlendColor(blendColor);
-  SetBlendColorMessage(GetEventThreadServices(), GetRendererSceneObject(), GetBlendColor());
-}
-
-const Vector4& Renderer::GetBlendColor() const
-{
-  const Vector4* blendColor = mBlendingOptions.GetBlendColor();
-  if(blendColor)
-  {
-    return *blendColor;
-  }
-  return Color::TRANSPARENT; // GL default
-}
-
 Renderer::~Renderer()
 {
   if(EventThreadServices::IsCoreRunning())
   {
     EventThreadServices&       eventThreadServices = GetEventThreadServices();
     SceneGraph::UpdateManager& updateManager       = eventThreadServices.GetUpdateManager();
-    RemoveRendererMessage(updateManager, GetRendererSceneObject());
+    RemoveRendererMessage(updateManager, SceneGraph::Renderer::GetKey(GetRendererSceneObject())); //@todo Use key throughtout
 
     eventThreadServices.UnregisterObject(this);
   }
@@ -1163,21 +1167,27 @@ bool Renderer::GetCurrentPropertyValue(Property::Index index, Property::Value& v
   return valueSet;
 }
 
-void Renderer::AddDrawCommand(const Dali::DevelRenderer::DrawCommand& command)
+void Renderer::SetBlendColor(const Vector4& blendColor)
 {
-  if(!mDrawCommands.capacity())
+  mBlendingOptions.SetBlendColor(blendColor);
+  SetBlendColorMessage(GetEventThreadServices(), GetRendererSceneObject(), GetBlendColor());
+}
+
+const Vector4& Renderer::GetBlendColor() const
+{
+  const Vector4* blendColor = mBlendingOptions.GetBlendColor();
+  if(blendColor)
   {
-    mDrawCommands.reserve(8);
+    return *blendColor;
   }
+  return Color::TRANSPARENT; // GL default
+}
 
-  mDrawCommands.emplace_back(command);
-
-  Dali::Internal::SceneGraph::SetDrawCommandsMessage(GetEventThreadServices(),
-                                                     GetRendererSceneObject(),
-                                                     mDrawCommands.data(),
-                                                     uint32_t(mDrawCommands.size())
-
-  );
+void Renderer::SetRenderCallback(RenderCallback* callback)
+{
+  Dali::Internal::SceneGraph::SetRenderCallbackMessage(GetEventThreadServices(),
+                                                       GetRendererSceneObject(),
+                                                       callback);
 }
 
 } // namespace Internal