Convert shaders in dali-demo to use shader compilation tool
[platform/core/uifw/dali-demo.git] / examples / metaball-explosion / shaders / metaball-refraction.frag
1 //Fragment shader code for metaball and background composition with refraction effect
2
3 precision highp float;
4 varying vec2 vTexCoord;
5 uniform sampler2D sTexture;
6 uniform sampler2D sEffect;
7 uniform vec2 uPositionMetaball;
8 void main()
9 {
10   vec2 zoomCoords;
11   vec3 normal = vec3(0.0,0.0,1.0);
12   vec2 fakePos = vec2(0.0,0.0);
13   vec3 color = vec3(1.0, 1.0, 1.0);
14   float ambient = 0.2;
15
16   vec4 metaColor = texture2D(sEffect, vTexCoord);
17
18   vec2 adjustedCoords = vTexCoord.xy * vec2(2.0) - vec2(1.0);
19   fakePos = adjustedCoords.xy - vec2(uPositionMetaball.x, -uPositionMetaball.y);
20   float len = length(fakePos) + 0.01;
21   vec3 colorPos = vec3(0,0,1);
22
23   if (metaColor.r > 0.85)
24   {
25     zoomCoords = ((vTexCoord - 0.5) * 0.9);
26     zoomCoords = zoomCoords + 0.5;
27
28     float interpNormal = mix(0.7, 1.0, (metaColor.r - 0.85) * 4.);
29     normal.xyz = vec3(fakePos.x * (1.0 - interpNormal) / len, fakePos.y * (1.0 - interpNormal) / len, interpNormal);
30     normal.xyz = normalize(normal.xyz);
31     color = vec3(0.65, 1.0, 0);
32     colorPos = vec3(fakePos.x,fakePos.y,0);
33   }
34   else if (metaColor.r > 0.75)
35   {
36     float interpolation = mix(0.9, 1.15, (0.85 - metaColor.r) * 10.0);
37     zoomCoords = ((vTexCoord - 0.5) * interpolation);
38     zoomCoords = zoomCoords + 0.5;
39
40     float interpNormal = mix(0.7, 0.0, (0.85 - metaColor.r) * 10.0);
41     normal.xyz = vec3(fakePos.x * (1.0 - interpNormal) / len, fakePos.y * (1.0 - interpNormal) / len, interpNormal);
42     normal.xyz = normalize(normal.xyz);
43     color = vec3(0.65, 1.0, 0);
44     colorPos = vec3(fakePos.x,fakePos.y,0);
45   }
46   else
47   {
48     zoomCoords = vTexCoord;
49     normal = vec3(0,0,0);
50     ambient = 0.5;
51   }
52
53   vec3 lightPosition = vec3(-750.0,-1000.0,2000.0);
54   vec3 vertex = vec3(adjustedCoords.x,adjustedCoords.y,0.0);
55
56   vec3 vecToLight = normalize( lightPosition - vertex );
57
58   float lightDiffuse = dot( vecToLight, normal );
59   lightDiffuse = max(0.0,lightDiffuse);
60   lightDiffuse = lightDiffuse * 0.5 + 0.5;
61
62   vec3 vertexToEye = vec3(0,0,1) - vertex;
63   vertexToEye = normalize(vertexToEye);
64   vec3 lightReflect = normalize(reflect(-vecToLight, normal));
65   float specularFactor = max(0.0,dot(vertexToEye, lightReflect));
66   specularFactor = pow(specularFactor, 32.0) * 0.7;
67
68   vec4 texColor = texture2D(sTexture, zoomCoords);
69   gl_FragColor.rgb = texColor.rgb * ambient + color.rgb * texColor.rgb * lightDiffuse + vec3(specularFactor);
70   gl_FragColor.a = 1.0;
71 }