X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fadaptor%2Fcommon%2Fcombined-update-render-controller.cpp;h=5ae0eccd721867a9ce2b7f3fa81ab0ff7de5ab11;hb=c1bb1606717a5a831a0e7bdaca8b4eb86dc5a89e;hp=60ce74ce9b98c87a537ebd15fa7fee4d30d4c70d;hpb=37d8d7dca35290d61aeb300f8f97bb993998d4e4;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/dali/internal/adaptor/common/combined-update-render-controller.cpp b/dali/internal/adaptor/common/combined-update-render-controller.cpp old mode 100644 new mode 100755 index 60ce74c..5ae0ecc --- a/dali/internal/adaptor/common/combined-update-render-controller.cpp +++ b/dali/internal/adaptor/common/combined-update-render-controller.cpp @@ -28,7 +28,9 @@ #include #include #include +#if defined(__GNUC__) #include +#endif namespace Dali { @@ -87,7 +89,6 @@ const unsigned int MAXIMUM_UPDATE_REQUESTS = 2; CombinedUpdateRenderController::CombinedUpdateRenderController( AdaptorInternalServices& adaptorInterfaces, const EnvironmentOptions& environmentOptions ) : mFpsTracker( environmentOptions ), mUpdateStatusLogger( environmentOptions ), - mRenderHelper( adaptorInterfaces ), mEventThreadSemaphore(), mUpdateRenderThreadWaitCondition(), mAdaptorInterfaces( adaptorInterfaces ), @@ -154,7 +155,7 @@ void CombinedUpdateRenderController::Initialize() int error = pthread_create( mUpdateRenderThread, NULL, InternalUpdateRenderThreadEntryFunc, this ); DALI_ASSERT_ALWAYS( !error && "Return code from pthread_create() when creating UpdateRenderThread" ); - // The Update/Render thread will now run and initialise EGL etc. and will then wait for Start to be called + // The Update/Render thread will now run and initialise the graphics interface etc. and will then wait for Start to be called // When this function returns, the application initialisation on the event thread should occur } @@ -170,7 +171,11 @@ void CombinedUpdateRenderController::Start() sem_wait( &mEventThreadSemaphore ); } - mRenderHelper.Start(); + RenderSurface* currentSurface = mAdaptorInterfaces.GetRenderSurfaceInterface(); + if( currentSurface ) + { + currentSurface->StartRender(); + } mRunning = TRUE; @@ -212,7 +217,11 @@ void CombinedUpdateRenderController::Stop() LOG_EVENT_TRACE; // Stop Rendering and the Update/Render Thread - mRenderHelper.Stop(); + RenderSurface* currentSurface = mAdaptorInterfaces.GetRenderSurfaceInterface(); + if( currentSurface ) + { + currentSurface->StopRender(); + } StopUpdateRenderThread(); @@ -390,7 +399,9 @@ void CombinedUpdateRenderController::ProcessSleepRequest() void CombinedUpdateRenderController::UpdateRenderThread() { +#if defined(__GNUC__) SetThreadName("RenderThread\0"); +#endif // Install a function for logging mEnvironmentOptions.InstallLogFunction(); @@ -400,9 +411,13 @@ void CombinedUpdateRenderController::UpdateRenderThread() LOG_UPDATE_RENDER( "THREAD CREATED" ); - mRenderHelper.InitializeEgl(); + RenderSurface* currentSurface = mAdaptorInterfaces.GetRenderSurfaceInterface(); + if( currentSurface ) + { + currentSurface->InitializeGraphics( mAdaptorInterfaces.GetGraphicsInterface(), mAdaptorInterfaces.GetDisplayConnectionInterface() ); + } - // tell core it has a context + // Tell core it has a context mCore.ContextCreated(); NotifyThreadInitialised(); @@ -451,7 +466,15 @@ void CombinedUpdateRenderController::UpdateRenderThread() if( DALI_UNLIKELY( newSurface ) ) { LOG_UPDATE_RENDER_TRACE_FMT( "Replacing Surface" ); - mRenderHelper.ReplaceSurface( newSurface ); + + // This is designed for replacing pixmap surfaces, but should work for window as well + // we need to delete the surface and renderable (pixmap / window) + // Then create a new pixmap/window and new surface + // If the new surface has a different display connection, then the context will be lost + + mAdaptorInterfaces.GetDisplayConnectionInterface().Initialize(); + newSurface->InitializeGraphics( mAdaptorInterfaces.GetGraphicsInterface(), mAdaptorInterfaces.GetDisplayConnectionInterface() ); + newSurface->ReplaceGraphicsSurface(); SurfaceReplaced(); } @@ -497,15 +520,15 @@ void CombinedUpdateRenderController::UpdateRenderThread() } // Check resize - bool surfaceResized = ShouldSurfaceBeResized(); - if( DALI_UNLIKELY( surfaceResized ) ) + bool surfaceResized = false; + bool shouldSurfaceBeResized = ShouldSurfaceBeResized(); + if( DALI_UNLIKELY( shouldSurfaceBeResized ) ) { - // RenderHelper::ResizeSurface() should be called right after a viewport is changed. if( updateStatus.SurfaceRectChanged() ) { LOG_UPDATE_RENDER_TRACE_FMT( "Resizing Surface" ); - mRenderHelper.ResizeSurface(); SurfaceResized(); + surfaceResized = true; } } @@ -516,7 +539,8 @@ void CombinedUpdateRenderController::UpdateRenderThread() // RENDER ////////////////////////////// - mRenderHelper.ConsumeEvents(); + mAdaptorInterfaces.GetDisplayConnectionInterface().ConsumeEvents(); + if( mPreRenderCallback != NULL ) { bool keepCallback = CallbackBase::ExecuteReturn(*mPreRenderCallback); @@ -526,7 +550,12 @@ void CombinedUpdateRenderController::UpdateRenderThread() mPreRenderCallback = NULL; } } - mRenderHelper.PreRender(); + + currentSurface = mAdaptorInterfaces.GetRenderSurfaceInterface(); + if( currentSurface ) + { + currentSurface->PreRender( surfaceResized ); + } Integration::RenderStatus renderStatus; @@ -538,12 +567,14 @@ void CombinedUpdateRenderController::UpdateRenderThread() if( renderStatus.NeedsPostRender() ) { - mRenderHelper.PostRender( isRenderingToFbo ); + if( currentSurface ) + { + currentSurface->PostRender( isRenderingToFbo, ( mNewSurface != NULL ), surfaceResized ); + } } // Trigger event thread to request Update/Render thread to sleep if update not required - if( ( Integration::KeepUpdating::NOT_REQUESTED == keepUpdatingStatus ) && - ! renderStatus.NeedsUpdate() ) + if( ( Integration::KeepUpdating::NOT_REQUESTED == keepUpdatingStatus ) && !renderStatus.NeedsUpdate() ) { mSleepTrigger->Trigger(); updateRequired = false; @@ -600,7 +631,12 @@ void CombinedUpdateRenderController::UpdateRenderThread() // Inform core of context destruction & shutdown EGL mCore.ContextDestroyed(); - mRenderHelper.ShutdownEgl(); + currentSurface = mAdaptorInterfaces.GetRenderSurfaceInterface(); + if( currentSurface ) + { + currentSurface->DestroySurface(); + currentSurface = nullptr; + } LOG_UPDATE_RENDER( "THREAD DESTROYED" );