raylib/examples/resources/shaders/glsl100/bloom.fs

39 lines
1.0 KiB
Forth
Raw Normal View History

2016-04-07 13:32:32 +03:00
#version 100
precision mediump float;
// Input vertex attributes (from vertex shader)
varying vec2 fragTexCoord;
varying vec4 fragColor;
// Input uniform values
uniform sampler2D texture0;
2016-07-25 20:44:21 +03:00
uniform vec4 colDiffuse;
2016-04-07 13:32:32 +03:00
// NOTE: Add here your custom variables
2016-07-25 20:44:21 +03:00
const vec2 size = vec2(800, 450); // render size
const float samples = 5.0; // pixels per axis; higher = bigger glow, worse performance
const float quality = 2.5; // lower = smaller glow, better quality
2016-04-07 13:32:32 +03:00
void main()
{
vec4 sum = vec4(0);
2016-07-25 20:44:21 +03:00
vec2 sizeFactor = vec2(1)/size*quality;
// Texel color fetching from texture sampler
vec4 source = texture2D(texture0, fragTexCoord);
2016-04-07 13:32:32 +03:00
2016-07-25 20:44:21 +03:00
const int range = 2; // should be = (samples - 1)/2;
for (int x = -range; x <= range; x++)
2016-04-07 13:32:32 +03:00
{
2016-07-25 20:44:21 +03:00
for (int y = -range; y <= range; y++)
2016-04-07 13:32:32 +03:00
{
2016-07-25 20:44:21 +03:00
sum += texture2D(texture0, fragTexCoord + vec2(x, y)*sizeFactor);
2016-04-07 13:32:32 +03:00
}
}
2016-07-25 20:44:21 +03:00
2016-04-07 13:32:32 +03:00
// Calculate final fragment color
2016-07-25 20:44:21 +03:00
gl_FragColor = ((sum/(samples*samples)) + source)*colDiffuse;
2016-04-07 13:32:32 +03:00
}