PICCANTE  0.4
The hottest HDR imaging library!
filter_gaussian_1d.hpp
Go to the documentation of this file.
1 /*
2 
3 PICCANTE
4 The hottest HDR imaging library!
5 http://vcg.isti.cnr.it/piccante
6 
7 Copyright (C) 2014
8 Visual Computing Laboratory - ISTI CNR
9 http://vcg.isti.cnr.it
10 First author: Francesco Banterle
11 
12 This Source Code Form is subject to the terms of the Mozilla Public
13 License, v. 2.0. If a copy of the MPL was not distributed with this
14 file, You can obtain one at http://mozilla.org/MPL/2.0/.
15 
16 */
17 
18 #ifndef PIC_GL_FILTERING_FILTER_GAUSSIAN_1D_HPP
19 #define PIC_GL_FILTERING_FILTER_GAUSSIAN_1D_HPP
20 
21 #include "../../base.hpp"
22 
23 #include "../../util/std_util.hpp"
24 
25 #include "../../util/precomputed_gaussian.hpp"
26 
27 #include "../../gl/filtering/filter_conv_1d.hpp"
28 
29 namespace pic {
30 
32 {
33 protected:
34  float sigma;
37 
38 public:
39 
46  FilterGLGaussian1D(float sigma, int direction, GLenum target);
47 
49 
53  void releaseAux()
54  {
55  pg = delete_s(pg);
56 
57  if(bWeightsOwn) {
59  }
60  }
61 
66  void update(float sigma);
67 
75  static ImageGL *execute(std::string nameIn, std::string nameOut, float sigma)
76  {
77  ImageGL imgIn(nameIn);
78  imgIn.generateTextureGL(GL_TEXTURE_2D, GL_FLOAT, false);
79 
80  FilterGLGaussian1D filter(sigma, true, GL_TEXTURE_2D);
81 
82  GLuint testTQ1 = glBeginTimeQuery();
83  ImageGL *imgOut = filter.Process(SingleGL(&imgIn), NULL);
84  GLuint64EXT timeVal = glEndTimeQuery(testTQ1);
85  printf("Gaussian 1D Filter on GPU time: %g ms\n",
86  double(timeVal) / 100000000.0);
87 
88  imgOut->loadToMemory();
89  imgOut->Write(nameOut);
90  return imgOut;
91  }
92 };
93 
94 FilterGLGaussian1D::FilterGLGaussian1D(float sigma, int direction = 0,
95  GLenum target = GL_TEXTURE_2D): FilterGLConv1D(NULL, direction, target)
96 {
97  pg = NULL;
98  bWeightsOwn = false;
99  this->sigma = -1.0f;
100 
101  update(sigma);
102 }
103 
105 {
106  release();
107 }
108 
109 void FilterGLGaussian1D::update(float sigma)
110 {
111  bool bChanges = false;
112 
113  if((this->sigma != sigma) && sigma > 0.0f) {
114  this->sigma = sigma;
115  bChanges = true;
116  }
117 
118  if(pg != NULL) {
119  pg = delete_s(pg);
120  }
121 
122  if(pg == NULL) {
123  pg = new PrecomputedGaussian(this->sigma);
124  }
125 
126  if(bChanges || weights == NULL) {
128 
129  weights = new ImageGL(1, pg->kernelSize, 1, 1, pg->coeff);
130  weights->generateTextureGL(GL_TEXTURE_2D, GL_FLOAT, false);
131  bWeightsOwn = true;
132  }
133  setUniform();
134 }
135 
136 } // end namespace pic
137 
138 #endif /* PIC_GL_FILTERING_FILTER_GAUSSIAN_1D_HPP */
139 
FilterGLGaussian1D(float sigma, int direction, GLenum target)
FilterGLGaussian1D.
ImageGL * weights
Definition: display.hpp:35
T * delete_s(T *data)
delete_s
Definition: std_util.hpp:123
static ImageGL * execute(std::string nameIn, std::string nameOut, float sigma)
execute
Definition: filter_gaussian_1d.hpp:75
GLuint generateTextureGL(GLenum target, GLenum format_type, bool mipmap)
generateTextureGL
GLuint glBeginTimeQuery()
glBeginTimeQuery
Definition: timings.hpp:29
GLenum target
Definition: display.hpp:47
The FilterGLConv1D class.
Definition: display.hpp:29
PIC_INLINE ImageGLVec SingleGL(ImageGL *img)
SingleGL creates a single for filters input.
Definition: image_vec.hpp:39
float sigma
Definition: filter_gaussian_1d.hpp:34
GLuint64 glEndTimeQuery(GLuint64 ret)
glEndTimeQuery
Definition: timings.hpp:46
void releaseAux()
releaseAux
Definition: filter_gaussian_1d.hpp:53
float * coeff
Definition: precomputed_gaussian.hpp:67
PrecomputedGaussian * pg
Definition: filter_gaussian_1d.hpp:35
The ImageGL class.
Definition: image.hpp:42
bool Write(std::string nameFile, LDR_type typeWrite, int writerCounter)
Write saves an Image into a file on the disk.
Definition: filter_radial_basis_function.hpp:1924
The FilterGLConv1D class.
Definition: filter_conv_1d.hpp:29
bool bWeightsOwn
Definition: filter_gaussian_1d.hpp:36
The PrecomputedGaussian class.
Definition: display.hpp:30
The ImageGL class.
Definition: display.hpp:42
GLuint generateTextureGL(GLenum target, GLenum format_type, bool mipmap)
generateTextureGL
Definition: image.hpp:759
void setUniform()
setUniform
Definition: filter_1d.hpp:158
The PrecomputedGaussian class.
Definition: precomputed_gaussian.hpp:30
Definition: filter_gaussian_1d.hpp:31
void loadToMemory()
loadToMemory
int kernelSize
Definition: precomputed_gaussian.hpp:66
Definition: bilateral_separation.hpp:25
void update(float sigma)
update
ImageGL * Process(ImageGLVec imgIn, ImageGL *imgOut)
Process.
Definition: filter_1d.hpp:182
void release()
release
Definition: display.hpp:85