Making DALi public API typesafe using guaranteed types; uint8_t, uint32_t
[platform/core/uifw/dali-core.git] / dali / public-api / render-tasks / render-task-list.h
1 #ifndef __DALI_RENDER_TASK_LIST_H__
2 #define __DALI_RENDER_TASK_LIST_H__
3
4 /*
5  * Copyright (c) 2018 Samsung Electronics Co., Ltd.
6  *
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
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <cstdint> // uint32_t
23
24 // INTERNAL INCLUDES
25 #include <dali/public-api/object/base-handle.h>
26
27 namespace Dali
28 {
29 /**
30  * @addtogroup dali_core_rendering_effects
31  * @{
32  */
33
34 class RenderTask;
35
36 namespace Internal DALI_INTERNAL
37 {
38 class RenderTaskList;
39 }
40
41 /**
42  * @brief An ordered list of Dali::RenderTask%s.
43  *
44  * These tasks describe how the Dali scene should be rendered; @see Dali::RenderTask for more details.
45  * @SINCE_1_0.0
46  */
47 class DALI_CORE_API RenderTaskList : public BaseHandle
48 {
49 public:
50
51   /**
52    * @brief Creates an empty RenderTaskList handle.
53    *
54    * This can be initialised with Stage::GetRenderTaskList().
55    * @SINCE_1_0.0
56    */
57   RenderTaskList();
58
59   /**
60    * @brief Downcasts a handle to RenderTaskList handle.
61    *
62    * If handle points to a RenderTaskList the downcast produces valid
63    * handle. If not, the returned handle is left uninitialized.
64    *
65    * @SINCE_1_0.0
66    * @param[in] handle A handle to an object
67    * @return A handle to a RenderTaskList or an uninitialized handle
68    */
69   static RenderTaskList DownCast( BaseHandle handle );
70
71   /**
72    * @brief Destructor.
73    *
74    * This is non-virtual since derived Handle types must not contain data or virtual methods.
75    * @SINCE_1_0.0
76    */
77   ~RenderTaskList();
78
79   /**
80    * @brief This copy constructor is required for (smart) pointer semantics.
81    *
82    * @SINCE_1_0.0
83    * @param [in] handle A reference to the copied handle
84    */
85   RenderTaskList(const RenderTaskList& handle);
86
87   /**
88    * @brief This assignment operator is required for (smart) pointer semantics.
89    *
90    * @SINCE_1_0.0
91    * @param [in] rhs A reference to the copied handle
92    * @return A reference to this
93    */
94   RenderTaskList& operator=(const RenderTaskList& rhs);
95
96   /**
97    * @brief Creates a new RenderTask.
98    *
99    * This will be appended to the list of render-tasks.
100    * @SINCE_1_0.0
101    * @return A valid handle to a new RenderTask
102    */
103   RenderTask CreateTask();
104
105   /**
106    * @brief Removes a RenderTask from the list of render-tasks.
107    * @SINCE_1_0.0
108    * @param[in] task The render-task to remove.
109    */
110   void RemoveTask( RenderTask task );
111
112   /**
113    * @brief Queries the number of render-tasks in the list.
114    *
115    * This is ordered i.e. the task with index 0 is the first to be processed each frame.
116    * @SINCE_1_0.0
117    * @return The number of render-tasks
118    */
119   uint32_t GetTaskCount() const;
120
121   /**
122    * @brief Retrieves a render-task.
123    *
124    * @SINCE_1_0.0
125    * @param[in] index The index of the render task to retrieve
126    * @return A handle to the render-task
127    * @pre index should be in range i.e. less than GetTaskCount().
128    */
129   RenderTask GetTask( uint32_t index ) const;
130
131 public: // Not intended for application developers
132
133   /// @cond internal
134   /**
135    * @brief This constructor is used by Dali New() methods.
136    *
137    * @SINCE_1_0.0
138    * @param [in] renderTask A pointer to a newly allocated render-task
139    */
140   explicit DALI_INTERNAL RenderTaskList( Internal::RenderTaskList* renderTask );
141   /// @endcond
142 };
143
144 /**
145  * @}
146  */
147 } // namespace Dali
148
149 #endif //__DALI_RENDER_TASK_LIST_H__