X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Frender%2Fcommon%2Frender-instruction.cpp;h=f42041f64f21d9a9e6ab0302670f337eb02272a7;hb=c8e0d2807617b0ba441ae67e735512bf6f3c1c68;hp=88054b861992d3eb40f1946bdeec3a8abef7b5f7;hpb=5c66381841dd4dfd82c5a118d34104a00a2e0e1c;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/render/common/render-instruction.cpp b/dali/internal/render/common/render-instruction.cpp index 88054b8..f42041f 100644 --- a/dali/internal/render/common/render-instruction.cpp +++ b/dali/internal/render/common/render-instruction.cpp @@ -1,87 +1,84 @@ -// -// Copyright (c) 2014 Samsung Electronics Co., Ltd. -// -// Licensed under the Flora License, Version 1.0 (the License); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://floralicense.org/license/ -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an AS IS BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// +/* + * Copyright (c) 2022 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ // CLASS HEADER #include // INTERNAL INCLUDES -#include // for Color::BLACK +#include #include +#include // for Color::BLACK namespace Dali { - namespace Internal { - namespace SceneGraph { - RenderInstruction::RenderInstruction() -: mViewMatrix( 0 ), - mProjectionMatrix( 0 ), - mRenderTracker( NULL ), +: mRenderTracker(nullptr), mClearColor(), - mIsViewportSet( false ), - mIsClearColorSet( false ), - mOffscreenTextureId( 0 ), - mNextFreeRenderList( 0 ) + mIsViewportSet(false), + mIsClearColorSet(false), + mIgnoreRenderToFbo(false), + mFrameBuffer(nullptr), + mCamera(nullptr), + mNextFreeRenderList(0) { // reserve 6 lists, which is enough for three layers with opaque and transparent things on - mRenderLists.Reserve( 6 ); + mRenderLists.Reserve(6); } -RenderInstruction::~RenderInstruction() -{ // pointer container releases the renderlists -} +RenderInstruction::~RenderInstruction() = default; -RenderList& RenderInstruction::GetNextFreeRenderList( size_t capacityRequired ) +RenderList& RenderInstruction::GetNextFreeRenderList(size_t capacityRequired) { // check if we have enough lists, we can only be one behind at worst - if( mRenderLists.Count() <= mNextFreeRenderList ) + if(mRenderLists.Count() <= mNextFreeRenderList) { - mRenderLists.PushBack( new RenderList ); // Push a new empty render list + mRenderLists.PushBack(new RenderList); // Push a new empty render list } // check capacity of the list and reserve if not big enough - if( mRenderLists[ mNextFreeRenderList ]->Capacity() < capacityRequired ) + if(mRenderLists[mNextFreeRenderList]->Capacity() < capacityRequired) { - mRenderLists[ mNextFreeRenderList ]->Reserve( capacityRequired ); + mRenderLists[mNextFreeRenderList]->Reserve(capacityRequired); } // return the list mNextFreeRenderList points to and increase by one - return *mRenderLists[ mNextFreeRenderList++ ]; + return *mRenderLists[mNextFreeRenderList++]; } void RenderInstruction::UpdateCompleted() { // lets do some housekeeping, remove any lists that were not needed because // application might have removed a layer permanently - RenderListContainer::Iterator iter = mRenderLists.Begin(); - RenderListContainer::ConstIterator end = mRenderLists.End(); - for( ;iter != end; ++iter ) + RenderListContainer::Iterator iter = mRenderLists.Begin(); + RenderListContainer::ConstIterator end = mRenderLists.End(); + for(; iter != end; ++iter) { // tell the list to do its housekeeping (*iter)->ReleaseUnusedItems(); } // release any extra lists - if( mRenderLists.Count() > mNextFreeRenderList ) + if(mRenderLists.Count() > mNextFreeRenderList) { - mRenderLists.Resize( mNextFreeRenderList ); + mRenderLists.Resize(mNextFreeRenderList); } } @@ -90,31 +87,36 @@ RenderListContainer::SizeType RenderInstruction::RenderListCount() const return mNextFreeRenderList; } -const RenderList* RenderInstruction::GetRenderList( RenderListContainer::SizeType index ) const +const RenderList* RenderInstruction::GetRenderList(RenderListContainer::SizeType index) const { - DALI_ASSERT_ALWAYS( (index < mNextFreeRenderList ) && "Renderlist index out of scope" ); - return mRenderLists[ index ]; + DALI_ASSERT_DEBUG((index < mNextFreeRenderList) && (index < mRenderLists.Size()) && "Renderlist index out of container bounds"); + + // Return null if the caller has passed an invalid index: + if(index >= std::min(mNextFreeRenderList, mRenderLists.Size())) + { + return nullptr; + } + + return mRenderLists[index]; } -void RenderInstruction::Reset( const Matrix* viewMatrix, - const Matrix* projectionMatrix, - unsigned int offscreenTextureId, - const Viewport* viewport, - const Vector4* clearColor ) +void RenderInstruction::Reset(Camera* camera, + Render::FrameBuffer* frameBuffer, + const Viewport* viewport, + const Vector4* clearColor) { - mViewMatrix = viewMatrix; - mProjectionMatrix = projectionMatrix; - mViewport = viewport ? *viewport : Viewport(); - mIsViewportSet = NULL != viewport; - mClearColor = clearColor ? *clearColor : Color::BLACK; - mIsClearColorSet = NULL != clearColor; - mOffscreenTextureId = offscreenTextureId; - mRenderTracker = NULL; + mCamera = camera; + mViewport = viewport ? *viewport : Viewport(); + mIsViewportSet = nullptr != viewport; + mClearColor = clearColor ? *clearColor : Color::BLACK; + mIsClearColorSet = nullptr != clearColor; + mRenderTracker = nullptr; mNextFreeRenderList = 0; + mFrameBuffer = frameBuffer; - RenderListContainer::Iterator iter = mRenderLists.Begin(); - RenderListContainer::ConstIterator end = mRenderLists.End(); - for( ;iter != end; ++iter ) + RenderListContainer::Iterator iter = mRenderLists.Begin(); + RenderListContainer::ConstIterator end = mRenderLists.End(); + for(; iter != end; ++iter) { // since mRenderLists is a vector of RenderLists we dont want to clear it // as it ends up releasing and later reallocating loads of vectors @@ -123,6 +125,20 @@ void RenderInstruction::Reset( const Matrix* viewMatrix, } } +std::size_t RenderInstruction::GetCapacity() +{ + std::size_t capacity{0u}; + RenderListContainer::Iterator iter = mRenderLists.Begin(); + RenderListContainer::ConstIterator end = mRenderLists.End(); + for(; iter != end; ++iter) + { + capacity += ((*iter)->GetCachedItemCount() * (sizeof(RenderItem) + sizeof(RenderItem*))); + capacity += sizeof(RenderList); + } + capacity += sizeof(RenderInstruction); + return capacity; +} + } // namespace SceneGraph } // namespace Internal