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=e69e8f151d23668c246895450ce7455bb8283c27;hb=573600ba751204639c5ee68a528f2b72acf8385c;hp=c3fb051ae5db8f49844572942fa494ccd615e30a;hpb=116fbd0c8799b78ecfe44724bd0ee24b3d8d9340;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 c3fb051..e69e8f1 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * Copyright (c) 2019 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. @@ -22,17 +22,24 @@ #include #include +#ifdef ECORE_WAYLAND2 +#include +#else #include +#endif #include #include // INTERNAL INCLUDES #include -#include +#include +#include #include #include #include +#include +#include namespace Dali { @@ -49,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 ), @@ -65,6 +76,11 @@ NativeRenderSurfaceEcoreWl::NativeRenderSurfaceEcoreWl( Dali::PositionSize posit NativeRenderSurfaceEcoreWl::~NativeRenderSurfaceEcoreWl() { + if ( mEGLSurface ) + { + DestroySurface(); + } + // release the surface if we own one if( mOwnSurface ) { @@ -113,41 +129,66 @@ void NativeRenderSurfaceEcoreWl::GetDpi( unsigned int& dpiHorizontal, unsigned i float xres, yres; // 1 inch = 25.4 millimeters +#ifdef ECORE_WAYLAND2 + // TODO: Application should set dpi value in wayland2 + xres = 96; + yres = 96; +#else xres = ecore_wl_dpi_get(); yres = ecore_wl_dpi_get(); +#endif dpiHorizontal = int( xres + 0.5f ); // rounding dpiVertical = int( yres + 0.5f ); } -void NativeRenderSurfaceEcoreWl::InitializeEgl( EglInterface& egl ) +int NativeRenderSurfaceEcoreWl::GetOrientation() const +{ + return 0; +} + +void NativeRenderSurfaceEcoreWl::InitializeGraphics() { DALI_LOG_TRACE_METHOD( gNativeSurfaceLogFilter ); unsetenv( "EGL_PLATFORM" ); - Internal::Adaptor::EglImplementation& eglImpl = static_cast( egl ); + mGraphics = &mAdaptor->GetGraphicsInterface(); + auto eglGraphics = static_cast(mGraphics); + + mEGL = &eglGraphics->GetEglInterface(); - eglImpl.ChooseConfig( true, mColorDepth ); + if ( mEGLContext == NULL ) + { + // Create the OpenGL context for this window + Internal::Adaptor::EglImplementation& eglImpl = static_cast(*mEGL); + eglImpl.CreateWindowContext( mEGLContext ); + + // Create the OpenGL surface + CreateSurface(); + } } -void NativeRenderSurfaceEcoreWl::CreateEglSurface( EglInterface& egl ) +void NativeRenderSurfaceEcoreWl::CreateSurface() { DALI_LOG_TRACE_METHOD( gNativeSurfaceLogFilter ); - Internal::Adaptor::EglImplementation& eglImpl = static_cast( egl ); + 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::DestroyEglSurface( EglInterface& egl ) +void NativeRenderSurfaceEcoreWl::DestroySurface() { DALI_LOG_TRACE_METHOD( gNativeSurfaceLogFilter ); - Internal::Adaptor::EglImplementation& eglImpl = static_cast( egl ); - eglImpl.DestroySurface(); + auto eglGraphics = static_cast(mGraphics); + Internal::Adaptor::EglImplementation& eglImpl = eglGraphics->GetEglImplementation(); + + eglImpl.DestroySurface( mEGLSurface ); } -bool NativeRenderSurfaceEcoreWl::ReplaceEGLSurface( EglInterface& egl ) +bool NativeRenderSurfaceEcoreWl::ReplaceGraphicsSurface() { DALI_LOG_TRACE_METHOD( gNativeSurfaceLogFilter ); @@ -156,33 +197,45 @@ bool NativeRenderSurfaceEcoreWl::ReplaceEGLSurface( EglInterface& egl ) return false; } - Internal::Adaptor::EglImplementation& eglImpl = static_cast( egl ); + 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() { } -bool NativeRenderSurfaceEcoreWl::PreRender( EglInterface&, Integration::GlAbstraction&, bool ) +bool NativeRenderSurfaceEcoreWl::PreRender( bool ) { // nothing to do for pixmaps return true; } -void NativeRenderSurfaceEcoreWl::PostRender( EglInterface& egl, Integration::GlAbstraction& glAbstraction, DisplayConnection* displayConnection, bool replacingSurface, bool resizingSurface ) +void NativeRenderSurfaceEcoreWl::PostRender( bool renderToFbo, bool replacingSurface, bool resizingSurface ) { - Internal::Adaptor::EglImplementation& eglImpl = static_cast( egl ); - eglImpl.SwapBuffers(); + auto eglGraphics = static_cast(mGraphics); + if ( eglGraphics ) + { + Internal::Adaptor::EglImplementation& eglImpl = eglGraphics->GetEglImplementation(); + + eglImpl.SwapBuffers( mEGLSurface ); + } if( mThreadSynchronization ) { @@ -193,7 +246,7 @@ void NativeRenderSurfaceEcoreWl::PostRender( EglInterface& egl, Integration::GlA { if( tbm_surface_queue_acquire( mTbmQueue, &mConsumeSurface ) != TBM_SURFACE_QUEUE_ERROR_NONE ) { - DALI_LOG_ERROR( "Failed to aquire a tbm_surface\n" ); + DALI_LOG_ERROR( "Failed to acquire a tbm_surface\n" ); return; } } @@ -235,9 +288,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()