1 #ifndef __DALI_INTERNAL_CORE_H__
2 #define __DALI_INTERNAL_CORE_H__
5 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0
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.
22 #include <dali/public-api/object/ref-object.h>
23 #include <dali/internal/common/owner-pointer.h>
24 #include <dali/internal/event/animation/animation-playlist-declarations.h>
25 #include <dali/internal/event/common/stage-def.h>
26 #include <dali/internal/update/resources/resource-manager-declarations.h>
27 #include <dali/public-api/common/view-mode.h>
34 class RenderController;
35 class PlatformAbstraction;
38 class GlSyncAbstraction;
49 class NotificationManager;
50 class AnimationPlaylist;
51 class PropertyNotificationManager;
54 class GestureEventProcessor;
56 class ResourceManager;
73 * Internal class for Dali::Integration::Core
80 * Create and initialise a new Core instance
82 Core( Integration::RenderController& renderController,
83 Integration::PlatformAbstraction& platform,
84 Integration::GlAbstraction& glAbstraction,
85 Integration::GlSyncAbstraction& glSyncAbstraction,
86 Integration::GestureManager& gestureManager );
94 * @copydoc Dali::Integration::Core::ContextCreated()
96 void ContextCreated();
99 * @copydoc Dali::Integration::Core::ContextToBeDestroyed()
101 void ContextToBeDestroyed();
104 * @copydoc Dali::Integration::Core::SurfaceResized(unsigned int, unsigned int)
106 void SurfaceResized(unsigned int width, unsigned int height);
109 * @copydoc Dali::Integration::Core::SetDpi(unsigned int, unsigned int)
111 void SetDpi(unsigned int dpiHorizontal, unsigned int dpiVertical);
114 * @copydoc Dali::Integration::Core::SetMinimumFrameTimeInterval(unsigned int)
116 void SetMinimumFrameTimeInterval(unsigned int interval);
119 * @copydoc Dali::Integration::Core::Update()
121 void Update( Integration::UpdateStatus& status );
124 * @copydoc Dali::Integration::Core::Render()
126 void Render( Integration::RenderStatus& status );
129 * @copydoc Dali::Integration::Core::Suspend()
134 * @copydoc Dali::Integration::Core::Resume()
139 * @copydoc Dali::Integration::Core::QueueEvent(const Integration::Event&)
141 void QueueEvent( const Integration::Event& event );
144 * @copydoc Dali::Integration::Core::ProcessEvents()
146 void ProcessEvents();
149 * @copydoc Dali::Integration::Core::UpdateTouchData(const Integration::TouchData&)
151 void UpdateTouchData(const Integration::TouchData& touch);
154 * @copydoc Dali::Integration::Core::GetMaximumUpdateCount()
156 unsigned int GetMaximumUpdateCount() const;
159 * @copydoc Dali::Integration::Core::Sleep()
164 * @copydoc Dali::Integration::Core::Wake()
169 * @copydoc Dali::Integration::Core::VSync()
171 void VSync( unsigned int frameNumber, unsigned int seconds, unsigned int microseconds );
174 * @copydoc Dali::Integration::Core::GetSystemOverlay()
176 Integration::SystemOverlay& GetSystemOverlay();
181 * @copydoc Dali::Integration::Core::SetViewMode()
183 void SetViewMode( ViewMode viewMode );
186 * @copydoc Dali::Integration::Core::GetViewMode()
188 ViewMode GetViewMode() const;
191 * @copydoc Dali::Integration::Core::SetStereoBase()
193 void SetStereoBase( float stereoBase );
196 * @copydoc Dali::Integration::Core::GetStereoBase()
198 float GetStereoBase() const;
200 private: // for use by ThreadLocalStorage
203 * Returns the current stage.
204 * @return A smart-pointer to the current stage.
206 StagePtr GetCurrentStage();
209 * Returns the platform abstraction.
210 * @return A reference to the platform abstraction.
212 Integration::PlatformAbstraction& GetPlatform();
215 * Returns the update manager.
216 * @return A reference to the update manager.
218 SceneGraph::UpdateManager& GetUpdateManager();
221 * Returns the render manager.
222 * @return A reference to the render manager.
224 SceneGraph::RenderManager& GetRenderManager();
227 * Returns the notification manager.
228 * @return A reference to the Notification Manager.
230 NotificationManager& GetNotificationManager();
233 * Returns the Resource Manager.
234 * @return A reference to the Resource Manager.
236 ResourceManager& GetResourceManager();
239 * Returns the Resource client.
240 * @return A reference to the Resource Client.
242 ResourceClient& GetResourceClient();
245 * Returns the Font factory
246 * @return A reference to the Font factory.
248 FontFactory& GetFontFactory();
251 * Returns the Image factory
252 * @return A reference to the Image factory.
254 ImageFactory& GetImageFactory();
257 * Returns the Model factory
258 * @return A reference to the Model factory.
260 ModelFactory& GetModelFactory();
263 * Returns the Shader factory
264 * @return A reference to the Shader binary factory.
266 ShaderFactory& GetShaderFactory();
269 * Returns the gesture event processor.
270 * @return A reference to the gesture event processor.
272 GestureEventProcessor& GetGestureEventProcessor();
275 * Returns the Emoji factory.
276 * @return a reference to the Emoji factory.
278 EmojiFactory& GetEmojiFactory();
283 * Undefined copy and assignment operators
285 Core(const Core& core); // No definition
286 Core& operator=(const Core& core); // No definition
289 * Create Thread local storage
291 void CreateThreadLocalStorage();
295 Integration::RenderController& mRenderController; ///< Reference to Render controller to tell it to keep rendering
296 Integration::PlatformAbstraction& mPlatform; ///< The interface providing platform specific services.
298 IntrusivePtr<Stage> mStage; ///< The current stage
299 GestureEventProcessor* mGestureEventProcessor; ///< The gesture event processor
300 EventProcessor* mEventProcessor; ///< The event processor
301 SceneGraph::UpdateManager* mUpdateManager; ///< Update manager
302 SceneGraph::RenderManager* mRenderManager; ///< Render manager
303 SceneGraph::DiscardQueue* mDiscardQueue; ///< Used to cleanup nodes & resources when no longer in use.
304 ResourcePostProcessList* mResourcePostProcessQueue; ///< Stores resource ids which require post processing after render
305 NotificationManager* mNotificationManager; ///< Notification manager
306 AnimationPlaylistOwner mAnimationPlaylist; ///< For 'Fire and forget' animation support
307 OwnerPointer<PropertyNotificationManager> mPropertyNotificationManager; ///< For safe signal emmision of property changed notifications
308 FrameTime* mFrameTime; ///< Time when we render
309 FontFactory* mFontFactory; ///< font resource factory
310 ImageFactory* mImageFactory; ///< Image resource factory
311 ModelFactory* mModelFactory; ///< Model resource factory
312 ShaderFactory* mShaderFactory; ///< Shader resource factory
313 ResourceClient* mResourceClient; ///< Asynchronous Resource Loading
314 ResourceManager* mResourceManager; ///< Asynchronous Resource Loading
315 TouchResampler* mTouchResampler; ///< Resamples touches to correct frame rate.
316 EmojiFactory* mEmojiFactory; ///< Emoji resource factory.
318 bool mIsActive : 1; ///< Whether Core is active or suspended
319 bool mProcessingEvent : 1; ///< True during ProcessEvents()
321 friend class ThreadLocalStorage;
325 } // namespace Internal
329 #endif // __DALI_INTERNAL_CORE_H__