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