Merge changes I776588c1,I7292a2fb into devel/master
[platform/core/uifw/dali-toolkit.git] / dali-scene3d / internal / graphics / shaders / shadow-map-shader.frag
1 #version 300 es
2
3 uniform lowp vec4 uColorFactor; // Color from material
4 uniform lowp float uMask;
5 uniform lowp float uAlphaThreshold;
6
7 in mediump vec2 vUV;
8 in lowp vec4 vColor;
9
10 //in highp float depth;
11 //out highp vec4 FragColor;
12
13 #ifdef THREE_TEX
14 #ifdef BASECOLOR_TEX
15 uniform sampler2D sAlbedoAlpha;
16 #endif // BASECOLOR_TEX
17 #else // THREE_TEX
18 uniform sampler2D sAlbedoMetal;
19 #endif
20
21 lowp vec3 linear(lowp vec3 color)
22 {
23   return pow(color, vec3(2.2));
24 }
25
26 void main()
27 {
28 #ifdef THREE_TEX
29   // The albedo may be defined from a base texture or a flat color
30 #ifdef BASECOLOR_TEX
31   lowp vec4 baseColor = texture(sAlbedoAlpha, vUV);
32   baseColor = vColor * vec4(linear(baseColor.rgb), baseColor.w) * uColorFactor;
33 #else // BASECOLOR_TEX
34   lowp vec4 baseColor = vColor * uColorFactor;
35 #endif // BASECOLOR_TEX
36 #else // THREE_TEX
37   lowp vec4 albedoMetal = texture(sAlbedoMetal, vUV);
38   lowp vec4 baseColor = vec4(linear(albedoMetal.rgb), 1.0) * vColor * uColorFactor;
39 #endif // THREE_TEX
40
41   // The value of uOpaque and uMask can be 0.0 or 1.0.
42   // If uMask is 1.0, a Pixel that has bigger alpha than uAlphaThreashold becomes fully opaque,
43   // and, a pixel that has smaller alpha than uAlphaThreashold becomes fully transparent.
44   // If uOpaque is 1.0, alpha value of final color is 1.0;
45   // https://www.khronos.org/registry/glTF/specs/2.0/glTF-2.0.html#_material_alphamode
46   if(uMask > 0.5 && baseColor.a < uAlphaThreshold)
47   {
48     discard;
49   }
50 }