} // unnamed namespace
NativeRenderSurfaceEcoreWl::NativeRenderSurfaceEcoreWl( SurfaceSize surfaceSize, Any surface, bool isTransparent )
-: mSurfaceSize( surfaceSize ),
- mRenderNotification( NULL ),
+: 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 ),
mDrawableCompleted( false ),
mTbmQueue( NULL ),
if( surface.Empty() )
{
+ mSurfaceSize = surfaceSize;
+ mColorDepth = isTransparent ? COLOR_DEPTH_32 : COLOR_DEPTH_24;
+ mTbmFormat = isTransparent ? TBM_FORMAT_ARGB8888 : TBM_FORMAT_RGB888;
CreateNativeRenderable();
}
else
{
- // check we have a valid type
- DALI_ASSERT_ALWAYS( ( surface.GetType() == typeid (tbm_surface_queue_h) ) && "Surface type is invalid" );
mTbmQueue = AnyCast< tbm_surface_queue_h >( surface );
+
+ uint16_t width = static_cast<uint16_t>( tbm_surface_queue_get_width( mTbmQueue ) );
+ uint16_t height = static_cast<uint16_t>( tbm_surface_queue_get_height( mTbmQueue ) );
+ mSurfaceSize = SurfaceSize( width, height );
+
+ mTbmFormat = tbm_surface_queue_get_format( mTbmQueue );
+
+ mColorDepth = ( mTbmFormat == TBM_FORMAT_ARGB8888 ) ? COLOR_DEPTH_32 : COLOR_DEPTH_24;
}
}
mDrawableCompleted = false;
}
+Any NativeRenderSurfaceEcoreWl::GetNativeRenderable()
+{
+ return mTbmQueue;
+}
+
PositionSize NativeRenderSurfaceEcoreWl::GetPositionSize() const
{
return PositionSize( 0, 0, static_cast<int>( mSurfaceSize.GetWidth() ), static_cast<int>( mSurfaceSize.GetHeight() ) );
bool NativeRenderSurfaceEcoreWl::PreRender( bool resizingSurface, const std::vector<Rect<int>>& damagedRects, Rect<int>& clippingRect )
{
- MakeContextCurrent();
-
- auto eglGraphics = static_cast<Internal::Adaptor::EglGraphics*>(mGraphics);
- if (eglGraphics)
- {
- Internal::Adaptor::EglImplementation& eglImpl = eglGraphics->GetEglImplementation();
- if (resizingSurface)
- {
- eglImpl.SetFullSwapNextFrame();
- }
-
- eglImpl.SetDamage(mEGLSurface, damagedRects, clippingRect);
- }
-
+ //TODO: Need to support partial update
return true;
}
eglImpl.SwapBuffers( mEGLSurface, damagedRects );
}
+ //TODO: Move calling tbm_surface_queue_acruie to OffscreenWindow and Scene in EvasPlugin
if ( mOwnSurface )
{
if( mThreadSynchronization )
mRenderNotification->Trigger();
}
}
-
}
void NativeRenderSurfaceEcoreWl::StopRender()
return mGraphics ? mGraphics->GetStencilBufferRequired() : Integration::StencilBufferAvailable::FALSE;
}
-Any NativeRenderSurfaceEcoreWl::GetNativeHandle()
-{
- return mTbmQueue;
-}
-
void NativeRenderSurfaceEcoreWl::ReleaseLock()
{
if( mThreadSynchronization )