Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 10 of 13

Thread: Gaussian Blur on texture

Hybrid View

  1. #1
    Advanced Member Frequent Contributor
    Join Date
    Dec 2005
    Location
    Italy
    Posts
    655

    Gaussian Blur on texture

    Hi All,

    I have a texture generated on the fly (via FBO) with the model shadow. This is a black and transparent texture with - of course - many stair steps between (on/off) pixels.

    I was thiking to add Gaussian Blur on the whole bitmap. I found the algorithm you see below but it works pixel by pixel.

    Now the questions are:

    1) Does OpenGL provide some built in algorithm to do this?
    2) What is the fastest method to change pixel color on a texture?
    3) Does some other different approach exist to obtain the same result?

    Thanks so much as usually!

    Alberto

    Code :
    #define gauss_width 7
     
    sumr=0;
    sumg=0;
    sumb=0;
     
    int gauss_fact[gauss_width]={1,6,15,20,15,6,1};
    int gauss_sum=64;
     
    for(i=1;i<temp->w-1;i++){
      for(j=1;j<temp->h-1;j++){
        sumr=0;
        sumg=0;
        sumb=0;
        for(k=0;k<gauss_width;k++){
          color=getpixel(temp,i-((gauss_width-1)>>1)+k,j);
          r=getr32(color);
          g=getg32(color);
          b=getb32(color);
          sumr+=r*gauss_fact[k];
          sumg+=g*gauss_fact[k];
          sumb+=b*gauss_fact[k];
     
        }
        putpixel(temp1,i,j,makecol(sumr/gauss_sum,sumg/gauss_sum,
          sumb/gauss_sum));
      } 
    }
     
    for(i=1;i<temp->w-1;i++){
      for(j=1;j<temp->h-1;j++){
        sumr=0;
        sumg=0;
        sumb=0;
        for(k=0;k<gauss_width;k++){
          color=getpixel(temp1,i,j-((gauss_width-1)>>1)+k);
          r=getr32(color);
          g=getg32(color);
          b=getb32(color);
     
          sumr+=r*gauss_fact[k];
          sumg+=g*gauss_fact[k];
          sumb+=b*gauss_fact[k];
        }
        sumr/=gauss_sum;
        sumg/=gauss_sum;
        sumb/=gauss_sum;
     
        putpixel(temp2,i,j,makecol(sumr,sumg,sumb));
      } 
    }

  2. #2
    Advanced Member Frequent Contributor yooyo's Avatar
    Join Date
    Apr 2003
    Location
    Belgrade, Serbia
    Posts
    872

    Re: Gaussian Blur on texture

    As you can see in that algorithm.. do the same.. but you cant write (setpixel) into the same texture. So.. do the ping-pong... create another texture (same size as original) and do horizontal blur. Then use that new texture as source for vertical blur.
    Code :
    fbo1 is original fbo
    fbo2 is temporary fbo
     
    fbo2 = horizontal_blur(fbo1) // step 1.. read from fbo1, write to fbo2
    fbo1 = vertical_blur(fbo2)   // step 2.. read from fbo2, write to fbo1
     
    now, fbo1 contains blurred image.

    Even more, you can repeat step1 and step2 several times to blur more.

  3. #3
    Senior Member OpenGL Pro dletozeun's Avatar
    Join Date
    Jan 2006
    Location
    FRANCE
    Posts
    1,367

    Re: Gaussian Blur on texture


  4. #4
    Advanced Member Frequent Contributor
    Join Date
    Dec 2005
    Location
    Italy
    Posts
    655

    Re: Gaussian Blur on texture

    Thanks guy,

    I now have the doubt that using this extension "EXT_convolution" I can do it via hardware. Do you know if it is true?

    Thanks.

    Alberto

  5. #5
    Junior Member Regular Contributor
    Join Date
    Aug 2007
    Location
    USA
    Posts
    243

    Re: Gaussian Blur on texture

    In my experience some/most of the imaging extensions (including convolution) are not HW accelerated.

  6. #6
    Advanced Member Frequent Contributor
    Join Date
    Dec 2005
    Location
    Italy
    Posts
    655

    Re: Gaussian Blur on texture

    No I am certain, the best way to do what we need are Shaders. Does anybody know a good 'basic' tutorial on the Shaders based convulution filter?

    Thanks.

    Alberto

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •