2 * Copyright (c) 2018 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/render/common/render-manager.h>
23 #include <dali/internal/render/queue/render-queue.h>
24 #include <dali/internal/render/renderers/render-renderer.h>
25 #include <dali/internal/common/message.h>
36 RenderMessageDispatcher::RenderMessageDispatcher( RenderManager& renderManager, RenderQueue& renderQueue, const SceneGraphBuffers& buffers )
37 : mRenderManager( renderManager ),
38 mRenderQueue( renderQueue ),
43 RenderMessageDispatcher::~RenderMessageDispatcher()
47 void RenderMessageDispatcher::AddRenderer( OwnerPointer< Render::Renderer >& renderer )
49 // Message has ownership of renderer while in transit from update -> render
50 typedef MessageValue1< RenderManager, OwnerPointer< Render::Renderer > > DerivedType;
52 // Reserve some memory inside the render queue
53 uint32_t* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
55 // Construct message in the render queue memory; note that delete should not be called on the return value
56 new (slot) DerivedType( &mRenderManager, &RenderManager::AddRenderer, renderer );
59 void RenderMessageDispatcher::RemoveRenderer( Render::Renderer& renderer )
61 using DerivedType = MessageValue1<RenderManager, Render::Renderer*>;
63 // Reserve some memory inside the render queue
64 uint32_t* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
66 // Construct message in the render queue memory; note that delete should not be called on the return value
67 new (slot) DerivedType( &mRenderManager, &RenderManager::RemoveRenderer, &renderer );
70 void RenderMessageDispatcher::AddRenderTracker( Render::RenderTracker& renderTracker )
72 using DerivedType = MessageValue1<RenderManager, Render::RenderTracker*>;
74 // Reserve some memory inside the render queue
75 uint32_t* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
77 // Construct message in the render queue memory; note that delete should not be called on the return value
78 new (slot) DerivedType( &mRenderManager, &RenderManager::AddRenderTracker, &renderTracker );
81 void RenderMessageDispatcher::RemoveRenderTracker( Render::RenderTracker& renderTracker )
83 using DerivedType = MessageValue1<RenderManager, Render::RenderTracker*>;
85 // Reserve some memory inside the render queue
86 uint32_t* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
88 // Construct message in the render queue memory; note that delete should not be called on the return value
89 new (slot) DerivedType( &mRenderManager, &RenderManager::RemoveRenderTracker, &renderTracker );
92 } // namespace SceneGraph
94 } // namespace Internal