e5cbaa70a802dd89184ad8eb76add4ac24997a97
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / graphics / shaders / animated-gradient-visual-shader.vert
1 attribute mediump vec2 aPosition;
2 uniform highp mat4 uMvpMatrix;
3 uniform highp vec3 uSize;
4
5 uniform mediump vec2 start_point;
6 uniform mediump vec2 end_point;
7 uniform mediump vec2 rotate_center;
8 uniform mediump float rotate_angle;
9
10 varying mediump vec2 vTexCoord;
11 varying mediump vec2 vStart;
12 varying mediump vec2 vEnd;
13
14 vec2 rotate(vec2 x, vec2 c, float a)
15 {
16   vec2 d = x - c;
17   vec2 r = vec2(d.x * cos(a) - d.y * sin(a), d.x * sin(a) + d.y * cos(a));
18
19 #ifdef UNIT_TYPE_BOUNDING_BOX
20   return r + c;
21 #endif
22
23   /* UnitType::OBJECT_BOUNDING_BOX */
24 #ifdef UNIT_TYPE_USER
25   return (r + c) / uSize.x;
26 #endif
27   /* UnitType::USER_SPACE*/
28 }
29
30 //Visual size and offset
31 uniform mediump vec2 offset;
32 uniform highp vec2 size;
33 uniform mediump vec4 offsetSizeMode;
34 uniform mediump vec2 origin;
35 uniform mediump vec2 anchorPoint;
36
37 vec4 ComputeVertexPosition()
38 {
39   vec2 visualSize = mix( uSize.xy*size, size, offsetSizeMode.zw );
40   vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy );
41   return vec4( (aPosition + anchorPoint)*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 );
42 }
43
44 void main()
45 {
46   vStart = rotate( start_point, rotate_center, rotate_angle );
47   vEnd = rotate( end_point, rotate_center, rotate_angle );
48   gl_Position = uMvpMatrix * ComputeVertexPosition();
49
50 #ifdef UNIT_TYPE_BOUNDING_BOX
51   vTexCoord = vec2(aPosition.x, -aPosition.y);
52 #endif
53 /* UnitType::OBJECT_BOUNDING_BOX */
54
55 #ifdef UNIT_TYPE_USER
56   vTexCoord = vec2(aPosition.x, -aPosition.y * uSize.y / uSize.x);
57 #endif
58 /* UnitType::USER_SPACE*/
59 }