You are on page 1of 2

////BLENDER shader to draw burn/screen etc

#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D al_tex; ///what we're drawing
uniform sampler2D base_tex; ///what is already drawn
uniform bool al_use_tex;
varying vec4 varying_color;
varying vec2 varying_texcoord;
float screenWidth=640.0;
float screenHeight=360.0;
uniform int blendselect;
//1 = screen
//2 = burn
//3 = multiply

vec4 channelBlend_Screen(vec4 base, vec4 blend){


return vec4(1.0) - ((vec4(1.0) - blend) * (vec4(1.0) - base));
}
vec4 channelBlend_Burn(vec4 base, vec4 blend){
return vec4(1.0) - (vec4(1.0) - base) / blend;
}
vec4 channelBlend_Multiply(vec4 base, vec4 blend){
return base * blend;
}
void main()
{
if (al_use_tex) {
//get drawing colour
gl_FragColor = varying_color * texture2D(al_tex, varying_texcoord);
///dont do anything if theres no alpha even..
//if (gl_FragColor.a <=0) discard;
//figure out actual screen coords because fuck openGL
vec2 screenCoords = vec2((gl_FragCoord.x)/screenWidth, (gl_Frag
Coord.y)/screenHeight);
//blend each r/g/b with whats already there
if (blendselect == 1) {
gl_FragColor = channelBlend_Screen(texture2D(base_tex, screenCoo
rds), gl_FragColor);
} else if (blendselect == 2) {
gl_FragColor = channelBlend_Burn(texture2D(base_tex, screenCoord
s), gl_FragColor);
} else if (blendselect == 3) {
gl_FragColor = channelBlend_Multiply(texture2D(base_tex, screenC
oords), gl_FragColor);
}
//if (gl_FragCoord.x < 0.5) {
// gl_FragColor = texture2D(base_tex, screenCoords);
// gl_FragColor.g=0;
// gl_FragColor.b=0;
// gl_FragColor.a=1;
//gl_FragColor.r = gl_FragCoord.x;
//}

} else {
gl_FragColor = varying_color;
}
}

You might also like