Revision 2fce34f4
Added by Leszek Koltunski over 9 years ago
| src/main/res/raw/main_fragment_shader.glsl | ||
|---|---|---|
| 21 | 21 |
|
| 22 | 22 |
uniform sampler2D u_Texture; // The input texture. |
| 23 | 23 |
|
| 24 |
varying vec3 v_Position; // Interpolated position for this fragment.
|
|
| 24 |
varying vec3 v_Position; // Interpolated position for this fragment.
|
|
| 25 | 25 |
varying vec4 v_Color; // This is the color from the vertex shader interpolated across the triangle per fragment. |
| 26 | 26 |
varying vec3 v_Normal; // Interpolated normal for this fragment. |
| 27 | 27 |
varying vec2 v_TexCoordinate; // Interpolated texture coordinate per fragment. |
| ... | ... | |
| 30 | 30 |
|
| 31 | 31 |
#if NUM_FRAGMENT>0 |
| 32 | 32 |
uniform int fType[NUM_FRAGMENT]; // their types. |
| 33 |
uniform vec3 fUniforms[3*NUM_FRAGMENT]; // i-th effect is 3 consecutive vec3's: [3*i], [3*i+1], [3*i+2]. first 4 floats are the Interpolated values, |
|
| 34 |
// next 5 describe the Region, i.e. area over which the effect is active. |
|
| 35 |
// Important note: here the Region is written in a different order than in the Vertex shader. |
|
| 36 |
|
|
| 33 |
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, |
|
| 34 |
// next describes the Region, i.e. area over which the effect is active. |
|
| 35 |
|
|
| 37 | 36 |
const vec3 LUMI = vec3( 0.2125, 0.7154, 0.0721 ); |
| 38 | 37 |
|
| 39 | 38 |
////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 51 | 50 |
|
| 52 | 51 |
void chroma(float degree, int effect, inout vec4 color) |
| 53 | 52 |
{
|
| 54 |
color.rgb = mix(color.rgb, vec3(fUniforms[effect].yz,fUniforms[effect+1].x), degree*fUniforms[effect].x);
|
|
| 53 |
color.rgb = mix(color.rgb, fUniforms[effect].yzw, degree*fUniforms[effect].x);
|
|
| 55 | 54 |
} |
| 56 | 55 |
|
| 57 | 56 |
////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 101 | 100 |
#if NUM_FRAGMENT>0 |
| 102 | 101 |
for(int i=0; i<fNumEffects; i++) |
| 103 | 102 |
{
|
| 104 |
diff = (v_Position.xy - fUniforms[3*i+2].yz)/fUniforms[3*i+1].yz;
|
|
| 103 |
diff = (v_Position.xy - fUniforms[2*i+1].xy)/fUniforms[2*i+1].zw;
|
|
| 105 | 104 |
pointDegree = max(0.0,1.0-dot(diff,diff)); |
| 106 | 105 |
|
| 107 |
//switch(fType[i]) |
|
| 106 |
//switch(fType[i]) // future version of GLSL
|
|
| 108 | 107 |
// {
|
| 109 |
// case MACROBLOCK : macroblock(sign(pointDegree),3*i,tex); break;
|
|
| 110 |
// case CHROMA : chroma (sign(pointDegree),3*i,col); break;
|
|
| 111 |
// case SMOOTH_CHROMA : chroma ( pointDegree ,3*i,col); break;
|
|
| 112 |
// case ALPHA : alpha (sign(pointDegree),3*i,col); break;
|
|
| 113 |
// case SMOOTH_ALPHA : alpha ( pointDegree ,3*i,col); break;
|
|
| 114 |
// case BRIGHTNESS : brightness(sign(pointDegree),3*i,col); break;
|
|
| 115 |
// case SMOOTH_BRIGHTNESS : brightness( pointDegree ,3*i,col); break;
|
|
| 116 |
// case CONTRAST : contrast (sign(pointDegree),3*i,col); break;
|
|
| 117 |
// case SMOOTH_CONTRAST : contrast ( pointDegree ,3*i,col); break;
|
|
| 118 |
// case SATURATION : saturation(sign(pointDegree),3*i,col); break;
|
|
| 119 |
// case SMOOTH_SATURATION : saturation( pointDegree ,3*i,col); break;
|
|
| 108 |
// case MACROBLOCK : macroblock(sign(pointDegree),2*i,tex); break;
|
|
| 109 |
// case CHROMA : chroma (sign(pointDegree),2*i,col); break;
|
|
| 110 |
// case SMOOTH_CHROMA : chroma ( pointDegree ,2*i,col); break;
|
|
| 111 |
// case ALPHA : alpha (sign(pointDegree),2*i,col); break;
|
|
| 112 |
// case SMOOTH_ALPHA : alpha ( pointDegree ,2*i,col); break;
|
|
| 113 |
// case BRIGHTNESS : brightness(sign(pointDegree),2*i,col); break;
|
|
| 114 |
// case SMOOTH_BRIGHTNESS : brightness( pointDegree ,2*i,col); break;
|
|
| 115 |
// case CONTRAST : contrast (sign(pointDegree),2*i,col); break;
|
|
| 116 |
// case SMOOTH_CONTRAST : contrast ( pointDegree ,2*i,col); break;
|
|
| 117 |
// case SATURATION : saturation(sign(pointDegree),2*i,col); break;
|
|
| 118 |
// case SMOOTH_SATURATION : saturation( pointDegree ,2*i,col); break;
|
|
| 120 | 119 |
// } |
| 121 | 120 |
|
| 122 |
if( fType[i]==MACROBLOCK ) macroblock(sign(pointDegree),3*i,tex);
|
|
| 123 |
else if( fType[i]==CHROMA ) chroma (sign(pointDegree),3*i,col);
|
|
| 124 |
else if( fType[i]==SMOOTH_CHROMA ) chroma ( pointDegree ,3*i,col);
|
|
| 125 |
else if( fType[i]==ALPHA ) alpha (sign(pointDegree),3*i,col);
|
|
| 126 |
else if( fType[i]==SMOOTH_ALPHA ) alpha ( pointDegree ,3*i,col);
|
|
| 127 |
else if( fType[i]==BRIGHTNESS ) brightness(sign(pointDegree),3*i,col);
|
|
| 128 |
else if( fType[i]==SMOOTH_BRIGHTNESS ) brightness( pointDegree ,3*i,col);
|
|
| 129 |
else if( fType[i]==CONTRAST ) contrast (sign(pointDegree),3*i,col);
|
|
| 130 |
else if( fType[i]==SMOOTH_CONTRAST ) contrast ( pointDegree ,3*i,col);
|
|
| 131 |
else if( fType[i]==SATURATION ) saturation(sign(pointDegree),3*i,col);
|
|
| 132 |
else if( fType[i]==SMOOTH_SATURATION ) saturation( pointDegree ,3*i,col);
|
|
| 121 |
if( fType[i]==MACROBLOCK ) macroblock(sign(pointDegree),2*i,tex);
|
|
| 122 |
else if( fType[i]==CHROMA ) chroma (sign(pointDegree),2*i,col);
|
|
| 123 |
else if( fType[i]==SMOOTH_CHROMA ) chroma ( pointDegree ,2*i,col);
|
|
| 124 |
else if( fType[i]==ALPHA ) alpha (sign(pointDegree),2*i,col);
|
|
| 125 |
else if( fType[i]==SMOOTH_ALPHA ) alpha ( pointDegree ,2*i,col);
|
|
| 126 |
else if( fType[i]==BRIGHTNESS ) brightness(sign(pointDegree),2*i,col);
|
|
| 127 |
else if( fType[i]==SMOOTH_BRIGHTNESS ) brightness( pointDegree ,2*i,col);
|
|
| 128 |
else if( fType[i]==CONTRAST ) contrast (sign(pointDegree),2*i,col);
|
|
| 129 |
else if( fType[i]==SMOOTH_CONTRAST ) contrast ( pointDegree ,2*i,col);
|
|
| 130 |
else if( fType[i]==SATURATION ) saturation(sign(pointDegree),2*i,col);
|
|
| 131 |
else if( fType[i]==SMOOTH_SATURATION ) saturation( pointDegree ,2*i,col);
|
|
| 133 | 132 |
} |
| 134 | 133 |
#endif |
| 135 | 134 |
|
Also available in: Unified diff
Major push towards simplifying DistortedObject's public API.
All Fragment effects are using the new API - the 'DataND' marker interfaces.