#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>
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 )
{
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();
if( tls )
{
tls->Remove();
- delete tls;
+ tls->Unreference();
}
mObjectRegistry.Reset();
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
// 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()
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 );
}
}
return *(mAnimationPlaylist);
}
+Integration::GlAbstraction& Core::GetGlAbstraction() const
+{
+ return mGlAbstraction;
+}
+
void Core::AddScene( Scene* scene )
{
mScenes.push_back( scene );
{
// 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 )