2 * Copyright (c) 2014 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/common/message.h>
35 RenderMessageDispatcher::RenderMessageDispatcher( RenderManager& renderManager, RenderQueue& renderQueue, const SceneGraphBuffers& buffers )
36 : mRenderManager( renderManager ),
37 mRenderQueue( renderQueue ),
42 RenderMessageDispatcher::~RenderMessageDispatcher()
46 void RenderMessageDispatcher::AddRenderer( Render::Renderer& renderer )
48 typedef MessageValue1< RenderManager, Render::Renderer* > DerivedType;
50 // Reserve some memory inside the render queue
51 unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
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 );
57 void RenderMessageDispatcher::RemoveRenderer( Render::Renderer& renderer )
59 typedef MessageValue1< RenderManager, Render::Renderer* > DerivedType;
61 // Reserve some memory inside the render queue
62 unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
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 );
68 void RenderMessageDispatcher::AddGeometry( RenderGeometry& renderGeometry )
70 typedef MessageValue1< RenderManager, RenderGeometry* > DerivedType;
72 // Reserve some memory inside the render queue
73 unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
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::AddGeometry, &renderGeometry );
79 void RenderMessageDispatcher::RemoveGeometry( RenderGeometry& renderGeometry )
81 typedef MessageValue1< RenderManager, RenderGeometry* > DerivedType;
83 // Reserve some memory inside the render queue
84 unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
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::RemoveGeometry, &renderGeometry );
90 void RenderMessageDispatcher::AddPropertyBuffer( RenderGeometry& renderGeometry, Render::PropertyBuffer* propertyBuffer, bool isIndexBuffer )
92 typedef MessageValue3< RenderManager, RenderGeometry*, Render::PropertyBuffer*, bool > DerivedType;
94 // Reserve some memory inside the render queue
95 unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
97 // Construct message in the render queue memory; note that delete should not be called on the return value
98 new (slot) DerivedType( &mRenderManager, &RenderManager::AddPropertyBuffer, &renderGeometry, propertyBuffer, isIndexBuffer);
101 void RenderMessageDispatcher::RemovePropertyBuffer( RenderGeometry& renderGeometry, Render::PropertyBuffer* propertyBuffer )
103 typedef MessageValue2< RenderManager, RenderGeometry*, Render::PropertyBuffer* > DerivedType;
105 // Reserve some memory inside the render queue
106 unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
108 // Construct message in the render queue memory; note that delete should not be called on the return value
109 new (slot) DerivedType( &mRenderManager, &RenderManager::RemovePropertyBuffer, &renderGeometry, propertyBuffer );
112 void RenderMessageDispatcher::SetGeometryType( RenderGeometry& geometry, int geometryType )
114 typedef MessageValue2< RenderManager, RenderGeometry*, int > DerivedType;
116 // Reserve some memory inside the render queue
117 unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
119 // Construct message in the render queue memory; note that delete should not be called on the return value
120 new (slot) DerivedType( &mRenderManager, &RenderManager::SetGeometryType, &geometry, geometryType );
123 void RenderMessageDispatcher::SetGeometryRequiresDepthTest( RenderGeometry& geometry, bool requiresDepthTest )
125 typedef MessageValue2< RenderManager, RenderGeometry*, bool > DerivedType;
127 // Reserve some memory inside the render queue
128 unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
130 // Construct message in the render queue memory; note that delete should not be called on the return value
131 new (slot) DerivedType( &mRenderManager, &RenderManager::SetGeometryRequiresDepthTest, &geometry, requiresDepthTest );
134 void RenderMessageDispatcher::AddRenderTracker( RenderTracker& renderTracker )
136 typedef MessageValue1< RenderManager, RenderTracker* > DerivedType;
138 // Reserve some memory inside the render queue
139 unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
141 // Construct message in the render queue memory; note that delete should not be called on the return value
142 new (slot) DerivedType( &mRenderManager, &RenderManager::AddRenderTracker, &renderTracker );
145 void RenderMessageDispatcher::RemoveRenderTracker( RenderTracker& renderTracker )
147 typedef MessageValue1< RenderManager, RenderTracker* > DerivedType;
149 // Reserve some memory inside the render queue
150 unsigned int* slot = mRenderQueue.ReserveMessageSlot( mBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) );
152 // Construct message in the render queue memory; note that delete should not be called on the return value
153 new (slot) DerivedType( &mRenderManager, &RenderManager::RemoveRenderTracker, &renderTracker );
156 } // namespace SceneGraph
158 } // namespace Internal