bd455fc23db234cd6caef7d1f32729d31adbefb6
[platform/core/uifw/dali-core.git] / dali / graphics / vulkan / shaders / image-visual-atlas-various-wrap-shader.frag
1 #version 430
2
3 layout( location=0 ) in vec2 vTexCoord;
4
5 layout(set=1, binding=0, std140) uniform FragData
6 {
7   vec4 uAtlasRect;
8   vec2 wrapMode;
9   vec4 uColor;
10   vec3 mixColor;
11   float opacity;
12   float preMultipliedAlpha;
13 };
14
15 layout(set=1, binding=1) uniform sampler2D sTexture;
16
17 layout(location=0) out vec4 fragColor;
18
19 float wrapCoordinate( vec2 range, float coordinate, float wrap )
20 {
21   float coord;
22   if( wrap > 1.5 ) // REFLECT
23     coord = 1.0-abs(fract(coordinate*0.5)*2.0 - 1.0);
24   else // warp == 0 or 1
25     coord = mix(coordinate, fract( coordinate ), wrap);
26   return clamp( mix(range.x, range.y, coord), range.x, range.y );
27 }
28
29 vec4 visualMixColor()
30 {
31   return vec4( mixColor * mix( 1.0, opacity, preMultipliedAlpha ), opacity );
32 }
33
34 void main()
35 {
36     vec2 texCoord = vec2( wrapCoordinate( uAtlasRect.xz, vTexCoord.x, wrapMode.x ),
37                                   wrapCoordinate( uAtlasRect.yw, vTexCoord.y, wrapMode.y ) );
38     fragColor = texture( sTexture, texCoord ) * uColor * visualMixColor();
39 }