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/integration-api/context-notifier.h>
24 #include <dali/internal/common/owner-pointer.h>
25 #include <dali/internal/event/animation/animation-playlist-declarations.h>
26 #include <dali/internal/event/common/stage-def.h>
27 #include <dali/internal/update/resources/resource-manager-declarations.h>
28 #include <dali/public-api/common/view-mode.h>
29 #include <dali/integration-api/resource-policies.h>
36 class RenderController;
37 class PlatformAbstraction;
40 class GlSyncAbstraction;
51 class NotificationManager;
52 class AnimationPlaylist;
53 class PropertyNotificationManager;
56 class GestureEventProcessor;
58 class ResourceManager;
74 * Internal class for Dali::Integration::Core
81 * Create and initialise a new Core instance
83 Core( Integration::RenderController& renderController,
84 Integration::PlatformAbstraction& platform,
85 Integration::GlAbstraction& glAbstraction,
86 Integration::GlSyncAbstraction& glSyncAbstraction,
87 Integration::GestureManager& gestureManager,
88 ResourcePolicy::DataRetention dataRetentionPolicy );
96 * @copydoc Dali::Integration::Core::GetContextNotifier()
98 Integration::ContextNotifierInterface* GetContextNotifier();
101 * @copydoc Dali::Integration::Core::ContextCreated()
103 void ContextCreated();
106 * @copydoc Dali::Integration::Core::ContextDestroyed()
108 void ContextDestroyed();
111 * @copydoc Dali::Integration::Core::RecoverFromContextLoss()
113 void RecoverFromContextLoss();
116 * @copydoc Dali::Integration::Core::SurfaceResized(unsigned int, unsigned int)
118 void SurfaceResized(unsigned int width, unsigned int height);
121 * @copydoc Dali::Integration::Core::SetDpi(unsigned int, unsigned int)
123 void SetDpi(unsigned int dpiHorizontal, unsigned int dpiVertical);
126 * @copydoc Dali::Integration::Core::SetMinimumFrameTimeInterval(unsigned int)
128 void SetMinimumFrameTimeInterval(unsigned int interval);
131 * @copydoc Dali::Integration::Core::Update()
133 void Update( float elapsedSeconds, unsigned int lastVSyncTimeMilliseconds, unsigned int nextVSyncTimeMilliseconds, Integration::UpdateStatus& status );
136 * @copydoc Dali::Integration::Core::Render()
138 void Render( Integration::RenderStatus& status );
141 * @copydoc Dali::Integration::Core::Suspend()
146 * @copydoc Dali::Integration::Core::Resume()
151 * @copydoc Dali::Integration::Core::SceneCreated()
156 * @copydoc Dali::Integration::Core::QueueEvent(const Integration::Event&)
158 void QueueEvent( const Integration::Event& event );
161 * @copydoc Dali::Integration::Core::ProcessEvents()
163 void ProcessEvents();
166 * @copydoc Dali::Integration::Core::UpdateTouchData(const Integration::TouchData&)
168 void UpdateTouchData(const Integration::TouchData& touch);
171 * @copydoc Dali::Integration::Core::GetMaximumUpdateCount()
173 unsigned int GetMaximumUpdateCount() const;
176 * @copydoc Dali::Integration::Core::GetSystemOverlay()
178 Integration::SystemOverlay& GetSystemOverlay();
183 * @copydoc Dali::Integration::Core::SetViewMode()
185 void SetViewMode( ViewMode viewMode );
188 * @copydoc Dali::Integration::Core::GetViewMode()
190 ViewMode GetViewMode() const;
193 * @copydoc Dali::Integration::Core::SetStereoBase()
195 void SetStereoBase( float stereoBase );
198 * @copydoc Dali::Integration::Core::GetStereoBase()
200 float GetStereoBase() const;
202 private: // for use by ThreadLocalStorage
205 * Returns the current stage.
206 * @return A smart-pointer to the current stage.
208 StagePtr GetCurrentStage();
211 * Returns the platform abstraction.
212 * @return A reference to the platform abstraction.
214 Integration::PlatformAbstraction& GetPlatform();
217 * Returns the update manager.
218 * @return A reference to the update manager.
220 SceneGraph::UpdateManager& GetUpdateManager();
223 * Returns the render manager.
224 * @return A reference to the render manager.
226 SceneGraph::RenderManager& GetRenderManager();
229 * Returns the notification manager.
230 * @return A reference to the Notification Manager.
232 NotificationManager& GetNotificationManager();
235 * Returns the Resource Manager.
236 * @return A reference to the Resource Manager.
238 ResourceManager& GetResourceManager();
241 * Returns the Resource client.
242 * @return A reference to the Resource Client.
244 ResourceClient& GetResourceClient();
247 * Returns the Font factory
248 * @return A reference to the Font factory.
250 FontFactory& GetFontFactory();
253 * Returns the Image factory
254 * @return A reference to the Image factory.
256 ImageFactory& GetImageFactory();
259 * Returns the Model factory
260 * @return A reference to the Model factory.
262 ModelFactory& GetModelFactory();
265 * Returns the Shader factory
266 * @return A reference to the Shader binary factory.
268 ShaderFactory& GetShaderFactory();
271 * Returns the gesture event processor.
272 * @return A reference to the gesture event processor.
274 GestureEventProcessor& GetGestureEventProcessor();
277 * Returns the Emoji factory.
278 * @return a reference to the Emoji factory.
280 EmojiFactory& GetEmojiFactory();
285 * Undefined copy and assignment operators
287 Core(const Core& core); // No definition
288 Core& operator=(const Core& core); // No definition
291 * Create Thread local storage
293 void CreateThreadLocalStorage();
297 Integration::RenderController& mRenderController; ///< Reference to Render controller to tell it to keep rendering
298 Integration::PlatformAbstraction& mPlatform; ///< The interface providing platform specific services.
300 IntrusivePtr<Stage> mStage; ///< The current stage
301 GestureEventProcessor* mGestureEventProcessor; ///< The gesture event processor
302 EventProcessor* mEventProcessor; ///< The event processor
303 SceneGraph::UpdateManager* mUpdateManager; ///< Update manager
304 SceneGraph::RenderManager* mRenderManager; ///< Render manager
305 SceneGraph::DiscardQueue* mDiscardQueue; ///< Used to cleanup nodes & resources when no longer in use.
306 ResourcePostProcessList* mResourcePostProcessQueue; ///< Stores resource ids which require post processing after render
307 NotificationManager* mNotificationManager; ///< Notification manager
308 AnimationPlaylistOwner mAnimationPlaylist; ///< For 'Fire and forget' animation support
309 OwnerPointer<PropertyNotificationManager> mPropertyNotificationManager; ///< For safe signal emmision of property changed notifications
310 FontFactory* mFontFactory; ///< font resource factory
311 ImageFactory* mImageFactory; ///< Image resource factory
312 ModelFactory* mModelFactory; ///< Model resource factory
313 ShaderFactory* mShaderFactory; ///< Shader resource factory
314 ResourceClient* mResourceClient; ///< Asynchronous Resource Loading
315 ResourceManager* mResourceManager; ///< Asynchronous Resource Loading
316 TouchResampler* mTouchResampler; ///< Resamples touches to correct frame rate.
317 EmojiFactory* mEmojiFactory; ///< Emoji resource factory.
319 bool mIsActive : 1; ///< Whether Core is active or suspended
320 bool mProcessingEvent : 1; ///< True during ProcessEvents()
322 friend class ThreadLocalStorage;
326 } // namespace Internal
330 #endif // __DALI_INTERNAL_CORE_H__