18 #ifndef PIC_GL_FILTERING_FILTER_CONV_2D_HPP 19 #define PIC_GL_FILTERING_FILTER_CONV_2D_HPP 21 #include "../../base.hpp" 23 #include "../../gl/filtering/filter.hpp" 64 if(
target == GL_TEXTURE_3D ||
target == GL_TEXTURE_2D_ARRAY) {
91 uniform sampler2D u_tex;
92 uniform sampler2D u_weights;
96 ivec2 kernelSize = textureSize(u_weights, 0);
97 ivec2 halfKernelSize = kernelSize >> 1;
99 ivec2 shift = ivec2(halfKernelSize.x, halfKernelSize.y);
100 ivec2 coordsFrag = ivec2(gl_FragCoord.xy) - shift;
102 vec4 color = vec4(0.0);
104 for(
int i = 0; i < kernelSize.y; i++) {
106 for(
int j = 0; j < kernelSize.x; j++) {
108 vec4 tmpCol = texelFetch(u_tex, coordsFrag.xy + ivec2(j, i), 0);
111 color += tmpCol * texelFetch(u_weights, ivec2(j, i), 0);
120 case GL_TEXTURE_2D: {
125 case GL_TEXTURE_3D: {
TechniqueGL technique
Definition: display.hpp:45
void FragmentShader()
FragmentShader.
void bind()
bind
Definition: display.hpp:189
#define MAKE_STRING(input_string)
void initShaders()
initShaders
GLenum target
Definition: filter_conv_2d.hpp:34
The FilterGLConv2D class.
Definition: filter_conv_2d.hpp:30
The FilterGL class.
Definition: filter.hpp:35
void setUniform()
setUniform
Definition: filter_conv_2d.hpp:58
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
FilterGLConv2D(GLenum target)
FilterGLConv2D.
void unbind()
unbind
Definition: display.hpp:197
std::string vertex_source
Definition: display.hpp:57
Definition: bilateral_separation.hpp:25
std::string fragment_source
Definition: display.hpp:57
void setUniform1i(const char *name_uniform, int value0)
SetUniform.
Definition: display.hpp:236