2 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali/internal/update/controllers/render-message-dispatcher.h>
22 #include <dali/internal/common/message.h>
23 #include <dali/internal/render/common/render-manager.h>
24 #include <dali/internal/render/queue/render-queue.h>
25 #include <dali/internal/render/renderers/render-renderer.h>
33 RenderMessageDispatcher::RenderMessageDispatcher(RenderManager& renderManager, RenderQueue& renderQueue, const SceneGraphBuffers& buffers)
34 : mRenderManager(renderManager),
35 mRenderQueue(renderQueue),
40 RenderMessageDispatcher::~RenderMessageDispatcher() = default;
42 void RenderMessageDispatcher::AddRenderer(OwnerPointer<Render::Renderer>& renderer)
44 // Message has ownership of renderer while in transit from update -> render
45 typedef MessageValue1<RenderManager, OwnerPointer<Render::Renderer> > DerivedType;
47 // Reserve some memory inside the render queue
48 uint32_t* slot = mRenderQueue.ReserveMessageSlot(mBuffers.GetUpdateBufferIndex(), sizeof(DerivedType));
50 // Construct message in the render queue memory; note that delete should not be called on the return value
51 new(slot) DerivedType(&mRenderManager, &RenderManager::AddRenderer, renderer);
54 void RenderMessageDispatcher::RemoveRenderer(Render::Renderer& renderer)
56 using DerivedType = MessageValue1<RenderManager, Render::Renderer*>;
58 // Reserve some memory inside the render queue
59 uint32_t* slot = mRenderQueue.ReserveMessageSlot(mBuffers.GetUpdateBufferIndex(), sizeof(DerivedType));
61 // Construct message in the render queue memory; note that delete should not be called on the return value
62 new(slot) DerivedType(&mRenderManager, &RenderManager::RemoveRenderer, &renderer);
65 void RenderMessageDispatcher::AddRenderTracker(Render::RenderTracker& renderTracker)
67 using DerivedType = MessageValue1<RenderManager, Render::RenderTracker*>;
69 // Reserve some memory inside the render queue
70 uint32_t* slot = mRenderQueue.ReserveMessageSlot(mBuffers.GetUpdateBufferIndex(), sizeof(DerivedType));
72 // Construct message in the render queue memory; note that delete should not be called on the return value
73 new(slot) DerivedType(&mRenderManager, &RenderManager::AddRenderTracker, &renderTracker);
76 void RenderMessageDispatcher::RemoveRenderTracker(Render::RenderTracker& renderTracker)
78 using DerivedType = MessageValue1<RenderManager, Render::RenderTracker*>;
80 // Reserve some memory inside the render queue
81 uint32_t* slot = mRenderQueue.ReserveMessageSlot(mBuffers.GetUpdateBufferIndex(), sizeof(DerivedType));
83 // Construct message in the render queue memory; note that delete should not be called on the return value
84 new(slot) DerivedType(&mRenderManager, &RenderManager::RemoveRenderTracker, &renderTracker);
87 } // namespace SceneGraph
89 } // namespace Internal