PICCANTE  0.4
The hottest HDR imaging library!
filter_deform_grid.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_DEFORM_GRID_HPP
19 #define PIC_GL_FILTERING_FILTER_DEFORM_GRID_HPP
20 
21 #include "../../base.hpp"
22 #include "../../util/std_util.hpp"
23 #include "../../util/gl/bicubic.hpp"
24 #include "../../image_samplers/image_sampler_bicubic.hpp"
25 #include "../../filtering/filter_deform_grid.hpp"
26 #include "../../gl/filtering/filter.hpp"
27 
28 namespace pic {
29 
34 {
35 protected:
37 
40 
44  void initShaders();
45 
46 public:
51 
53 
57  void releaseAux();
58 
63  void update(Image *grid_move);
64 
72  void getCoordinatesAfterTransform(float x, float y, float &xOut, float &yOut)
73  {
74  float vDiff[3];
75  isb.SampleImage(&grid_diff, x, y, vDiff);
76 
77  xOut = x + vDiff[0];
78  yOut = y + vDiff[1];
79  }
80 };
81 
83 {
85  this->grid_move = grid_move;
86 
88 
89  grid_diff_gl = new ImageGL(&grid_diff, true);
90  grid_diff_gl->generateTextureGL(GL_TEXTURE_2D, GL_FLOAT, false);
91  param.push_back(grid_diff_gl);
92 
93  initShaders();
94 }
95 
97 {
98  release();
99 }
100 
102 {
105 }
106 
108 {
111 
113  (
114  uniform sampler2D u_tex; \n
115  uniform sampler2D u_grid; \n
116  out vec4 f_color; \n
117  \n
118 
119  void main(void) {
120  vec2 tSize = vec2(textureSize(u_tex, 0));
121  vec2 coords = gl_FragCoord.xy / tSize.xy; \n
122 
123  vec2 shifts = textureBicubic(u_grid, coords.xy).xy;
124  f_color = texture(u_tex, coords + shifts.xy);
125  }
126  );
127 
128  technique.initStandard("330", vertex_source, fragment_source, "FilterGLDeformGrid");
129 
130  update(NULL);
131 }
132 
134 {
135  if(grid_move != NULL) {
136 
137  this->grid_move = grid_move;
138 
139  grid_diff = *grid_rest;
140  grid_diff -= *this->grid_move;
141 
143  }
144 
145  technique.bind();
146  technique.setUniform1i("u_tex", 0);
147  technique.setUniform1i("u_grid", 1);
148  technique.unbind();
149 }
150 
151 } // end namespace pic
152 
153 #endif /* PIC_GL_FILTERING_FILTER_DEFORM_GRID_HPP */
154 
ImageGL * grid_diff_gl
Definition: filter_deform_grid.hpp:39
TechniqueGL technique
Definition: display.hpp:45
void initShaders()
initShaders
static Image * getUniformGrid(int sampleX, int sampleY)
getUniformGrid
Definition: filter_deform_grid.hpp:91
T * delete_s(T *data)
delete_s
Definition: std_util.hpp:123
FilterGLDeformGrid(Image *grid_move)
FilterGLDeformGrid.
GLuint generateTextureGL(GLenum target, GLenum format_type, bool mipmap)
generateTextureGL
The ImageSamplerBicubic class.
Definition: image_sampler_bicubic.hpp:28
void bind()
bind
Definition: display.hpp:189
void releaseAux()
releaseAux
#define MAKE_STRING(input_string)
The Image class stores an image as buffer of float.
Definition: filter_radial_basis_function.hpp:60
The ImageGL class.
Definition: image.hpp:42
PIC_INLINE std::string GLSL_TEXTURE_BICUBIC()
GLSL_TEXTURE_BICUBIC.
Definition: bicubic.hpp:60
The FilterGL class.
Definition: filter.hpp:35
The FilterGL class.
Definition: display.hpp:35
#define PIC_INLINE
Definition: base.hpp:33
void SampleImage(Image *img, float x, float y, float *vOut)
SampleImage samples an image in uniform coordiantes.
Definition: image_sampler_bicubic.hpp:43
The ImageGL class.
Definition: display.hpp:42
Image * grid_rest
Definition: filter_deform_grid.hpp:38
int width
Definition: filter_radial_basis_function.hpp:80
bool initStandard(std::string version_number, std::string vertex_shader_source, std::string fragment_shader_source, std::string name)
initStandard
Definition: display.hpp:114
ImageGLVec param
Definition: display.hpp:49
The Image class stores an image as buffer of float.
Definition: image.hpp:60
PIC_INLINE std::string GLSL_BICUBIC()
GLSL_BICUBIC returns bicubic sample.
Definition: bicubic.hpp:31
The FilterGLDeformGrid class.
Definition: filter_deform_grid.hpp:33
void unbind()
unbind
Definition: display.hpp:197
Image grid_diff
Definition: filter_deform_grid.hpp:38
std::string vertex_source
Definition: display.hpp:57
Definition: bilateral_separation.hpp:25
void getCoordinatesAfterTransform(float x, float y, float &xOut, float &yOut)
getCoordinatesAfterTransform
Definition: filter_deform_grid.hpp:72
void update(Image *grid_move)
update
std::string fragment_source
Definition: display.hpp:57
ImageSamplerBicubic isb
Definition: filter_deform_grid.hpp:36
int height
Definition: image.hpp:80
Image * grid_move
Definition: filter_deform_grid.hpp:38
void release()
release
Definition: display.hpp:85
void setUniform1i(const char *name_uniform, int value0)
SetUniform.
Definition: display.hpp:236
void loadFromMemory()
loadFromMemory