X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Frender%2Fcommon%2Frender-item.cpp;h=e5620366c9a16f4da7b17ce3f4d652b741873c4b;hb=b43741a90b40ca9dfbd33d6a9d390d3c09230e89;hp=ffbddf0866222e6289ae8da892d7abd97444523b;hpb=0c1e9813ae1096bb8f31b8c8cd1d048180e39875;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/render/common/render-item.cpp b/dali/internal/render/common/render-item.cpp old mode 100644 new mode 100755 index ffbddf0..e562036 --- a/dali/internal/render/common/render-item.cpp +++ b/dali/internal/render/common/render-item.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2018 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. @@ -46,10 +46,13 @@ RenderItem::RenderItem() : mModelMatrix( false ), mModelViewMatrix( false ), mSize(), + mUpdateSizeHint(), mRenderer( NULL ), mNode( NULL ), + mTextureSet( NULL ), mDepthIndex( 0 ), - mIsOpaque( true ) + mIsOpaque( true ), + mPartialUpdateEnabled( false ) { } @@ -58,11 +61,22 @@ RenderItem::~RenderItem() } -ClippingBox RenderItem::CalculateViewportSpaceAABB( const int viewportWidth, const int viewportHeight ) const +ClippingBox RenderItem::CalculateViewportSpaceAABB( const int viewportWidth, const int viewportHeight, const bool useUpdateSizeHint ) const { // Calculate extent vector of the AABB: - const float halfActorX = mSize.x * 0.5f; - const float halfActorY = mSize.y * 0.5f; + float halfActorX; + float halfActorY; + if( useUpdateSizeHint ) + { + halfActorX = mUpdateSizeHint.x * 0.5f; + halfActorY = mUpdateSizeHint.y * 0.5f; + } + else + { + halfActorX = mSize.x * 0.5f; + halfActorY = mSize.y * 0.5f; + } + // To transform the actor bounds to screen-space, We do a fast, 2D version of a matrix multiply optimized for 2D quads. // This reduces float multiplications from 64 (16 * 4) to 12 (4 * 3). @@ -100,13 +114,19 @@ ClippingBox RenderItem::CalculateViewportSpaceAABB( const int viewportWidth, con // So without doing min/max branching, we can fetch the min/max values of all the remaining X/Y coords from this one index. Vector4 aabb( corners[smallestX].x, corners[( smallestX + 3u ) % 4].y, corners[( smallestX + 2u ) % 4].x, corners[( smallestX + 1u ) % 4].y ); - // Convert maximums to extents. - aabb.z -= aabb.x; - aabb.w -= aabb.y; - // Return the AABB in screen-space pixels (x, y, width, height). // Note: This is a algebraic simplification of: ( viewport.x - aabb.width ) / 2 - ( ( aabb.width / 2 ) + aabb.x ) per axis. - return ClippingBox( ( viewportWidth / 2 ) - aabb.z - aabb.x, ( viewportHeight / 2 ) - aabb.w - aabb.y, aabb.z, aabb.w ); + Vector4 aabbInScreen( static_cast( viewportWidth ) * 0.5f - aabb.z, + static_cast( viewportHeight ) * 0.5f - aabb.w, + static_cast( viewportWidth ) * 0.5f - aabb.x, + static_cast( viewportHeight ) * 0.5f - aabb.y ); + + int x = static_cast< int >( roundf( aabbInScreen.x ) ); + int y = static_cast< int >( roundf( aabbInScreen.y ) ); + int z = static_cast< int >( roundf( aabbInScreen.z ) ); + int w = static_cast< int >( roundf( aabbInScreen.w ) ); + + return ClippingBox( x, y, z - x, w - y ); } void RenderItem::operator delete( void* ptr )