X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Frender%2Fcommon%2Frender-item.cpp;h=5fb838dbafa0d9359db71090343e3a811c378e59;hb=refs%2Fchanges%2F13%2F263213%2F14;hp=c218b25f903bb9a56b375ca1ca736ebf927a9572;hpb=6e3c802c630a7f44e978cb37861e0bdb7addd830;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 index c218b25..5fb838d 100644 --- a/dali/internal/render/common/render-item.cpp +++ b/dali/internal/render/common/render-item.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 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. @@ -19,49 +19,43 @@ #include // INTERNAL INCLUDES +#include #include #include -#include namespace { //Memory pool used to allocate new RenderItems. Memory used by this pool will be released when shutting down DALi Dali::Internal::MemoryPoolObjectAllocator gRenderItemPool; -} +} // namespace namespace Dali { - namespace Internal { - namespace SceneGraph { - RenderItem* RenderItem::New() { - return new ( gRenderItemPool.AllocateRaw() ) RenderItem(); + return new(gRenderItemPool.AllocateRaw()) RenderItem(); } RenderItem::RenderItem() -: mModelMatrix( false ), - mModelViewMatrix( false ), - mColor( Vector4::ZERO ), +: mModelMatrix(false), + mModelViewMatrix(false), + mColor(Vector4::ZERO), mSize(), - mRenderer( NULL ), - mNode( NULL ), - mTextureSet( NULL ), - mDepthIndex( 0 ), - mIsOpaque( true ), - mIsUpdated( false ) -{ -} - -RenderItem::~RenderItem() + mRenderer(nullptr), + mNode(nullptr), + mTextureSet(nullptr), + mDepthIndex(0), + mIsOpaque(true), + mIsUpdated(false) { } +RenderItem::~RenderItem() = default; -ClippingBox RenderItem::CalculateViewportSpaceAABB( const Vector3& size, const int viewportWidth, const int viewportHeight ) const +ClippingBox RenderItem::CalculateViewportSpaceAABB(const Matrix& modelViewMatrix, const Vector3& size, const int viewportWidth, const int viewportHeight) { // Calculate extent vector of the AABB: const float halfActorX = size.x * 0.5f; @@ -74,12 +68,12 @@ ClippingBox RenderItem::CalculateViewportSpaceAABB( const Vector3& size, const i // We place the coords into the array in clockwise order, so we know opposite corners are always i + 2 from corner i. // We skip the 4th corner here as we can calculate that from the other 3, bypassing matrix multiplication. // Note: The below transform methods use a fast (2D) matrix multiply (only 4 multiplications are done). - Vector2 corners[4]{ Transform2D( mModelViewMatrix, -halfActorX, -halfActorY ), - Transform2D( mModelViewMatrix, halfActorX, -halfActorY ), - Transform2D( mModelViewMatrix, halfActorX, halfActorY ) }; + Vector2 corners[4]{Transform2D(modelViewMatrix, -halfActorX, -halfActorY), + Transform2D(modelViewMatrix, halfActorX, -halfActorY), + Transform2D(modelViewMatrix, halfActorX, halfActorY)}; // As we are dealing with a rectangle, we can do a fast calculation to get the 4th corner from knowing the other 3 (even if rotated). - corners[3] = Vector2( corners[0] + ( corners[2] - corners[1] ) ); + corners[3] = Vector2(corners[0] + (corners[2] - corners[1])); // Calculate the AABB: // We use knowledge that opposite corners will be the max/min of each other. Doing this reduces the normal 12 branching comparisons to 3. @@ -91,9 +85,9 @@ ClippingBox RenderItem::CalculateViewportSpaceAABB( const Vector3& size, const i unsigned int smallestX = 0u; // Loop 3 times to find the index of the smallest X value. // Note: We deliberately do NOT unroll the code here as this hampers the compilers output. - for( unsigned int i = 1u; i < 4u; ++i ) + for(unsigned int i = 1u; i < 4u; ++i) { - if( corners[i].x < corners[smallestX].x ) + if(corners[i].x < corners[smallestX].x) { smallestX = i; } @@ -101,26 +95,26 @@ ClippingBox RenderItem::CalculateViewportSpaceAABB( const Vector3& size, const i // As we are dealing with a rectangle, we can assume opposite corners are the largest. // 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 ); + Vector4 aabb(corners[smallestX].x, corners[(smallestX + 3u) % 4].y, corners[(smallestX + 2u) % 4].x, corners[(smallestX + 1u) % 4].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. - 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 ); + 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 ) ); + int x = static_cast(floor(aabbInScreen.x)); + int y = static_cast(floor(aabbInScreen.y)); + int z = static_cast(roundf(aabbInScreen.z)); + int w = static_cast(roundf(aabbInScreen.w)); - return ClippingBox( x, y, z - x, w - y ); + return ClippingBox(x, y, z - x, w - y); } -void RenderItem::operator delete( void* ptr ) +void RenderItem::operator delete(void* ptr) { - gRenderItemPool.Free( static_cast( ptr ) ); + gRenderItemPool.Free(static_cast(ptr)); } } // namespace SceneGraph