// 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
+ LOADING_RESOURCES = 1<<3, ///< - Resources are being loaded
+ MONITORING_PERFORMANCE = 1<<4, ///< - The --enable-performance-monitor option is being used
+ RENDER_TASK_SYNC = 1<<5 ///< - 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:
* @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 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.