Merge "Clean up the code to build successfully on macOS" into devel/master
[platform/core/uifw/dali-core.git] / dali / internal / common / core-impl.cpp
index ac0c500..cffc170 100644 (file)
@@ -27,7 +27,6 @@
 #include <dali/integration-api/platform-abstraction.h>
 #include <dali/integration-api/processor-interface.h>
 #include <dali/integration-api/render-controller.h>
-#include <dali/integration-api/render-surface.h>
 
 #include <dali/internal/event/actors/actor-impl.h>
 #include <dali/internal/event/animation/animation-playlist.h>
@@ -88,9 +87,11 @@ Core::Core( RenderController& renderController,
             GlContextHelperAbstraction& glContextHelperAbstraction,
             Integration::RenderToFrameBuffer renderToFboEnabled,
             Integration::DepthBufferAvailable depthBufferAvailable,
-            Integration::StencilBufferAvailable stencilBufferAvailable )
+            Integration::StencilBufferAvailable stencilBufferAvailable,
+            Integration::PartialUpdateAvailable partialUpdateAvailable )
 : mRenderController( renderController ),
   mPlatform(platform),
+  mGlAbstraction(glAbstraction),
   mProcessingEvent(false),
   mForceNextUpdate( false )
 {
@@ -108,7 +109,7 @@ Core::Core( RenderController& renderController,
 
   mRenderTaskProcessor = new SceneGraph::RenderTaskProcessor();
 
-  mRenderManager = RenderManager::New( glAbstraction, glSyncAbstraction, glContextHelperAbstraction, depthBufferAvailable, stencilBufferAvailable );
+  mRenderManager = RenderManager::New( glAbstraction, glSyncAbstraction, glContextHelperAbstraction, depthBufferAvailable, stencilBufferAvailable, partialUpdateAvailable );
 
   RenderQueue& renderQueue = mRenderManager->GetRenderQueue();
 
@@ -153,7 +154,7 @@ Core::~Core()
   if( tls )
   {
     tls->Remove();
-    delete tls;
+    tls->Unreference();
   }
 
   mObjectRegistry.Reset();
@@ -193,18 +194,6 @@ void Core::ContextDestroyed()
   mRenderManager->ContextDestroyed();
 }
 
-void Core::SurfaceDeleted( Integration::RenderSurface* surface )
-{
-  for( auto scene : mScenes )
-  {
-    if( scene->GetSurface() == surface )
-    {
-      scene->SurfaceDeleted();
-      break;
-    }
-  }
-}
-
 void Core::Update( float elapsedSeconds, uint32_t lastVSyncTimeMilliseconds, uint32_t nextVSyncTimeMilliseconds, Integration::UpdateStatus& status, bool renderToFboEnabled, bool isRenderingToFbo )
 {
   // set the time delta so adaptor can easily print FPS with a release build with 0 as
@@ -229,9 +218,29 @@ void Core::Update( float elapsedSeconds, uint32_t lastVSyncTimeMilliseconds, uin
   // Any message to update will wake it up anyways
 }
 
-void Core::Render( RenderStatus& status, bool forceClear, bool uploadOnly )
+void Core::PreRender( RenderStatus& status, bool forceClear, bool uploadOnly )
+{
+  mRenderManager->PreRender( status, forceClear, uploadOnly );
+}
+
+void Core::PreRender( Integration::Scene& scene, std::vector<Rect<int>>& damagedRects )
+{
+  mRenderManager->PreRender( scene, damagedRects );
+}
+
+void Core::RenderScene( RenderStatus& status, Integration::Scene& scene, bool renderToFbo )
+{
+  mRenderManager->RenderScene( status, scene, renderToFbo );
+}
+
+void Core::RenderScene( RenderStatus& status, Integration::Scene& scene, bool renderToFbo, Rect<int>& clippingRect )
 {
-  mRenderManager->Render( status, forceClear, uploadOnly );
+  mRenderManager->RenderScene( status, scene, renderToFbo, clippingRect );
+}
+
+void Core::PostRender( bool uploadOnly )
+{
+  mRenderManager->PostRender( uploadOnly );
 }
 
 void Core::SceneCreated()
@@ -240,9 +249,9 @@ void Core::SceneCreated()
 
   mRelayoutController->OnApplicationSceneCreated();
 
-  for( auto iter = mScenes.begin(); iter != mScenes.end(); ++iter )
+  for( const auto& scene : mScenes )
   {
-    Dali::Actor sceneRootLayer = (*iter)->GetRootLayer();
+    Dali::Actor sceneRootLayer = scene->GetRootLayer();
     mRelayoutController->RequestRelayoutTree( sceneRootLayer );
   }
 }
@@ -414,6 +423,11 @@ AnimationPlaylist& Core::GetAnimationPlaylist() const
   return *(mAnimationPlaylist);
 }
 
+Integration::GlAbstraction& Core::GetGlAbstraction() const
+{
+  return mGlAbstraction;
+}
+
 void Core::AddScene( Scene* scene )
 {
   mScenes.push_back( scene );
@@ -432,7 +446,8 @@ void Core::CreateThreadLocalStorage()
 {
   // a pointer to the ThreadLocalStorage object will be stored in TLS
   // The ThreadLocalStorage object should be deleted by the Core destructor
-  new ThreadLocalStorage(this);
+  ThreadLocalStorage* tls = new ThreadLocalStorage(this);
+  tls->Reference();
 }
 
 void Core::RegisterObject( Dali::BaseObject* object )