Rendering API clean-up
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / bubble-effect / bubble-actor.h
1 #ifndef __DALI_TOOLKIT_INTERNAL_BUBBLE_ACTOR_H_
2 #define __DALI_TOOLKIT_INTERNAL_BUBBLE_ACTOR_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 #include <dali/public-api/actors/actor.h>
22 #include <dali/public-api/object/property-map.h>
23 #include <dali/devel-api/rendering/renderer.h>
24
25 namespace Dali
26 {
27
28 namespace Toolkit
29 {
30
31 namespace Internal
32 {
33
34 /**
35  * BubbleActor is a group of bubbles.Each bubble can be moved separately.
36  * Its custom shader achieves similar effect of particle system by applying on a specially created mesh
37  * Each bubble is rendered on a patch with two triangles; and each mesh can contain multiple such patches, thus a group.
38  */
39 class BubbleActor : public RefObject
40 {
41 public:
42
43   /**
44    * Constructor
45    * @param[in] numberOfBubble How many groups of uniforms are used to control the bubble movement.
46    * Note: Limited by the maximum available uniforms, this parameter cannot be bigger than 100.
47    * Ideally use one group of uniform to control one bubble.
48    * If the num of patches in the MeshActor is more than groups of uniforms,
49    * the uniform values will be shared by multiple bubbles. Allow up to 9 times.
50    * @param[in] movementArea The size of the bubble moving area, usually the same size as the background image actor.
51    * @return A newly allocated object.
52    */
53   BubbleActor( unsigned int numberOfBubble,
54                const Vector2& movementArea);
55
56   /**
57    * @brief Destructor
58    */
59   ~BubbleActor(){}
60
61   /**
62    * Prepare for the rendering: create and add renderer, and register properties
63    * @param[in] geometry The geometry to be used by the renderer
64    * @param[in] textureSet The texture set to be used by the renderer
65    * @param[in] textureSet The shader set to be used by the renderer
66    */
67   void MakeRenderable( Geometry geometry, TextureSet textureSet, Shader shader  );
68
69   /**
70    * Return the mesh actor which is used to display the bubbles
71    */
72   Actor GetMeshActor();
73
74   /**
75    * Sets the geometry to be used by the renderer
76    * @param[in] geometry The geometry to be used by the renderer
77    */
78   void SetGeometry( Geometry geometry );
79
80   /**
81    * Set the bubble movement area for the BubbleEffect
82    * @param[in] movementArea The size of bubble movement area; by default, it is the stage size
83    */
84   void SetMovementArea( const Vector2& movementArea );
85
86   /**
87    * Set the start and end positions of the index-th bubble's movement.
88    * @param[in] index Indicate which bubble these properties are applied on.
89    * @param[in] startAndEndPosition The start and the end position of movement.
90    */
91   void SetStartAndEndPosition( unsigned int index, const Vector4& startAndEndPosition );
92
93   /**
94    * Set the movement completed percentage of the index-th bubble.
95    * The bubble will appear at start position when percentage equals to zero,
96    * and disappear near end position (affected by gravity) when percentage equals to one.
97    * This percentage property is used to animate the bubble movement.
98    * @param[in] index Indicate which bubble this property is applied on.
99    * @param[in] percentage Set the percentage property value ( between zero and one ).
100    */
101   void SetPercentage( unsigned int index, float percentage );
102
103   /**
104    * Set the gravity applied to the y direction, which makes the bubbles no longer moving on a straight line.
105    * @param[in] gravity The gravity on the y direction.
106    */
107   void SetGravity( float gravity );
108
109   /**
110    * Set the scale factor applied to the bubbles
111    * @param[in] scale The scale factor applied on all bubbles.
112    */
113   void SetDynamicScale( float scale );
114
115   /**
116    * Get the idx-th percentage property.
117    * @param[in] idx The percentage property index.
118    * @return the idx-th percentage property.
119    */
120   Property GetPercentageProperty( unsigned int idx );
121
122   /**
123    * Reset the uniform values to default.
124    */
125   void ResetProperties();
126
127 private:
128
129   Actor        mActor;
130   Renderer     mRenderer;
131
132   Vector2      mMovementArea;      ///< The size of the bubble moving area, usually the same size as the background image actor.
133
134   //properties mapped as uniforms
135   std::vector<Property::Index> mIndicesOffset;             ///< Indices of the properties mapping to uniform array 'uOffset'
136   std::vector<Property::Index> mIndiceStartEndPos;         ///< Indices of the properties mapping to uniform array 'uStartAndEndPos'
137   std::vector<Property::Index> mIndicesPercentage;         ///< Indices of the properties mapping to uniform array 'uPercentage'
138   Property::Index              mIndexGravity;              ///< Index of the property mapping to uniform 'uGravity'
139   Property::Index              mIndexDynamicScale;         ///< Index of the property mapping to uniform 'uDynamicScale'
140   Property::Index              mIndexInvertedMovementArea; ///< Index of the property mapping to uniform 'uInvertedMovementArea'
141
142   unsigned int mNumBubble;  ///< How many groups of uniforms are used to control the bubble movement.
143   unsigned int mRandomSeed; ///< Seed to generate random number.
144 };
145
146 } // namespace Internal
147
148 } // namespace Toolkit
149
150 } // namespace Dali
151
152 #endif /* __DALI_TOOLKIT_INTERNAL_BUBBLE_ACTOR_H_ */