Project

General

Profile

Download (6.23 KB) Statistics
| Branch: | Revision:

library / src / main / res / raw / main_fragment_shader.glsl @ f89f791a

1 d333eb6b Leszek Koltunski
//////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2016 Leszek Koltunski                                                          //
3
//                                                                                          //
4
// This file is part of Distorted.                                                          //
5
//                                                                                          //
6
// Distorted is free software: you can redistribute it and/or modify                        //
7
// it under the terms of the GNU General Public License as published by                     //
8
// the Free Software Foundation, either version 2 of the License, or                        //
9
// (at your option) any later version.                                                      //
10
//                                                                                          //
11
// Distorted is distributed in the hope that it will be useful,                             //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                           //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                            //
14
// GNU General Public License for more details.                                             //
15
//                                                                                          //
16
// You should have received a copy of the GNU General Public License                        //
17
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                       //
18
//////////////////////////////////////////////////////////////////////////////////////////////
19 6a06a912 Leszek Koltunski
20 8cefe6a3 Leszek Koltunski
precision lowp float;
21 94f6d472 Leszek Koltunski
22
#if __VERSION__ != 100
23 f2367b75 Leszek Koltunski
in vec3 v_Position;                     // Interpolated position for this fragment.
24
in vec3 v_Normal;                       // Interpolated normal for this fragment.
25
in vec2 v_TexCoordinate;                // Interpolated texture coordinate per fragment.
26
out vec4 fragColor;                     // The output color
27 1cbf4103 leszek
#define TEXTURE texture
28
#define FRAG_COLOR fragColor
29 94f6d472 Leszek Koltunski
#else
30
varying vec3 v_Position;                // Interpolated position for this fragment.
31
varying vec3 v_Normal;                  // Interpolated normal for this fragment.
32
varying vec2 v_TexCoordinate;           // Interpolated texture coordinate per fragment.
33 1cbf4103 leszek
#define TEXTURE texture2D
34
#define FRAG_COLOR gl_FragColor
35 94f6d472 Leszek Koltunski
#endif
36
37
uniform sampler2D u_Texture;            // The input texture.
38 6a06a912 Leszek Koltunski
39
#if NUM_FRAGMENT>0
40 ad33f883 Leszek Koltunski
uniform int fNumEffects;                // total number of fragment effects
41 6a06a912 Leszek Koltunski
uniform int fType[NUM_FRAGMENT];        // their types.
42 2fce34f4 Leszek Koltunski
uniform vec4 fUniforms[2*NUM_FRAGMENT]; // i-th effect is 2 consecutive vec4's: [2*i], [2*i+1]. First vec4 is the Interpolated values,
43
                                        // next describes the Region, i.e. area over which the effect is active.
44
45 ad33f883 Leszek Koltunski
#if defined(SATURATION) || defined(SMOOTH_SATURATION)
46 ffbf279e Leszek Koltunski
const vec3 LUMI = vec3( 0.2125, 0.7154, 0.0721 );                                        
47 ad33f883 Leszek Koltunski
#endif
48 6a06a912 Leszek Koltunski
49
//////////////////////////////////////////////////////////////////////////////////////////////
50 341c803d Leszek Koltunski
// CHROMA EFFECT
51 6a06a912 Leszek Koltunski
52 81a0b906 leszek
#if defined(CHROMA) || defined(SMOOTH_CHROMA)
53 ffbf279e Leszek Koltunski
void chroma(float degree, int effect, inout vec4 color)
54 6a06a912 Leszek Koltunski
  {
55 ffbf279e Leszek Koltunski
  color.rgb = mix(color.rgb, fUniforms[effect].yzw, degree*fUniforms[effect].x);
56 6a06a912 Leszek Koltunski
  }
57 81a0b906 leszek
#endif
58 6a06a912 Leszek Koltunski
59
//////////////////////////////////////////////////////////////////////////////////////////////
60 341c803d Leszek Koltunski
// ALPHA EFFECT (change transparency level)
61 6a06a912 Leszek Koltunski
62 81a0b906 leszek
#if defined(ALPHA) || defined(SMOOTH_ALPHA)
63 ffbf279e Leszek Koltunski
void alpha(float degree, int effect, inout vec4 color)
64 6a06a912 Leszek Koltunski
  {
65 ffbf279e Leszek Koltunski
  color.a *= (degree*(fUniforms[effect].x-1.0)+1.0); 
66 6a06a912 Leszek Koltunski
  }
67 81a0b906 leszek
#endif
68 6a06a912 Leszek Koltunski
69
//////////////////////////////////////////////////////////////////////////////////////////////
70 341c803d Leszek Koltunski
// BRIGHTNESS EFFECT
71 6a06a912 Leszek Koltunski
72 81a0b906 leszek
#if defined(BRIGHTNESS) || defined(SMOOTH_BRIGHTNESS)
73 ffbf279e Leszek Koltunski
void brightness(float degree, int effect, inout vec4 color)
74 6a06a912 Leszek Koltunski
  {
75 ffbf279e Leszek Koltunski
  color.rgb = mix(vec3(0.0,0.0,0.0), color.rgb, degree*(fUniforms[effect].x-1.0)+1.0 ); 
76 6a06a912 Leszek Koltunski
  }
77 81a0b906 leszek
#endif
78
79 6a06a912 Leszek Koltunski
//////////////////////////////////////////////////////////////////////////////////////////////
80 341c803d Leszek Koltunski
// CONTRAST EFFECT
81 6a06a912 Leszek Koltunski
82 81a0b906 leszek
#if defined(CONTRAST) || defined(SMOOTH_CONTRAST)
83 ffbf279e Leszek Koltunski
void contrast(float degree, int effect, inout vec4 color)
84 6a06a912 Leszek Koltunski
  {
85 ffbf279e Leszek Koltunski
  color.rgb = mix(vec3(0.5,0.5,0.5), color.rgb, degree*(fUniforms[effect].x-1.0)+1.0 ); 
86 6a06a912 Leszek Koltunski
  }
87 81a0b906 leszek
#endif
88 6a06a912 Leszek Koltunski
89
//////////////////////////////////////////////////////////////////////////////////////////////
90 341c803d Leszek Koltunski
// SATURATION EFFECT
91 6a06a912 Leszek Koltunski
92 81a0b906 leszek
#if defined(SATURATION) || defined(SMOOTH_SATURATION)
93 ffbf279e Leszek Koltunski
void saturation(float degree, int effect, inout vec4 color)
94 6a06a912 Leszek Koltunski
  {
95 ffbf279e Leszek Koltunski
  float luminance = dot(LUMI,color.rgb);
96
  color.rgb = mix(vec3(luminance,luminance,luminance), color.rgb, degree*(fUniforms[effect].x-1.0)+1.0 ); 
97 6a06a912 Leszek Koltunski
  }
98 81a0b906 leszek
#endif
99 6a06a912 Leszek Koltunski
100 03cb451d Leszek Koltunski
#endif    // NUM_FRAGMENT>0
101 6a06a912 Leszek Koltunski
102
//////////////////////////////////////////////////////////////////////////////////////////////
103
104
void main()                    		
105
  {  
106 94f6d472 Leszek Koltunski
  vec4 pixel = TEXTURE(u_Texture,v_TexCoordinate);
107 4018b3b7 Leszek Koltunski
108
#if NUM_FRAGMENT>0
109 6a06a912 Leszek Koltunski
  vec2 diff;
110
  float pointDegree;
111 03cb451d Leszek Koltunski
  int j=0;
112
113 6a06a912 Leszek Koltunski
  for(int i=0; i<fNumEffects; i++)
114
    {
115 03cb451d Leszek Koltunski
    diff = (v_Position.xy - fUniforms[j+1].xy)/fUniforms[j+1].zw;
116 6a06a912 Leszek Koltunski
    pointDegree = max(0.0,1.0-dot(diff,diff));
117 341c803d Leszek Koltunski
118 81a0b906 leszek
#ifdef CHROMA
119 03cb451d Leszek Koltunski
    if( fType[i]==CHROMA            ) chroma    (sign(pointDegree),j,pixel); else
120 81a0b906 leszek
#endif
121
#ifdef SMOOTH_CHROMA
122 03cb451d Leszek Koltunski
    if( fType[i]==SMOOTH_CHROMA     ) chroma    (     pointDegree ,j,pixel); else
123 81a0b906 leszek
#endif
124
#ifdef ALPHA
125 03cb451d Leszek Koltunski
    if( fType[i]==ALPHA             ) alpha     (sign(pointDegree),j,pixel); else
126 81a0b906 leszek
#endif
127
#ifdef SMOOTH_ALPHA
128 03cb451d Leszek Koltunski
    if( fType[i]==SMOOTH_ALPHA      ) alpha     (     pointDegree ,j,pixel); else
129 81a0b906 leszek
#endif
130
#ifdef BRIGHTNESS
131 03cb451d Leszek Koltunski
    if( fType[i]==BRIGHTNESS        ) brightness(sign(pointDegree),j,pixel); else
132 81a0b906 leszek
#endif
133
#ifdef SMOOTH_BRIGHTNESS
134 03cb451d Leszek Koltunski
    if( fType[i]==SMOOTH_BRIGHTNESS ) brightness(     pointDegree ,j,pixel); else
135 81a0b906 leszek
#endif
136
#ifdef CONTRAST
137 03cb451d Leszek Koltunski
    if( fType[i]==CONTRAST          ) contrast  (sign(pointDegree),j,pixel); else
138 81a0b906 leszek
#endif
139
#ifdef SMOOTH_CONTRAST
140 03cb451d Leszek Koltunski
    if( fType[i]==SMOOTH_CONTRAST   ) contrast  (     pointDegree ,j,pixel); else
141 81a0b906 leszek
#endif
142
#ifdef SATURATION
143 03cb451d Leszek Koltunski
    if( fType[i]==SATURATION        ) saturation(sign(pointDegree),j,pixel); else
144 81a0b906 leszek
#endif
145
#ifdef SMOOTH_SATURATION
146 03cb451d Leszek Koltunski
    if( fType[i]==SMOOTH_SATURATION ) saturation(     pointDegree ,j,pixel); else
147 81a0b906 leszek
#endif
148
    {}
149 03cb451d Leszek Koltunski
150
    j+=2;
151 6a06a912 Leszek Koltunski
    }
152
#endif
153 ff8ad0a7 Leszek Koltunski
154 1cbf4103 leszek
  FRAG_COLOR = vec4(pixel.rgb * (1.0 + 7.0*v_Normal.z) * 0.125, pixel.a);
155 341c803d Leszek Koltunski
  }