18 #ifndef PIC_GL_FILTERING_FILTER_SCATTER_HPP 19 #define PIC_GL_FILTERING_FILTER_SCATTER_HPP 21 #include "../../base.hpp" 22 #include "../../util/std_util.hpp" 23 #include "../../gl/filtering/filter.hpp" 80 glDeleteBuffers(1, &
vbo);
85 glDeleteVertexArrays(1, &
vao);
133 for(
int i = 0; i < height; i++) {
134 float i_f = float(i);
136 for(
int j = 0; j < width; j++) {
143 glGenBuffers(1, &
vbo);
144 glBindBuffer(GL_ARRAY_BUFFER,
vbo);
147 glBindBuffer(GL_ARRAY_BUFFER, 0);
150 glGenVertexArrays(1, &
vao);
151 glBindVertexArray(
vao);
152 glBindBuffer(GL_ARRAY_BUFFER,
vbo);
154 glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
156 glEnableVertexAttribArray(0);
157 glBindVertexArray(0);
158 glDisableVertexAttribArray(0);
159 glBindBuffer(GL_ARRAY_BUFFER, 0);
166 uniform sampler2D u_tex;
170 layout(location = 0) in vec2 a_position;
172 flat out vec4 v2g_color;
173 flat out
int v2g_layer;
177 vec4 data = texelFetch(u_tex, ivec2(a_position), 0);
180 vec2 coord = vec2(a_position) / vec2(textureSize(u_tex, 0) - ivec2(1));
181 coord = coord * 2.0 - vec2(1.0);
183 v2g_color = vec4(data.xyz, 1.0);
184 v2g_layer = int(floor(dot(data.xyz, vec3(1.0)) *
mul_E));
186 gl_Position = vec4(coord, 0.0, 1.0);
193 layout(points, max_vertices = 1) out;
195 flat in vec4 v2g_color[1];
196 flat in
int v2g_layer[1];
197 flat out vec4 g2f_color;
200 g2f_color = v2g_color[0];
201 gl_Layer = v2g_layer[0];
204 gl_Position = gl_in[0].gl_Position;
212 flat in vec4 g2f_color;
213 layout(location = 0) out vec4 f_color;
236 printf(
"Rate S: %f Rate R: %f Mul E: %f\n",
s_S,
s_R,
mul_E);
248 if(imgIn.size() < 1 && imgIn[0] == NULL) {
252 int width, height, range;
253 width = int(ceilf(
float(imgIn[0]->width) *
s_S));
254 height = int(ceilf(
float(imgIn[0]->height) *
s_S));
255 range = int(ceilf(
s_R));
258 imgOut =
new ImageGL(range + 1, width + 1, height + 1,
259 imgIn[0]->channels + 1,
IMG_GPU, GL_TEXTURE_3D);
270 glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
273 glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
274 glClear(GL_COLOR_BUFFER_BIT);
276 glViewport(0, 0, (GLsizei)width, (GLsizei)height);
282 glActiveTexture(GL_TEXTURE0);
283 imgIn[0]->bindTexture();
286 glBlendFunc(GL_ONE, GL_ONE);
288 glBindVertexArray(
vao);
290 glBindVertexArray(0);
301 glActiveTexture(GL_TEXTURE0);
302 imgIn[0]->unBindTexture();
The FilterGLScatter class implement the bilateral grid approximation of the bilateral filter...
Definition: filter_scatter.hpp:32
TechniqueGL technique
Definition: display.hpp:45
The Fbo class.
Definition: display.hpp:32
float s_R
Definition: filter_scatter.hpp:57
bool create(int width, int height, bool bDepth)
create
Definition: display.hpp:207
void bind()
bind
Definition: display.hpp:189
float mul_E
Definition: filter_scatter.hpp:57
#define MAKE_STRING(input_string)
ImageGL * Process(ImageGLVec imgIn, ImageGL *imgOut)
Process.
void releaseAux()
releaseAux
Definition: filter_scatter.hpp:75
FilterGLScatter(float s_S, float s_R, int width, int height)
FilterGLScatter.
T * delete_vec_s(T *data)
delete_vec_s
Definition: std_util.hpp:138
void initShaders()
initShaders
The ImageGL class.
Definition: image.hpp:42
GLuint getTexture() const
getTexture
Definition: display.hpp:369
GLuint vao
Definition: filter_scatter.hpp:38
void setUniform1f(const char *name_uniform, float value0)
SetUniform1f.
Definition: display.hpp:247
void generateVertexArray(int width, int height)
generateVertexArray
Fbo * fbo
Definition: display.hpp:39
void bind()
bind
Definition: display.hpp:427
The FilterGL class.
Definition: filter.hpp:35
#define PIC_INLINE
Definition: base.hpp:33
The ImageGL class.
Definition: display.hpp:42
bool initStandard(std::string version_number, std::string vertex_shader_source, std::string fragment_shader_source, std::string name)
initStandard
Definition: display.hpp:114
GLfloat * vertex_array
Definition: filter_scatter.hpp:36
float s_S
Definition: filter_scatter.hpp:57
int nVertex_array
Definition: filter_scatter.hpp:37
void FragmentShader()
FragmentShader.
void unbind()
unbind
Definition: display.hpp:197
std::string vertex_source
Definition: display.hpp:57
Definition: bilateral_separation.hpp:25
void unbind()
unbind
Definition: display.hpp:442
std::vector< ImageGL * > ImageGLVec
ImageGLVec an std::vector of pic::ImageGL.
Definition: display.hpp:32
std::string geometry_source
Definition: display.hpp:57
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 release()
release
Definition: display.hpp:85
void setUniform1i(const char *name_uniform, int value0)
SetUniform.
Definition: display.hpp:236
void update(float s_S, float s_R)
update
GLuint vbo
Definition: filter_scatter.hpp:38