-#ifndef __DALI_INTERNAL_CORE_H__
-#define __DALI_INTERNAL_CORE_H__
+#ifndef DALI_INTERNAL_CORE_H
+#define DALI_INTERNAL_CORE_H
/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
// INTERNAL INCLUDES
+#include <dali/public-api/common/dali-vector.h>
#include <dali/public-api/object/ref-object.h>
#include <dali/integration-api/context-notifier.h>
+#include <dali/integration-api/core-enumerations.h>
#include <dali/internal/common/owner-pointer.h>
#include <dali/internal/event/animation/animation-playlist-declarations.h>
#include <dali/internal/event/common/stage-def.h>
-#include <dali/internal/update/resources/resource-manager-declarations.h>
#include <dali/public-api/common/view-mode.h>
#include <dali/integration-api/resource-policies.h>
namespace Integration
{
+class Processor;
class RenderController;
class PlatformAbstraction;
class GestureManager;
class PropertyNotificationManager;
class EventProcessor;
class GestureEventProcessor;
-class ResourceClient;
-class ResourceManager;
-class ImageFactory;
class ShaderFactory;
class TouchResampler;
class RelayoutController;
class UpdateManager;
class RenderManager;
class DiscardQueue;
-class TextureCacheDispatcher;
-class GeometryBatcher;
+class RenderTaskProcessor;
}
/**
Integration::GlAbstraction& glAbstraction,
Integration::GlSyncAbstraction& glSyncAbstraction,
Integration::GestureManager& gestureManager,
- ResourcePolicy::DataRetention dataRetentionPolicy );
+ ResourcePolicy::DataRetention dataRetentionPolicy,
+ Integration::RenderToFrameBuffer renderToFboEnabled,
+ Integration::DepthBufferAvailable depthBufferAvailable,
+ Integration::StencilBufferAvailable stencilBufferAvailable );
/**
* Destructor
void RecoverFromContextLoss();
/**
- * @copydoc Dali::Integration::Core::SurfaceResized(unsigned int, unsigned int)
+ * @copydoc Dali::Integration::Core::SurfaceResized(uint32_t, uint32_t)
*/
- void SurfaceResized(unsigned int width, unsigned int height);
+ void SurfaceResized(uint32_t width, uint32_t height);
/**
- * @copydoc Dali::Integration::Core::SetDpi(unsigned int, unsigned int)
+ * @copydoc Dali::Integration::Core::SetTopMargin( uint32_t margin )
*/
- void SetDpi(unsigned int dpiHorizontal, unsigned int dpiVertical);
+ void SetTopMargin( uint32_t margin );
/**
- * @copydoc Dali::Integration::Core::SetMinimumFrameTimeInterval(unsigned int)
+ * @copydoc Dali::Integration::Core::SetDpi(uint32_t, uint32_t)
*/
- void SetMinimumFrameTimeInterval(unsigned int interval);
+ void SetDpi(uint32_t dpiHorizontal, uint32_t dpiVertical);
/**
- * @copydoc Dali::Integration::Core::Update()
+ * @copydoc Dali::Integration::Core::SetMinimumFrameTimeInterval(uint32_t)
*/
- void Update( float elapsedSeconds, unsigned int lastVSyncTimeMilliseconds, unsigned int nextVSyncTimeMilliseconds, Integration::UpdateStatus& status );
+ void SetMinimumFrameTimeInterval(uint32_t interval);
/**
- * @copydoc Dali::Integration::Core::Render()
- */
- void Render( Integration::RenderStatus& status );
-
- /**
- * @copydoc Dali::Integration::Core::Suspend()
+ * @copydoc Dali::Integration::Core::Update()
*/
- void Suspend();
+ void Update( float elapsedSeconds, uint32_t lastVSyncTimeMilliseconds, uint32_t nextVSyncTimeMilliseconds, Integration::UpdateStatus& status, bool renderToFboEnabled, bool isRenderingToFbo );
/**
- * @copydoc Dali::Integration::Core::Resume()
+ * @copydoc Dali::Integration::Core::Render()
*/
- void Resume();
+ void Render( Integration::RenderStatus& status, bool forceClear );
/**
* @copydoc Dali::Integration::Core::SceneCreated()
/**
* @copydoc Dali::Integration::Core::GetMaximumUpdateCount()
*/
- unsigned int GetMaximumUpdateCount() const;
+ uint32_t GetMaximumUpdateCount() const;
/**
* @copydoc Dali::Integration::Core::GetSystemOverlay()
*/
float GetStereoBase() const;
-private: // for use by ThreadLocalStorage
+
+ /**
+ * @copydoc Dali::Integration::Core::RegisterProcessor
+ */
+ void RegisterProcessor( Dali::Integration::Processor& processor );
+
+ /**
+ * @copydoc Dali::Integration::Core::UnregisterProcessor
+ */
+ void UnregisterProcessor( Dali::Integration::Processor& processor );
+
+private:
+ /**
+ * Run each registered processor
+ */
+ void RunProcessors();
+
+ // for use by ThreadLocalStorage
/**
* Returns the current stage.
NotificationManager& GetNotificationManager();
/**
- * Returns the Resource Manager.
- * @return A reference to the Resource Manager.
- */
- ResourceManager& GetResourceManager();
-
- /**
- * Returns the Resource client.
- * @return A reference to the Resource Client.
- */
- ResourceClient& GetResourceClient();
-
- /**
- * Returns the Image factory
- * @return A reference to the Image factory.
- */
- ImageFactory& GetImageFactory();
-
- /**
* Returns the Shader factory
* @return A reference to the Shader binary factory.
*/
Integration::PlatformAbstraction& mPlatform; ///< The interface providing platform specific services.
IntrusivePtr<Stage> mStage; ///< The current stage
- GestureEventProcessor* mGestureEventProcessor; ///< The gesture event processor
- EventProcessor* mEventProcessor; ///< The event processor
- SceneGraph::UpdateManager* mUpdateManager; ///< Update manager
- SceneGraph::RenderManager* mRenderManager; ///< Render manager
- SceneGraph::DiscardQueue* mDiscardQueue; ///< Used to cleanup nodes & resources when no longer in use.
- SceneGraph::TextureCacheDispatcher* mTextureCacheDispatcher; ///< Used to send messages to TextureCache
- LockedResourceQueue* mTextureUploadedQueue; ///< Stores resource ids which require post processing after render
- NotificationManager* mNotificationManager; ///< Notification manager
AnimationPlaylistOwner mAnimationPlaylist; ///< For 'Fire and forget' animation support
OwnerPointer<PropertyNotificationManager> mPropertyNotificationManager; ///< For safe signal emmision of property changed notifications
- ImageFactory* mImageFactory; ///< Image resource factory
- ShaderFactory* mShaderFactory; ///< Shader resource factory
- ResourceClient* mResourceClient; ///< Asynchronous Resource Loading
- ResourceManager* mResourceManager; ///< Asynchronous Resource Loading
IntrusivePtr< RelayoutController > mRelayoutController; ///< Size negotiation relayout controller
- SceneGraph::GeometryBatcher* mGeometryBatcher; ///< Instance of the geometry batcher
- bool mIsActive : 1; ///< Whether Core is active or suspended
bool mProcessingEvent : 1; ///< True during ProcessEvents()
+ OwnerPointer<SceneGraph::RenderTaskProcessor> mRenderTaskProcessor; ///< Handles the processing of render tasks
+ OwnerPointer<SceneGraph::RenderManager> mRenderManager; ///< Render manager
+ OwnerPointer<SceneGraph::UpdateManager> mUpdateManager; ///< Update manager
+ OwnerPointer<SceneGraph::DiscardQueue> mDiscardQueue; ///< Used to cleanup nodes & resources when no longer in use.
+ OwnerPointer<ShaderFactory> mShaderFactory; ///< Shader resource factory
+ OwnerPointer<NotificationManager> mNotificationManager; ///< Notification manager
+ OwnerPointer<GestureEventProcessor> mGestureEventProcessor; ///< The gesture event processor
+ OwnerPointer<EventProcessor> mEventProcessor; ///< The event processor
+ Dali::Vector<Integration::Processor*> mProcessors; ///< Registered processors (not owned)
+
friend class ThreadLocalStorage;
};
} // namespace Dali
-#endif // __DALI_INTERNAL_CORE_H__
+#endif // DALI_INTERNAL_CORE_H