// 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
{
{
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()
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