// 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
{
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:
/**
* The status of the Core::Render operation.
*/
-class DALI_IMPORT_API RenderStatus
+class RenderStatus
{
public:
* Constructor
*/
RenderStatus()
- : needsUpdate(false),
- hasRendered(false)
+ : needsUpdate(false)
{
}
*/
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;
};
/**
* @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.
// 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
* 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.
*/
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
/**
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.
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