I tried to make a new blur effect. Well, first, here is my code:
texture framebuffer
effect
{
float x = _in.x;
float y = _in.y;
float zx = 1.0 / 640.0;
float zy = 1.0 / 480.0;
vec4 p1 = framebuffer(vec2(_in.x, _in.y));
vec4 p2 = framebuffer(vec2(_in.x + zx, _in.y + zy));
vec4 p3 = framebuffer(vec2(_in.x - zx, _in.y + zy));
vec4 p4 = framebuffer(vec2(_in.x + zx, _in.y - zy));
vec4 p5 = framebuffer(vec2(_in.x - zx, _in.y - zy));
_out = (p1 + p2 + p3 + p4 + p5) * 0.2;
}
What I do is basically just get the vec4s of the colors that are a bit right, left, above or below the current pixel and just sum them up and multiply them by a factor to keep the brightness.
But the problem is: This example only works for me as long as I replace the last line ( _out = (p1 + p2 + p3 + p4 + p5) * f;) by this line:
_out = (p1 + p2 + p3) * f;
As you can see I can not sum up all 5 vectors...It keeps crashing. As soon as I add more then 3 (no matter which ones I add, it just have to be less then 4) the effect simply doesn't show and the App.Window doesnt update anymore (oh and CPU usage goes up to 100%). If i just ad 3 vectors: everything works fine... Does anyone know what I am doing wrong?
EDIT: Strange enough, but this works too:
_out = p1 + p1 + p1 + p1 + p2 + p2 + p2;
So, the error occures as soon as I want to sum up more then 3 different vectors. A work around like
vec4 dummy = p1 + p2 + p3;
_out = dummy + p4 + p5;
doesnt work, too...
Another EDIT:
I thoguht it might be a memory problem with the GLSL compiler or something so i tried this code:
texture framebuffer
effect
{
float x = _in.x;
float y = _in.y;
float zx = 1.0 / 640.0;
float zy = 1.0 / 480.0;
vec4 val;
vec4 p1 = framebuffer(vec2(_in.x, _in.y));
val = framebuffer(vec2(_in.x + zx, _in.y + zy));
p1 = p1 + val;
val = framebuffer(vec2(_in.x - zx, _in.y + zy));
p1 = p1 + val;
val = framebuffer(vec2(_in.x + zx, _in.y - zy));
p1 = p1 + val;
val = framebuffer(vec2(_in.x - zx, _in.y - zy));
p1 = p1 + val;
float f = 0.2;
_out = p1 * f;
}
Problem remains: As soon as i sum up more then 3 different pixels i get a crash. If i just add 3 or less all is fine....