1 #ifndef __DALI_INTERNAL_CORE_H__
2 #define __DALI_INTERNAL_CORE_H__
5 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
7 // Licensed under the Flora License, Version 1.0 (the License);
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://floralicense.org/license/
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an AS IS BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
21 #include <dali/public-api/object/ref-object.h>
22 #include <dali/internal/common/owner-pointer.h>
23 #include <dali/internal/event/animation/animation-playlist-declarations.h>
24 #include <dali/internal/event/common/stage-def.h>
25 #include <dali/internal/update/resources/resource-manager-declarations.h>
32 class RenderController;
33 class PlatformAbstraction;
36 class GlSyncAbstraction;
47 class NotificationManager;
48 class AnimationPlaylist;
49 class PropertyNotificationManager;
50 class DynamicsNotifier;
53 class GestureEventProcessor;
55 class ResourceManager;
71 * Internal class for Dali::Integration::Core
78 * Create and initialise a new Core instance
80 Core( Integration::RenderController& renderController,
81 Integration::PlatformAbstraction& platform,
82 Integration::GlAbstraction& glAbstraction,
83 Integration::GlSyncAbstraction& glSyncAbstraction,
84 Integration::GestureManager& gestureManager );
92 * @copydoc Dali::Integration::Core::ContextCreated()
94 void ContextCreated();
97 * @copydoc Dali::Integration::Core::ContextToBeDestroyed()
99 void ContextToBeDestroyed();
102 * @copydoc Dali::Integration::Core::SurfaceResized(unsigned int, unsigned int)
104 void SurfaceResized(unsigned int width, unsigned int height);
107 * @copydoc Dali::Integration::Core::SetDpi(unsigned int, unsigned int)
109 void SetDpi(unsigned int dpiHorizontal, unsigned int dpiVertical);
112 * @copydoc Dali::Integration::Core::SetMinimumFrameTimeInterval(unsigned int)
114 void SetMinimumFrameTimeInterval(unsigned int interval);
117 * @copydoc Dali::Integration::Core::Update()
119 void Update( Integration::UpdateStatus& status );
122 * @copydoc Dali::Integration::Core::Render()
124 void Render( Integration::RenderStatus& status );
127 * @copydoc Dali::Integration::Core::Suspend()
132 * @copydoc Dali::Integration::Core::Resume()
137 * @copydoc Dali::Integration::Core::QueueEvent(const Integration::Event&)
139 void QueueEvent( const Integration::Event& event );
142 * @copydoc Dali::Integration::Core::ProcessEvents()
144 void ProcessEvents();
147 * @copydoc Dali::Integration::Core::UpdateTouchData(const Integration::TouchData&)
149 void UpdateTouchData(const Integration::TouchData& touch);
152 * @copydoc Dali::Integration::Core::GetMaximumUpdateCount()
154 unsigned int GetMaximumUpdateCount() const;
157 * @copydoc Dali::Integration::Core::Sleep()
162 * @copydoc Dali::Integration::Core::Wake()
167 * @copydoc Dali::Integration::Core::VSync()
169 void VSync( unsigned int frameNumber, unsigned int seconds, unsigned int microseconds );
172 * @copydoc Dali::Integration::Core::GetSystemOverlay()
174 Integration::SystemOverlay& GetSystemOverlay();
176 private: // for use by ThreadLocalStorage
179 * Returns the current stage.
180 * @return A smart-pointer to the current stage.
182 StagePtr GetCurrentStage();
185 * Returns the platform abstraction.
186 * @return A reference to the platform abstraction.
188 Integration::PlatformAbstraction& GetPlatform();
191 * Returns the update manager.
192 * @return A reference to the update manager.
194 SceneGraph::UpdateManager& GetUpdateManager();
197 * Returns the render manager.
198 * @return A reference to the render manager.
200 SceneGraph::RenderManager& GetRenderManager();
203 * Returns the notification manager.
204 * @return A reference to the Notification Manager.
206 NotificationManager& GetNotificationManager();
209 * Returns the Resource Manager.
210 * @return A reference to the Resource Manager.
212 ResourceManager& GetResourceManager();
215 * Returns the Resource client.
216 * @return A reference to the Resource Client.
218 ResourceClient& GetResourceClient();
221 * Returns the Font factory
222 * @return A reference to the Font factory.
224 FontFactory& GetFontFactory();
227 * Returns the Image factory
228 * @return A reference to the Image factory.
230 ImageFactory& GetImageFactory();
233 * Returns the Model factory
234 * @return A reference to the Model factory.
236 ModelFactory& GetModelFactory();
239 * Returns the Shader factory
240 * @return A reference to the Shader binary factory.
242 ShaderFactory& GetShaderFactory();
245 * Returns the gesture event processor.
246 * @return A reference to the gesture event processor.
248 GestureEventProcessor& GetGestureEventProcessor();
253 * Undefined copy and assignment operators
255 Core(const Core& core); // No definition
256 Core& operator=(const Core& core); // No definition
259 * Create Thread local storage
261 void CreateThreadLocalStorage();
265 Integration::RenderController& mRenderController; ///< Reference to Render controller to tell it to keep rendering
266 Integration::PlatformAbstraction& mPlatform; ///< The interface providing platform specific services.
268 IntrusivePtr<Stage> mStage; ///< The current stage
269 GestureEventProcessor* mGestureEventProcessor; ///< The gesture event processor
270 EventProcessor* mEventProcessor; ///< The event processor
271 SceneGraph::UpdateManager* mUpdateManager; ///< Update manager
272 SceneGraph::RenderManager* mRenderManager; ///< Render manager
273 SceneGraph::DiscardQueue* mDiscardQueue; ///< Used to cleanup nodes & resources when no longer in use.
274 ResourcePostProcessList* mResourcePostProcessQueue; ///< Stores resource ids which require post processing after render
275 NotificationManager* mNotificationManager; ///< Notification manager
276 AnimationPlaylistOwner mAnimationPlaylist; ///< For 'Fire and forget' animation support
277 OwnerPointer<PropertyNotificationManager> mPropertyNotificationManager; ///< For safe signal emmision of property changed notifications
278 OwnerPointer<DynamicsNotifier> mDynamicsNotifier;
279 FrameTime* mFrameTime; ///< Time when we render
280 FontFactory* mFontFactory; ///< font resource factory
281 ImageFactory* mImageFactory; ///< Image resource factory
282 ModelFactory* mModelFactory; ///< Model resource factory
283 ShaderFactory* mShaderFactory; ///< Shader resource factory
284 ResourceClient* mResourceClient; ///< Asynchronous Resource Loading
285 ResourceManager* mResourceManager; ///< Asynchronous Resource Loading
286 TouchResampler* mTouchResampler; ///< Resamples touches to correct frame rate.
288 bool mIsActive : 1; ///< Whether Core is active or suspended
289 bool mProcessingEvent : 1; ///< True during ProcessEvents()
291 friend class ThreadLocalStorage;
295 } // namespace Internal
299 #endif // __DALI_INTERNAL_CORE_H__