[dali_1.9.22] Merge branch 'devel/master'
[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) 2020 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 Move constructor.
98    *
99    * @SINCE_1_9.22
100    * @param[in] rhs A reference to the moved handle
101    */
102   RenderTaskList( RenderTaskList&& rhs );
103
104   /**
105    * @brief Move assignment operator.
106    *
107    * @SINCE_1_9.22
108    * @param[in] rhs A reference to the moved handle
109    * @return A reference to this handle
110    */
111   RenderTaskList& operator=( RenderTaskList&& rhs );
112
113   /**
114    * @brief Creates a new RenderTask.
115    *
116    * This will be appended to the list of render-tasks.
117    * @SINCE_1_0.0
118    * @return A valid handle to a new RenderTask
119    */
120   RenderTask CreateTask();
121
122   /**
123    * @brief Removes a RenderTask from the list of render-tasks.
124    * @SINCE_1_0.0
125    * @param[in] task The render-task to remove.
126    */
127   void RemoveTask( RenderTask task );
128
129   /**
130    * @brief Queries the number of render-tasks in the list.
131    *
132    * This is ordered i.e. the task with index 0 is the first to be processed each frame.
133    * @SINCE_1_0.0
134    * @return The number of render-tasks
135    */
136   uint32_t GetTaskCount() const;
137
138   /**
139    * @brief Retrieves a render-task.
140    *
141    * @SINCE_1_0.0
142    * @param[in] index The index of the render task to retrieve
143    * @return A handle to the render-task
144    * @pre index should be in range i.e. less than GetTaskCount().
145    */
146   RenderTask GetTask( uint32_t index ) const;
147
148 public: // Not intended for application developers
149
150   /// @cond internal
151   /**
152    * @brief This constructor is used by Dali New() methods.
153    *
154    * @SINCE_1_0.0
155    * @param [in] renderTask A pointer to a newly allocated render-task
156    */
157   explicit DALI_INTERNAL RenderTaskList( Internal::RenderTaskList* renderTask );
158   /// @endcond
159 };
160
161 /**
162  * @}
163  */
164 } // namespace Dali
165
166 #endif //DALI_RENDER_TASK_LIST_H