Welcome, Guest. Please login or register. Did you miss your activation email?

Author Topic: PostFX Problem...  (Read 2410 times)

0 Members and 1 Guest are viewing this topic.

ptrxyz

  • Newbie
  • *
  • Posts: 32
    • View Profile
PostFX Problem...
« on: June 23, 2009, 11:37:36 am »
I tried to make a new blur effect. Well, first, here is my code:

Code: [Select]

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:

Code: [Select]

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....

Laurent

  • Administrator
  • Hero Member
  • *****
  • Posts: 32504
    • View Profile
    • SFML's website
    • Email
PostFX Problem...
« Reply #1 on: June 23, 2009, 11:51:45 am »
Shaders have a limit in the number of instructions. Maybe you can find a tool that gives you more informations for this.
Laurent Gomila - SFML developer

ptrxyz

  • Newbie
  • *
  • Posts: 32
    • View Profile
PostFX Problem...
« Reply #2 on: June 23, 2009, 11:56:36 am »
Hm....what kind of tool do you mean? Could you give me a hint about what to google for? I have to admit that i am not that deep into shaders, so i really dont have a clue about what hitword could match my needs.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Posts: 32504
    • View Profile
    • SFML's website
    • Email
PostFX Problem...
« Reply #3 on: June 23, 2009, 01:58:24 pm »
You can try "GLSL" and "instruction count". I can't help more, sorry, I've never done this for GLSL.
Laurent Gomila - SFML developer

ptrxyz

  • Newbie
  • *
  • Posts: 32
    • View Profile
PostFX Problem...
« Reply #4 on: June 23, 2009, 03:08:41 pm »
Ah thanks! I found out that my notebook's GFX chip only supports 22 instructions. I guess that might be the problem.

For those who ever might have the same problem:
I worked around the problem by applying 2 effects then. One blurring horizontally, another one blurring vertically. Halfes the performance, but it's still ok for my purposes.

Topic can be closed.