1 attribute mediump vec2 aPosition;
2 uniform highp mat4 uMvpMatrix;
3 uniform highp vec3 uSize;
5 uniform mediump vec2 start_point;
6 uniform mediump vec2 end_point;
7 uniform mediump vec2 rotate_center;
8 uniform mediump float rotate_angle;
10 varying mediump vec2 vTexCoord;
11 varying mediump vec2 vStart;
12 varying mediump vec2 vEnd;
14 vec2 rotate(vec2 x, vec2 c, float a)
17 vec2 r = vec2(d.x * cos(a) - d.y * sin(a), d.x * sin(a) + d.y * cos(a));
19 #ifdef UNIT_TYPE_BOUNDING_BOX
23 /* UnitType::OBJECT_BOUNDING_BOX */
25 return (r + c) / uSize.x;
27 /* UnitType::USER_SPACE*/
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;
37 vec4 ComputeVertexPosition()
39 vec2 visualSize = mix(size * uSize.xy, size, offsetSizeMode.zw );
40 vec2 visualOffset = mix(offset * uSize.xy, offset, offsetSizeMode.xy );
41 return vec4( (aPosition + anchorPoint)*visualSize + visualOffset + origin * uSize.xy, 0.0, 1.0 );
46 vStart = rotate( start_point, rotate_center, rotate_angle );
47 vEnd = rotate( end_point, rotate_center, rotate_angle );
48 gl_Position = uMvpMatrix * ComputeVertexPosition();
50 #ifdef UNIT_TYPE_BOUNDING_BOX
51 vTexCoord = vec2(aPosition.x, -aPosition.y);
53 /* UnitType::OBJECT_BOUNDING_BOX */
56 vTexCoord = vec2(aPosition.x, -aPosition.y * uSize.y / uSize.x);
58 /* UnitType::USER_SPACE*/