33 Result &first_causal_input,
34 Result &first_non_causal_input,
35 Result &second_causal_input,
36 Result &second_non_causal_input,
39 GPUShader *shader = context.get_shader(
"compositor_van_vliet_gaussian_blur_sum");
43 first_non_causal_input.
bind_as_texture(shader,
"first_non_causal_input_tx");
45 second_non_causal_input.
bind_as_texture(shader,
"second_non_causal_input_tx");
48 const int2 transposed_domain =
int2(domain.size.y, domain.size.x);
49 output.allocate_texture(transposed_domain);
50 output.bind_as_image(shader,
"output_img");
59 output.unbind_as_image();
64 GPUShader *shader = context.get_shader(
"compositor_van_vliet_gaussian_blur");
68 context.cache_manager().van_vliet_gaussian_coefficients.get(context, sigma);
73 "first_causal_feedforward_coefficients",
76 "first_non_causal_feedforward_coefficients",
81 "second_causal_feedforward_coefficients",
84 "second_non_causal_feedforward_coefficients",
87 "first_causal_boundary_coefficient",
90 "first_non_causal_boundary_coefficient",
93 "second_causal_boundary_coefficient",
96 "second_non_causal_boundary_coefficient",
99 input.bind_as_texture(shader,
"input_tx");
101 const Domain domain = input.domain();
105 first_causal_result.
bind_as_image(shader,
"first_causal_output_img");
109 first_non_causal_result.
bind_as_image(shader,
"first_non_causal_output_img");
113 second_causal_result.
bind_as_image(shader,
"second_causal_output_img");
117 second_non_causal_result.
bind_as_image(shader,
"second_non_causal_output_img");
125 input.unbind_as_texture();
133 first_non_causal_result,
134 second_causal_result,
135 second_non_causal_result,
138 first_non_causal_result.
release();
139 second_causal_result.
release();
140 second_non_causal_result.
release();
146 "Van Vliet filter is less accurate for sigma values less than 32. Use Deriche "
147 "filter instead or direct convolution instead.");
150 blur_pass(context, input, horizontal_pass_result, sigma.x);
151 blur_pass(context, horizontal_pass_result, output, sigma.y);
152 horizontal_pass_result.
release();
#define BLI_assert_msg(a, msg)
void GPU_shader_uniform_2fv(GPUShader *sh, const char *name, const float data[2])
void GPU_shader_uniform_1f(GPUShader *sh, const char *name, float value)
void GPU_shader_bind(GPUShader *shader)
struct GPUShader GPUShader
void bind_as_image(GPUShader *shader, const char *image_name, bool read=false) const
void unbind_as_texture() const
const Domain & domain() const
void unbind_as_image() const
void allocate_texture(Domain domain, bool from_pool=true)
void bind_as_texture(GPUShader *shader, const char *texture_name) const
double first_causal_boundary_coefficient() const
double first_non_causal_boundary_coefficient() const
const double2 & first_causal_feedforward_coefficients() const
double second_non_causal_boundary_coefficient() const
double second_causal_boundary_coefficient() const
const double2 & second_non_causal_feedforward_coefficients() const
const double2 & second_feedback_coefficients() const
const double2 & second_causal_feedforward_coefficients() const
const double2 & first_feedback_coefficients() const
const double2 & first_non_causal_feedforward_coefficients() const
T reduce_max(const VecBase< T, Size > &a)
static void blur_pass(Context &context, Result &input, Result &output, float sigma)
void van_vliet_gaussian_blur(Context &context, Result &input, Result &output, float2 sigma)
static void sum_causal_and_non_causal_results(Context &context, Result &causal_input, Result &non_causal_input, Result &output)
void compute_dispatch_threads_at_least(GPUShader *shader, int2 threads_range, int2 local_size=int2(16))
VecBase< int32_t, 2 > int2
VecBase< float, 2 > float2