2a4b7043a1e118b982b495604a63cd20e2292438
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / graphics / shaders / mesh-visual-simple-shader.vert
1 attribute highp vec3 aPosition;
2 attribute highp vec3 aNormal;
3 varying mediump vec3 vIllumination;
4 uniform mediump vec3 uSize;
5 uniform mediump mat4 uMvpMatrix;
6 uniform mediump mat4 uModelView;
7 uniform mediump mat4 uViewMatrix;
8 uniform mediump mat3 uNormalMatrix;
9 uniform mediump mat4 uObjectMatrix;
10 uniform mediump vec3 lightPosition;
11 uniform mediump vec2 uStageOffset;
12
13 //Visual size and offset
14 uniform mediump vec2 offset;
15 uniform mediump vec2 size;
16 uniform mediump vec4 offsetSizeMode;
17 uniform mediump vec2 origin;
18 uniform mediump vec2 anchorPoint;
19
20 vec4 ComputeVertexPosition()
21 {
22   vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw );
23   float scaleFactor = min( visualSize.x, visualSize.y );
24   vec3 originFlipY =vec3(origin.x, -origin.y, 0.0);
25   vec3 anchorPointFlipY = vec3( anchorPoint.x, -anchorPoint.y, 0.0);
26   vec3 offset = vec3( ( offset / uSize.xy ) * offsetSizeMode.xy + offset * (1.0-offsetSizeMode.xy), 0.0) * vec3(1.0,-1.0,1.0);
27   return vec4( (aPosition + anchorPointFlipY)*scaleFactor + (offset + originFlipY)*uSize, 1.0 );
28 }
29
30 void main()
31 {
32   vec4 normalisedVertexPosition = ComputeVertexPosition();
33   vec4 vertexPosition = uObjectMatrix * normalisedVertexPosition;
34   vertexPosition = uMvpMatrix * vertexPosition;
35
36   //Illumination in Model-View space - Transform attributes and uniforms
37   vec4 mvVertexPosition = uModelView * normalisedVertexPosition;
38   vec3 normal = uNormalMatrix * mat3( uObjectMatrix ) * aNormal;
39
40   vec4 mvLightPosition = vec4( ( lightPosition.xy - uStageOffset ), lightPosition.z, 1.0 );
41   mvLightPosition = uViewMatrix * mvLightPosition;
42   vec3 vectorToLight = normalize( mvLightPosition.xyz - mvVertexPosition.xyz );
43
44   float lightDiffuse = max( dot( vectorToLight, normal ), 0.0 );
45   vIllumination = vec3( lightDiffuse * 0.5 + 0.5 );
46
47   gl_Position = vertexPosition;
48 }