Merge "Clean up the code to build successfully on macOS" into devel/master
[platform/core/uifw/dali-core.git] / dali / internal / update / controllers / render-message-dispatcher.cpp
1 /*
2  * Copyright (c) 2018 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18 // CLASS HEADER
19 #include <dali/internal/update/controllers/render-message-dispatcher.h>
20
21 // INTERNAL INCLUDES
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>
26
27 namespace Dali
28 {
29
30 namespace Internal
31 {
32
33 namespace SceneGraph
34 {
35
36 RenderMessageDispatcher::RenderMessageDispatcher( RenderManager& renderManager, RenderQueue& renderQueue, const SceneGraphBuffers& buffers )
37 : mRenderManager( renderManager ),
38   mRenderQueue( renderQueue ),
39   mBuffers( buffers )
40 {
41 }
42
43 RenderMessageDispatcher::~RenderMessageDispatcher() = default;
44
45 void RenderMessageDispatcher::AddRenderer( OwnerPointer< Render::Renderer >& renderer )
46 {
47   // Message has ownership of renderer while in transit from update -> render
48   typedef MessageValue1< RenderManager, OwnerPointer< Render::Renderer > > DerivedType;
49
50   // Reserve some memory inside the render queue
51   uint32_t* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
52
53   // Construct message in the render queue memory; note that delete should not be called on the return value
54   new (slot) DerivedType( &mRenderManager, &RenderManager::AddRenderer, renderer );
55 }
56
57 void RenderMessageDispatcher::RemoveRenderer( Render::Renderer& renderer )
58 {
59   using DerivedType = MessageValue1<RenderManager, Render::Renderer*>;
60
61   // Reserve some memory inside the render queue
62   uint32_t* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
63
64   // Construct message in the render queue memory; note that delete should not be called on the return value
65   new (slot) DerivedType( &mRenderManager, &RenderManager::RemoveRenderer, &renderer );
66 }
67
68 void RenderMessageDispatcher::AddRenderTracker( Render::RenderTracker& renderTracker )
69 {
70   using DerivedType = MessageValue1<RenderManager, Render::RenderTracker*>;
71
72   // Reserve some memory inside the render queue
73   uint32_t* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
74
75   // Construct message in the render queue memory; note that delete should not be called on the return value
76   new (slot) DerivedType( &mRenderManager, &RenderManager::AddRenderTracker, &renderTracker );
77 }
78
79 void RenderMessageDispatcher::RemoveRenderTracker( Render::RenderTracker& renderTracker )
80 {
81   using DerivedType = MessageValue1<RenderManager, Render::RenderTracker*>;
82
83   // Reserve some memory inside the render queue
84   uint32_t* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
85
86   // Construct message in the render queue memory; note that delete should not be called on the return value
87   new (slot) DerivedType( &mRenderManager, &RenderManager::RemoveRenderTracker, &renderTracker );
88 }
89
90 } // namespace SceneGraph
91
92 } // namespace Internal
93
94 } // namespace Dali