Merge "Valgrind fix for uninitialized values in Render::Sampler" into devel/master
[platform/core/uifw/dali-core.git] / dali / integration-api / core.h
index c8bf646..ba492a1 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,28 +45,26 @@ 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 NOTIFICATIONS_PENDING;  ///< 0x20 - Notifications are pending for the event-thread
-  extern const unsigned int MONITORING_PERFORMANCE; ///< 0x40 - The --enable-performance-monitor option is being used
-  extern const unsigned int RENDER_TASK_SYNC;       ///< 0x80 - A render task is waiting for render sync
+  NOT_REQUESTED           = 0,    ///< Zero means that no further updates are required
+  STAGE_KEEP_RENDERING    = 1<<1, ///<  - Stage::KeepRendering() is being used
+  ANIMATIONS_RUNNING      = 1<<2, ///< - Animations are ongoing
+  MONITORING_PERFORMANCE  = 1<<3, ///< - The --enable-performance-monitor option is being used
+  RENDER_TASK_SYNC        = 1<<4  ///< - A render task is waiting for render sync
 };
+}
 
 /**
  * The status of the Core::Update operation.
  */
-class DALI_IMPORT_API UpdateStatus
+class UpdateStatus
 {
 public:
 
@@ -110,7 +110,7 @@ public:
 /**
  * The status of the Core::Render operation.
  */
-class DALI_IMPORT_API RenderStatus
+class RenderStatus
 {
 public:
 
@@ -118,8 +118,7 @@ public:
    * Constructor
    */
   RenderStatus()
-  : needsUpdate(false),
-    hasRendered(false)
+  : needsUpdate(false)
   {
   }
 
@@ -136,21 +135,9 @@ public:
    */
   bool NeedsUpdate() { return needsUpdate; }
 
-  /**
-   * Set whether there were new render instructions.
-   */
-  void SetHasRendered(bool rendered) { hasRendered = rendered; }
-
-  /**
-   * Query whether there were new render instructions.
-   * @return true if there were render instructions
-   */
-  bool HasRendered() { return hasRendered; }
-
 private:
 
   bool needsUpdate;
-  bool hasRendered;
 };
 
 /**
@@ -206,13 +193,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.
@@ -222,6 +213,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
@@ -235,7 +231,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.
@@ -247,6 +254,15 @@ public:
    */
   void SurfaceResized(unsigned int width, unsigned int height);
 
+  /**
+   * Notify the Core about the top margin size.
+   * Available stage size is reduced by this size.
+   * The stage is located below the size at the top of the display
+   * It is mainly useful for indicator in mobile device
+   * @param[in] margin margin size
+   */
+  void SetTopMargin( unsigned int margin );
+
   // Core setters
 
   /**
@@ -281,6 +297,11 @@ public:
   void Resume();
 
   /**
+   * Notify Core that the scene has been created.
+   */
+  void SceneCreated();
+
+  /**
    * Queue an event with Core.
    * Pre-processing of events may be beneficial e.g. a series of motion events could be throttled, so that only the last event is queued.
    * Multi-threading note: this method should be called from the main thread.
@@ -296,15 +317,6 @@ public:
   void ProcessEvents();
 
   /**
-   * Update external raw touch data in core.
-   * The core will use the touch data to generate Dali Touch/Gesture events for applications to use
-   * in the update thread.
-   * @param[in] touch The raw touch data.
-   * @note This can be called from either the event thread OR a dedicated touch thread.
-   */
-  void UpdateTouchData(const TouchData& touch);
-
-  /**
    * The Core::Update() method prepares a frame for rendering. This method determines how many frames
    * may be prepared, ahead of the rendering.
    * For example if the maximum update count is 2, then Core::Update() for frame N+1 may be processed