#include <dali/internal/render/renderers/render-renderer.h>
#include <dali/internal/render/shaders/scene-graph-shader.h>
#include <dali/internal/update/render-tasks/scene-graph-camera.h>
+#include <dali/internal/update/common/scene-graph-scene.h>
namespace Dali
{
mNodeQueue(),
mShaderQueue(),
mRendererQueue(),
- mCameraQueue()
+ mCameraQueue(),
+ mSceneQueue()
{
}
mCameraQueue[ updateBufferIndex ].PushBack( camera );
}
+void DiscardQueue::Add( BufferIndex updateBufferIndex, Scene* scene )
+{
+ DALI_ASSERT_DEBUG( NULL != scene );
+
+ mSceneQueue[ updateBufferIndex ].PushBack( scene );
+}
+
void DiscardQueue::Clear( BufferIndex updateBufferIndex )
{
// Destroy some discarded objects; these should no longer own any GL resources
mShaderQueue[ updateBufferIndex ].Clear();
mRendererQueue[ updateBufferIndex ].Clear();
mCameraQueue[ updateBufferIndex ].Clear();
+ mSceneQueue[ updateBufferIndex ].Clear();
}
} // namespace SceneGraph
class RenderQueue;
class Shader;
class Camera;
+class Scene;
/**
typedef OwnerContainer< Shader* > ShaderQueue;
typedef OwnerContainer< Renderer* > RendererQueue;
typedef OwnerContainer< Camera* > CameraQueue;
+ typedef OwnerContainer< Scene* > SceneQueue;
/**
* Create a new DiscardQueue.
void Add( BufferIndex updateBufferIndex, Camera* camera );
/**
+ * Adds an unwanted Scene to the discard queue.
+ * A message will be sent to clean up GL resources in the next Render.
+ * @param[in] updateBufferIndex The current update buffer index.
+ * @param[in] scene The discarded scene; DiscardQueue takes ownership.
+ */
+ void Add( BufferIndex updateBufferIndex, Scene* scene );
+
+ /**
* Release the nodes which were queued in the frame N-2.
* @pre This method should be called (once) at the beginning of every Update.
* @param[in] updateBufferIndex The current update buffer index.
ShaderQueue mShaderQueue[2];
RendererQueue mRendererQueue[2];
CameraQueue mCameraQueue[2];
+ SceneQueue mSceneQueue[2];
};
} // namespace SceneGraph
{
if ( sceneInfo && sceneInfo->scene && sceneInfo->scene.Get() == scene )
{
- sceneInfo->scene.Reset();
+ mImpl->discardQueue.Add( mSceneGraphBuffers.GetUpdateBufferIndex(), sceneInfo->scene.Release() ); // take the address of the reference to a pointer
break;
}
}