Merge "use modern construct 'nullptr' instead of 'NULL' or '0'" into devel/master
[platform/core/uifw/dali-core.git] / dali / internal / update / common / scene-graph-scene.cpp
index 0540516..9b7ddcc 100644 (file)
@@ -17,7 +17,9 @@
 // CLASS HEADER
 #include <dali/internal/update/common/scene-graph-scene.h>
 
+// INTERNAL INCLUDES
 #include <dali/internal/update/render-tasks/scene-graph-render-task-list.h>
+#include <dali/internal/render/gl-resources/context.h>
 
 namespace Dali
 {
@@ -27,42 +29,21 @@ namespace SceneGraph
 {
 
 Scene::Scene()
-: mContext( nullptr )
+: mContext( nullptr ),
+  mFrameRenderedCallbacks(),
+  mFramePresentedCallbacks()
 {
 }
 
 Scene::~Scene()
 {
-  if ( mContext )
-  {
-    mContext->GlContextDestroyed();
-
-    delete mContext;
-    mContext = nullptr;
-  }
-}
-
-void Scene::GlContextDestroyed()
-{
-  if ( mContext )
-  {
-    mContext->GlContextDestroyed();
-  }
+  mFrameRenderedCallbacks.clear();
+  mFramePresentedCallbacks.clear();
 }
 
 void Scene::Initialize( Context& context )
 {
-  if ( mContext != &context )
-  {
-    if ( mContext )
-    {
-      mContext->GlContextDestroyed();
-      delete mContext;
-    }
-
-    mContext = &context;
-    mContext->GlContextCreated();
-  }
+  mContext = &context;
 }
 
 Context* Scene::GetContext()
@@ -75,6 +56,38 @@ RenderInstructionContainer& Scene::GetRenderInstructions()
   return mInstructions;
 }
 
+void Scene::AddFrameRenderedCallback( CallbackBase* callback, int32_t frameId )
+{
+  mFrameRenderedCallbacks.push_back( std::make_pair( std::unique_ptr< CallbackBase >( callback ), frameId ) );
+}
+
+void Scene::AddFramePresentedCallback( CallbackBase* callback, int32_t frameId )
+{
+  mFramePresentedCallbacks.push_back( std::make_pair( std::unique_ptr< CallbackBase >( callback ), frameId ) );
+}
+
+void Scene::GetFrameRenderedCallback( Dali::Integration::Scene::FrameCallbackContainer& callbacks )
+{
+  // Transfer owership of the callbacks
+  for( auto&& iter : mFrameRenderedCallbacks )
+  {
+    callbacks.push_back( std::make_pair( std::move( iter.first ), iter.second ) );
+  }
+
+  mFrameRenderedCallbacks.clear();
+}
+
+void Scene::GetFramePresentedCallback( Dali::Integration::Scene::FrameCallbackContainer& callbacks )
+{
+  // Transfer owership of the callbacks
+  for( auto&& iter : mFramePresentedCallbacks )
+  {
+    callbacks.push_back( std::make_pair( std::move( iter.first ), iter.second ) );
+  }
+
+  mFramePresentedCallbacks.clear();
+}
+
 } //SceneGraph
 
 } //Internal