Merge remote-tracking branch 'origin/tizen' into devel/new_mesh
[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) 2015 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 // INTERNAL INCLUDES
22 #include <dali/public-api/object/base-handle.h>
23
24 namespace Dali
25 {
26
27 class RenderTask;
28
29 namespace Internal DALI_INTERNAL
30 {
31 class RenderTaskList;
32 }
33
34 /**
35  * @brief An ordered list of Dali::RenderTask%s.
36  *
37  * These tasks describe how the Dali scene should be rendered; @see Dali::RenderTask for more details.
38  */
39 class DALI_IMPORT_API RenderTaskList : public BaseHandle
40 {
41 public:
42
43   /**
44    * @brief Create an empty RenderTaskList handle.
45    *
46    * This can be initialised with Stage::GetRenderTaskList().
47    */
48   RenderTaskList();
49
50   /**
51    * @brief Downcast a handle to RenderTaskList handle.
52    *
53    * If handle points to a RenderTaskList the downcast produces valid
54    * handle. If not the returned handle is left uninitialized.
55    *
56    * @param[in] handle A handle to an object.
57    * @return A handle to a RenderTaskList or an uninitialized handle.
58    */
59   static RenderTaskList DownCast( BaseHandle handle );
60
61   /**
62    * @brief Destructor
63    *
64    * This is non-virtual since derived Handle types must not contain data or virtual methods.
65    */
66   ~RenderTaskList();
67
68   /**
69    * @brief This copy constructor is required for (smart) pointer semantics.
70    *
71    * @param [in] handle A reference to the copied handle
72    */
73   RenderTaskList(const RenderTaskList& handle);
74
75   /**
76    * @brief This assignment operator is required for (smart) pointer semantics.
77    *
78    * @param [in] rhs  A reference to the copied handle
79    * @return A reference to this
80    */
81   RenderTaskList& operator=(const RenderTaskList& rhs);
82
83   /**
84    * @brief Create a new RenderTask.
85    *
86    * This will be appended to the list of render-tasks.
87    * @return A valid handle to a new RenderTask.
88    */
89   RenderTask CreateTask();
90
91   /**
92    * @brief Remove a RenderTask from the list of render-tasks.
93    * @param[in] task The render-task to remove.
94    */
95   void RemoveTask( RenderTask task );
96
97   /**
98    * @brief Query the number of render-tasks in the list.
99    *
100    * This is ordered i.e. the task with index 0 is the first to be processed each frame.
101    * @return The number of render-tasks.
102    */
103   unsigned int GetTaskCount() const;
104
105   /**
106    * @brief Retrieve a render-task.
107    *
108    * @pre index should be in range i.e. less than GetTaskCount().
109    * @param[in] index The index of the render task to retrieve
110    * @return A handle to the render-task.
111    */
112   RenderTask GetTask( unsigned int index ) const;
113
114 public: // Not intended for application developers
115
116   /**
117    * @brief This constructor is used by Dali New() methods
118    * @param [in] renderTask A pointer to a newly allocated render-task
119    */
120   explicit DALI_INTERNAL RenderTaskList( Internal::RenderTaskList* renderTask );
121 };
122
123 } // namespace Dali
124
125 #endif //__DALI_RENDER_TASK_LIST_H__