Clean up the code to build successfully on macOS
[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()
44 {
45 }
46
47 void RenderMessageDispatcher::AddRenderer( OwnerPointer< Render::Renderer >& renderer )
48 {
49   // Message has ownership of renderer while in transit from update -> render
50   typedef MessageValue1< RenderManager, OwnerPointer< Render::Renderer > > DerivedType;
51
52   // Reserve some memory inside the render queue
53   uint32_t* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
54
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 );
57 }
58
59 void RenderMessageDispatcher::RemoveRenderer( Render::Renderer& renderer )
60 {
61   using DerivedType = MessageValue1<RenderManager, Render::Renderer*>;
62
63   // Reserve some memory inside the render queue
64   uint32_t* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
65
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 );
68 }
69
70 void RenderMessageDispatcher::AddRenderTracker( Render::RenderTracker& renderTracker )
71 {
72   using DerivedType = MessageValue1<RenderManager, Render::RenderTracker*>;
73
74   // Reserve some memory inside the render queue
75   uint32_t* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
76
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 );
79 }
80
81 void RenderMessageDispatcher::RemoveRenderTracker( Render::RenderTracker& renderTracker )
82 {
83   using DerivedType = MessageValue1<RenderManager, Render::RenderTracker*>;
84
85   // Reserve some memory inside the render queue
86   uint32_t* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
87
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 );
90 }
91
92 } // namespace SceneGraph
93
94 } // namespace Internal
95
96 } // namespace Dali