1 #ifndef DALI_INTERNAL_SCENE_GRAPH_RENDER_LIST_H
2 #define DALI_INTERNAL_SCENE_GRAPH_RENDER_LIST_H
5 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
25 #include <dali/public-api/math/rect.h>
26 #include <dali/devel-api/common/owner-container.h>
27 #include <dali/internal/render/common/render-item.h>
32 typedef Rect<int> ClippingBox;
47 typedef OwnerContainer< RenderItem* > RenderItemContainer;
50 typedef OwnerContainer< RenderList* > RenderListContainer;
53 * The RenderList structure provides the renderer with a list of renderers.
66 mHasColorRenderItems( false )
75 // Pointer container deletes the render items
80 * Reset the render list for next frame
84 // We don't want to delete and re-create the render items every frame
92 * Reserve space in the render list
93 * @param size to reserve
95 void Reserve( RenderItemContainer::SizeType size )
98 mItems.Reserve( size );
102 * @return the capacity of the render list
104 RenderItemContainer::SizeType Capacity()
106 return mItems.Capacity();
110 * Get next free render item
111 * @return reference to the next available RenderItem
113 RenderItem& GetNextFreeItem()
115 // check if we have enough items, we can only be one behind at worst
116 if( mItems.Count() <= mNextFree )
118 mItems.PushBack( RenderItem::New() ); // Push a new empty render item
120 // get the item mNextFree points to and increase by one
121 RenderItem& item = *mItems[ mNextFree++ ];
126 * Get item at a given position in the list
128 RenderItem& GetItem( uint32_t index ) const
130 DALI_ASSERT_DEBUG( index < GetCachedItemCount() );
131 return *mItems[ index ];
135 * Get renderer from an item in the list
137 const Render::Renderer& GetRenderer( uint32_t index ) const
139 DALI_ASSERT_DEBUG( index < GetCachedItemCount() );
140 return *mItems[ index ]->mRenderer;
144 * Get the number of real items
145 * Because of caching, the actual size may be bit more
146 * @return The number of items
148 uint32_t Count() const
154 * @return the number of items cached by the list
156 uint32_t GetCachedItemCount() const
158 return static_cast<uint32_t>( mItems.Count() );
162 * Tells the render list to reuse the items from the cache
164 void ReuseCachedItems()
166 mNextFree = static_cast<uint32_t>( mItems.Count() );
170 * Predicate to inform if the list is empty
174 return ( mNextFree == 0 );
179 * @param clipping on/off
180 * @param box for clipping
182 void SetClipping( bool clipping, const ClippingBox& box )
187 mClippingBox = new ClippingBox( box );;
192 * @return true if clipping is on
194 bool IsClipping() const
196 return ( NULL != mClippingBox );
200 * @return the clipping box
202 const ClippingBox& GetClippingBox() const
204 return *mClippingBox;
208 * @return the container (for sorting)
210 RenderItemContainer& GetContainer()
216 * Do some housekeeping to keep memory consumption low
218 void ReleaseUnusedItems()
220 // release any non-used RenderItems
221 if( mItems.Count() > mNextFree )
223 mItems.Resize( mNextFree );
228 * @return the source layer these renderitems originate from
230 Layer* GetSourceLayer() const
236 * @param layer The layer these RenderItems originate from
238 void SetSourceLayer( Layer* layer )
240 mSourceLayer = layer;
244 * Set if the RenderList contains color RenderItems
245 * @param[in] hasColorRenderItems True if it contains color RenderItems, false otherwise
247 void SetHasColorRenderItems( bool hasColorRenderItems )
249 mHasColorRenderItems = hasColorRenderItems;
253 * Check if the RenderList contains color RenderItems
254 * @return true if the RenderList contains color RenderItems, false otherwise
256 bool HasColorRenderItems() const
258 return mHasColorRenderItems;
264 * Copy constructor and assignment operator not defined
266 RenderList( const RenderList& rhs );
267 const RenderList& operator=( const RenderList& rhs );
269 RenderItemContainer mItems; ///< Each item is a renderer and matrix pair
270 uint32_t mNextFree; ///< index for the next free item to use
272 ClippingBox* mClippingBox; ///< The clipping box, in window coordinates, when clipping is enabled
273 Layer* mSourceLayer; ///< The originating layer where the renderers are from
274 bool mHasColorRenderItems : 1; ///< True if list contains color render items
279 } // namespace SceneGraph
281 } // namespace Internal
285 #endif // DALI_INTERNAL_SCENE_GRAPH_RENDER_LIST_H