/*
- * 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.
#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>
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)
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;
{
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;
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),
{
}
-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);
}
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