X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fcommon%2Fcore-impl.cpp;h=7637a27ac40f4a268c4533fabe546748308880c9;hb=145a9d83ce4debdb5876fa65a246eb65a46a4c01;hp=e37d59a653eb92bcf30a041c612abc5a1bcba843;hpb=5bff9714dde9f2b394443337c65e673dcb4a031d;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/common/core-impl.cpp b/dali/internal/common/core-impl.cpp index e37d59a..7637a27 100644 --- a/dali/internal/common/core-impl.cpp +++ b/dali/internal/common/core-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2017 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -78,12 +78,17 @@ using Integration::Event; using Integration::UpdateStatus; using Integration::RenderStatus; -Core::Core( RenderController& renderController, PlatformAbstraction& platform, - GlAbstraction& glAbstraction, GlSyncAbstraction& glSyncAbstraction, - GestureManager& gestureManager, ResourcePolicy::DataRetention dataRetentionPolicy) +Core::Core( RenderController& renderController, + PlatformAbstraction& platform, + GlAbstraction& glAbstraction, + GlSyncAbstraction& glSyncAbstraction, + GestureManager& gestureManager, + ResourcePolicy::DataRetention dataRetentionPolicy, + Integration::RenderToFrameBuffer renderToFboEnabled, + Integration::DepthBufferAvailable depthBufferAvailable, + Integration::StencilBufferAvailable stencilBufferAvailable ) : mRenderController( renderController ), mPlatform(platform), - mIsActive(true), mProcessingEvent(false) { // Create the thread local storage @@ -100,7 +105,7 @@ Core::Core( RenderController& renderController, PlatformAbstraction& platform, mRenderTaskProcessor = new SceneGraph::RenderTaskProcessor(); - mRenderManager = RenderManager::New( glAbstraction, glSyncAbstraction ); + mRenderManager = RenderManager::New( glAbstraction, glSyncAbstraction, depthBufferAvailable, stencilBufferAvailable ); RenderQueue& renderQueue = mRenderManager->GetRenderQueue(); @@ -117,15 +122,15 @@ Core::Core( RenderController& renderController, PlatformAbstraction& platform, mRenderManager->SetShaderSaver( *mUpdateManager ); - mStage = IntrusivePtr( Stage::New( *mAnimationPlaylist, *mPropertyNotificationManager, *mUpdateManager, *mNotificationManager ) ); + mStage = IntrusivePtr( Stage::New( *mAnimationPlaylist, *mPropertyNotificationManager, *mUpdateManager, *mNotificationManager, mRenderController ) ); // This must be called after stage is created but before stage initialization mRelayoutController = IntrusivePtr< RelayoutController >( new RelayoutController( mRenderController ) ); - mStage->Initialize(); + mStage->Initialize( renderToFboEnabled == Integration::RenderToFrameBuffer::TRUE ); - mGestureEventProcessor = new GestureEventProcessor(*mStage, gestureManager, mRenderController); - mEventProcessor = new EventProcessor(*mStage, *mNotificationManager, *mGestureEventProcessor); + mGestureEventProcessor = new GestureEventProcessor( *mStage, *mUpdateManager, gestureManager, mRenderController ); + mEventProcessor = new EventProcessor( *mStage, *mNotificationManager, *mGestureEventProcessor ); mShaderFactory = new ShaderFactory(); mUpdateManager->SetShaderSaver( *mShaderFactory ); @@ -205,7 +210,7 @@ void Core::SetDpi( unsigned int dpiHorizontal, unsigned int dpiVertical ) mStage->SetDpi( Vector2( dpiHorizontal , dpiVertical) ); } -void Core::Update( float elapsedSeconds, unsigned int lastVSyncTimeMilliseconds, unsigned int nextVSyncTimeMilliseconds, Integration::UpdateStatus& status ) +void Core::Update( float elapsedSeconds, unsigned int lastVSyncTimeMilliseconds, unsigned int 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 // it is cached by frametime @@ -215,7 +220,9 @@ void Core::Update( float elapsedSeconds, unsigned int lastVSyncTimeMilliseconds, // Use the estimated time diff till we render as the elapsed time. status.keepUpdating = mUpdateManager->Update( elapsedSeconds, lastVSyncTimeMilliseconds, - nextVSyncTimeMilliseconds ); + nextVSyncTimeMilliseconds, + renderToFboEnabled, + isRenderingToFbo ); // Check the Notification Manager message queue to set needsNotification status.needsNotification = mNotificationManager->MessagesToProcess(); @@ -226,22 +233,7 @@ void Core::Update( float elapsedSeconds, unsigned int lastVSyncTimeMilliseconds, void Core::Render( RenderStatus& status ) { - bool updateRequired = mRenderManager->Render( status ); - - status.SetNeedsUpdate( updateRequired ); -} - -void Core::Suspend() -{ - mIsActive = false; -} - -void Core::Resume() -{ - mIsActive = true; - - // trigger processing of events queued up while paused - ProcessEvents(); + mRenderManager->Render( status ); } void Core::SceneCreated() @@ -262,7 +254,7 @@ void Core::ProcessEvents() if( mProcessingEvent ) { DALI_LOG_ERROR( "ProcessEvents should not be called from within ProcessEvents!\n" ); - mRenderController.RequestProcessEventsOnIdle(); + mRenderController.RequestProcessEventsOnIdle( false ); return; } @@ -276,29 +268,27 @@ void Core::ProcessEvents() mNotificationManager->ProcessMessages(); - // Avoid allocating MessageBuffers, triggering size-negotiation or sending any other spam whilst paused - if( mIsActive ) - { - // Emit signal here to inform listeners that event processing has finished. - mStage->EmitEventProcessingFinishedSignal(); + // Emit signal here to inform listeners that event processing has finished. + mStage->EmitEventProcessingFinishedSignal(); - // Run the size negotiation after event processing finished signal - mRelayoutController->Relayout(); + // Run the size negotiation after event processing finished signal + mRelayoutController->Relayout(); - // Rebuild depth tree after event processing has finished - mStage->RebuildDepthTree(); + // Rebuild depth tree after event processing has finished + mStage->RebuildDepthTree(); - // Flush any queued messages for the update-thread - const bool messagesToProcess = mUpdateManager->FlushQueue(); + // Flush any queued messages for the update-thread + const bool messagesToProcess = mUpdateManager->FlushQueue(); - // Check if the touch or gestures require updates. - const bool gestureNeedsUpdate = mGestureEventProcessor->NeedsUpdate(); + // Check if the touch or gestures require updates. + const bool gestureNeedsUpdate = mGestureEventProcessor->NeedsUpdate(); + // Check if the next update is forced. + const bool forceUpdate = mStage->IsNextUpdateForced(); - if( messagesToProcess || gestureNeedsUpdate ) - { - // tell the render controller to keep update thread running - mRenderController.RequestUpdate(); - } + if( messagesToProcess || gestureNeedsUpdate || forceUpdate ) + { + // tell the render controller to keep update thread running + mRenderController.RequestUpdate( forceUpdate ); } mRelayoutController->SetProcessingCoreEvents( false );