X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fwindow-system%2Ftizen-wayland%2Fnative-render-surface-ecore-wl.cpp;h=dd35dcb364ffc19aa4d8ecfba975786bdcf0cf57;hb=7eede4a8ab5b8d36f03e7d970cca3c01a08eb2d7;hp=66364cc04bbbd406744caedc4b995a5e0a4d90ba;hpb=803e8299a9916479bc4cc60f2e4763d5bea6739a;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/dali/internal/window-system/tizen-wayland/native-render-surface-ecore-wl.cpp b/dali/internal/window-system/tizen-wayland/native-render-surface-ecore-wl.cpp index 66364cc..dd35dcb 100644 --- a/dali/internal/window-system/tizen-wayland/native-render-surface-ecore-wl.cpp +++ b/dali/internal/window-system/tizen-wayland/native-render-surface-ecore-wl.cpp @@ -33,11 +33,13 @@ // INTERNAL INCLUDES #include -#include -#include +#include +#include #include #include #include +#include +#include namespace Dali { @@ -54,6 +56,10 @@ Debug::Filter* gNativeSurfaceLogFilter = Debug::Filter::New(Debug::Verbose, fals NativeRenderSurfaceEcoreWl::NativeRenderSurfaceEcoreWl( Dali::PositionSize positionSize, bool isTransparent ) : mPosition( positionSize ), mRenderNotification( NULL ), + mGraphics( NULL ), + mEGL( nullptr ), + mEGLSurface( nullptr ), + mEGLContext( nullptr ), mColorDepth( isTransparent ? COLOR_DEPTH_32 : COLOR_DEPTH_24 ), mTbmFormat( isTransparent ? TBM_FORMAT_ARGB8888 : TBM_FORMAT_RGB888 ), mOwnSurface( false ), @@ -131,31 +137,25 @@ void NativeRenderSurfaceEcoreWl::GetDpi( unsigned int& dpiHorizontal, unsigned i dpiVertical = int( yres + 0.5f ); } -void NativeRenderSurfaceEcoreWl::InitializeGraphics( Internal::Adaptor::GraphicsInterface& graphics, DisplayConnection& displayConnection ) +void NativeRenderSurfaceEcoreWl::InitializeGraphics() { DALI_LOG_TRACE_METHOD( gNativeSurfaceLogFilter ); unsetenv( "EGL_PLATFORM" ); - mGraphics = &graphics; - + mGraphics = &mAdaptor->GetGraphicsInterface(); auto eglGraphics = static_cast(mGraphics); - EglInterface* mEGL = eglGraphics->Create(); - - // Initialize EGL & OpenGL - displayConnection.Initialize(); - - Internal::Adaptor::EglImplementation& eglImpl = static_cast(*mEGL); - eglImpl.ChooseConfig(true, mColorDepth); - - // Create the OpenGL context - mEGL->CreateContext(); + mEGL = &eglGraphics->GetEglInterface(); - // Create the OpenGL surface - CreateSurface(); + if ( mEGLContext == NULL ) + { + // Create the OpenGL context for this window + Internal::Adaptor::EglImplementation& eglImpl = static_cast(*mEGL); + eglImpl.CreateWindowContext( mEGLContext ); - // Make it current - mEGL->MakeContextCurrent(); + // Create the OpenGL surface + CreateSurface(); + } } void NativeRenderSurfaceEcoreWl::CreateSurface() @@ -165,7 +165,7 @@ void NativeRenderSurfaceEcoreWl::CreateSurface() auto eglGraphics = static_cast(mGraphics); Internal::Adaptor::EglImplementation& eglImpl = eglGraphics->GetEglImplementation(); - eglImpl.CreateSurfaceWindow( reinterpret_cast< EGLNativeWindowType >( mTbmQueue ), mColorDepth ); + mEGLSurface = eglImpl.CreateSurfaceWindow( reinterpret_cast< EGLNativeWindowType >( mTbmQueue ), mColorDepth ); } void NativeRenderSurfaceEcoreWl::DestroySurface() @@ -175,7 +175,7 @@ void NativeRenderSurfaceEcoreWl::DestroySurface() auto eglGraphics = static_cast(mGraphics); Internal::Adaptor::EglImplementation& eglImpl = eglGraphics->GetEglImplementation(); - eglImpl.DestroySurface(); + eglImpl.DestroySurface( mEGLSurface ); } bool NativeRenderSurfaceEcoreWl::ReplaceGraphicsSurface() @@ -190,15 +190,21 @@ bool NativeRenderSurfaceEcoreWl::ReplaceGraphicsSurface() auto eglGraphics = static_cast(mGraphics); Internal::Adaptor::EglImplementation& eglImpl = eglGraphics->GetEglImplementation(); - return eglImpl.ReplaceSurfaceWindow( reinterpret_cast< EGLNativeWindowType >( mTbmQueue ) ); + return eglImpl.ReplaceSurfaceWindow( reinterpret_cast< EGLNativeWindowType >( mTbmQueue ), mEGLSurface, mEGLContext ); } void NativeRenderSurfaceEcoreWl::MoveResize( Dali::PositionSize positionSize ) { -} + tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE; -void NativeRenderSurfaceEcoreWl::SetViewMode( ViewMode viewMode ) -{ + error = tbm_surface_queue_reset( mTbmQueue, positionSize.width, positionSize.height, mTbmFormat ); + + if( error != TBM_SURFACE_QUEUE_ERROR_NONE ) + { + DALI_LOG_ERROR( "Failed to resize tbm_surface_queue" ); + } + + mPosition = positionSize; } void NativeRenderSurfaceEcoreWl::StartRender() @@ -214,9 +220,12 @@ bool NativeRenderSurfaceEcoreWl::PreRender( bool ) void NativeRenderSurfaceEcoreWl::PostRender( bool renderToFbo, bool replacingSurface, bool resizingSurface ) { auto eglGraphics = static_cast(mGraphics); - Internal::Adaptor::EglImplementation& eglImpl = eglGraphics->GetEglImplementation(); + if ( eglGraphics ) + { + Internal::Adaptor::EglImplementation& eglImpl = eglGraphics->GetEglImplementation(); - eglImpl.SwapBuffers(); + eglImpl.SwapBuffers( mEGLSurface ); + } if( mThreadSynchronization ) { @@ -269,9 +278,27 @@ void NativeRenderSurfaceEcoreWl::SetThreadSynchronization( ThreadSynchronization mThreadSynchronization = &threadSynchronization; } -RenderSurface::Type NativeRenderSurfaceEcoreWl::GetSurfaceType() +Integration::RenderSurface::Type NativeRenderSurfaceEcoreWl::GetSurfaceType() +{ + return Integration::RenderSurface::NATIVE_RENDER_SURFACE; +} + +void NativeRenderSurfaceEcoreWl::MakeContextCurrent() +{ + if ( mEGL != nullptr ) + { + mEGL->MakeContextCurrent( mEGLSurface, mEGLContext ); + } +} + +Integration::DepthBufferAvailable NativeRenderSurfaceEcoreWl::GetDepthBufferRequired() +{ + return mGraphics ? mGraphics->GetDepthBufferRequired() : Integration::DepthBufferAvailable::FALSE; +} + +Integration::StencilBufferAvailable NativeRenderSurfaceEcoreWl::GetStencilBufferRequired() { - return RenderSurface::NATIVE_RENDER_SURFACE; + return mGraphics ? mGraphics->GetStencilBufferRequired() : Integration::StencilBufferAvailable::FALSE; } void NativeRenderSurfaceEcoreWl::ReleaseLock()