Merge "DALi Version 1.0.20" into tizen
[platform/core/uifw/dali-core.git] / dali / integration-api / core.h
index d9d5332..9645475 100644 (file)
@@ -21,6 +21,8 @@
 // EXTERNAL INCLUDES
 #include <dali/public-api/common/dali-common.h>
 #include <dali/public-api/common/view-mode.h>
+#include <dali/integration-api/context-notifier.h>
+#include <dali/integration-api/resource-policies.h>
 
 namespace Dali
 {
@@ -43,22 +45,24 @@ class SystemOverlay;
 struct Event;
 struct TouchData;
 
+
 /**
  * The reasons why further updates are required.
  */
-namespace KeepUpdating DALI_IMPORT_API
+namespace KeepUpdating
+{
+enum Reasons
 {
-  extern const unsigned int NOT_REQUESTED; ///< Zero means that no further updates are required
-
-  // Bit-field values
-  extern const unsigned int STAGE_KEEP_RENDERING;   ///< 0x01 - Stage::KeepRendering() is being used
-  extern const unsigned int INCOMING_MESSAGES;      ///< 0x02 - Event-thread is sending messages to update-thread
-  extern const unsigned int ANIMATIONS_RUNNING;     ///< 0x04 - Animations are ongoing
-  extern const unsigned int DYNAMICS_CHANGED;       ///< 0x08 - A dynamics simulation is running
-  extern const unsigned int LOADING_RESOURCES;      ///< 0x10 - Resources are being loaded
-  extern const unsigned int MONITORING_PERFORMANCE; ///< 0x20 - The --enable-performance-monitor option is being used
-  extern const unsigned int RENDER_TASK_SYNC;       ///< 0x40 - A render task is waiting for render sync
+  NOT_REQUESTED           = 0x00, ///< Zero means that no further updates are required
+  STAGE_KEEP_RENDERING    = 0x01, ///<  - Stage::KeepRendering() is being used
+  INCOMING_MESSAGES       = 0x02, ///< - Event-thread is sending messages to update-thread
+  ANIMATIONS_RUNNING      = 0x04, ///< - Animations are ongoing
+  DYNAMICS_CHANGED        = 0x08, ///< - A dynamics simulation is running
+  LOADING_RESOURCES       = 0x10, ///< - Resources are being loaded
+  MONITORING_PERFORMANCE  = 0x20, ///< - The --enable-performance-monitor option is being used
+  RENDER_TASK_SYNC        = 0x40  ///< - A render task is waiting for render sync
 };
+}
 
 /**
  * The status of the Core::Update operation.
@@ -205,13 +209,17 @@ public:
    * @param[in] glAbstraction The interface providing OpenGL services.
    * @param[in] glSyncAbstraction The interface providing OpenGL sync objects.
    * @param[in] gestureManager The interface providing gesture manager services.
+   * @param[in] policy The data retention policy. This depends on application setting
+   * and platform support. Dali should honour this policy when deciding to discard
+   * intermediate resource data.
    * @return A newly allocated Core.
    */
   static Core* New(RenderController& renderController,
                    PlatformAbstraction& platformAbstraction,
                    GlAbstraction& glAbstraction,
                    GlSyncAbstraction& glSyncAbstraction,
-                   GestureManager& gestureManager);
+                   GestureManager& gestureManager,
+                   ResourcePolicy::DataRetention policy);
 
   /**
    * Non-virtual destructor. Core is not intended as a base class.
@@ -221,6 +229,11 @@ public:
   // GL Context Lifecycle
 
   /**
+   * Get the object that will notify the application/toolkit when context is lost/regained
+   */
+  ContextNotifierInterface* GetContextNotifier();
+
+  /**
    * Notify the Core that the GL context has been created.
    * The context must be created before the Core can render.
    * Multi-threading note: this method should be called from the rendering thread only
@@ -234,7 +247,18 @@ public:
    * Multi-threading note: this method should be called from the rendering thread only
    * @post The Core is unaware of any GL context.
    */
-  void ContextToBeDestroyed();
+  void ContextDestroyed();
+
+  /**
+   * Notify the Core that the GL context has been re-created, e.g. after ReplaceSurface
+   * or Context loss.
+   *
+   * In the case of ReplaceSurface, both ContextToBeDestroyed() and ContextCreated() will have
+   * been called on the render thread before this is called on the event thread.
+   *
+   * Multi-threading note: this method should be called from the main thread
+   */
+  void RecoverFromContextLoss();
 
   /**
    * Notify the Core that the GL surface has been resized.