PICCANTE  0.4
The hottest HDR imaging library!
filter_luminance.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_LUMINANCE_HPP
19 #define PIC_GL_FILTERING_FILTER_LUMINANCE_HPP
20 
21 #include "../../base.hpp"
22 #include "../../filtering/filter_luminance.hpp"
23 #include "../../gl/filtering/filter.hpp"
24 
25 namespace pic {
26 
31 {
32 protected:
33 
35  float weights[3];
36 
40  void initShaders();
41 
42 public:
43 
48 
50  {
51  release();
52  }
53 
58 
64 
71  static ImageGL *execute(ImageGL *imgIn, ImageGL *imgOut)
72  {
74  imgOut = filter.Process(SingleGL(imgIn), imgOut);
75  return imgOut;
76  }
77 
86  void OutputSize(ImageGLVec imgIn, int &width, int &height, int &channels, int &frames)
87  {
88  width = imgIn[0]->width;
89  height = imgIn[0]->height;
90  channels = 1;
91  frames = imgIn[0]->frames;
92  }
93 };
94 
96 {
97  this->type = LT_CIE_LUMINANCE;
98 
99  initShaders();
100 }
101 
103 {
104  this->type = type;
105 
106  initShaders();
107 }
108 
110 {
112  (
113  uniform sampler2D u_tex; \n
114  uniform vec3 weights; \n
115  out vec4 f_color; \n
116  void main(void) {\n
117  ivec2 coords = ivec2(gl_FragCoord.xy); \n
118  vec3 color = texelFetch(u_tex, coords, 0).xyz; \n
119  float L = dot(color, weights); \n
120  f_color = vec4(L, L, L, 1.0); \n
121  }
122  );
123 
124  technique.initStandard("330", vertex_source, fragment_source, "FilterGLLuminance");
125 
126  update(type);
127 }
128 
130 {
131  this->type = type;
132 
134 
135  technique.bind();
136  technique.setUniform1i("u_tex", 0);
137  technique.setUniform3f("weights", weights[0], weights[1], weights[2]);
138  technique.unbind();
139 }
140 
141 } // end namespace pic
142 
143 #endif /* PIC_GL_FILTERING_FILTER_LUMINANCE_HPP */
144 
Definition: filter_luminance.hpp:28
TechniqueGL technique
Definition: display.hpp:45
LUMINANCE_TYPE
Definition: filter_luminance.hpp:28
void initShaders()
initShaders
void bind()
bind
Definition: display.hpp:189
#define MAKE_STRING(input_string)
~FilterGLLuminance()
Definition: filter_luminance.hpp:49
PIC_INLINE ImageGLVec SingleGL(ImageGL *img)
SingleGL creates a single for filters input.
Definition: image_vec.hpp:39
float weights[3]
Definition: filter_luminance.hpp:35
void update(LUMINANCE_TYPE type)
update
The ImageGL class.
Definition: image.hpp:42
virtual ImageGL * Process(ImageGLVec imgIn, ImageGL *imgOut)
Process.
Definition: display.hpp:258
The FilterGL class.
Definition: filter.hpp:35
LUMINANCE_TYPE type
Definition: filter_luminance.hpp:34
The FilterGL class.
Definition: display.hpp:35
#define PIC_INLINE
Definition: base.hpp:33
bool initStandard(std::string version_number, std::string vertex_shader_source, std::string fragment_shader_source, std::string name)
initStandard
Definition: display.hpp:114
LUMINANCE_TYPE
Definition: display.hpp:28
void OutputSize(ImageGLVec imgIn, int &width, int &height, int &channels, int &frames)
OutputSize.
Definition: filter_luminance.hpp:86
FilterGLLuminance()
FilterGLLuminance.
void unbind()
unbind
Definition: display.hpp:197
std::string vertex_source
Definition: display.hpp:57
Definition: bilateral_separation.hpp:25
static ImageGL * execute(ImageGL *imgIn, ImageGL *imgOut)
execute
Definition: filter_luminance.hpp:71
static float * computeWeights(LUMINANCE_TYPE type, int channels, float *weights)
computeWeights
Definition: filter_luminance.hpp:83
The FilterGLLuminance class.
Definition: filter_luminance.hpp:30
std::string fragment_source
Definition: display.hpp:57
std::vector< ImageGL * > ImageGLVec
ImageGLVec an std::vector of pic::ImageGL.
Definition: image_vec.hpp:32
void setUniform3f(const char *name_uniform, float value0, float value1, float value2)
setUniform
Definition: display.hpp:273
void release()
release
Definition: display.hpp:85
void setUniform1i(const char *name_uniform, int value0)
SetUniform.
Definition: display.hpp:236