24 return "compositor_morphological_blur_dilate";
26 return "compositor_morphological_blur_erode";
41 input.bind_as_texture(shader,
"input_tx");
43 blurred_input.
bind_as_image(shader,
"blurred_input_img",
true);
49 input.unbind_as_texture();
61 float input_value = input.load_pixel<float>(texel);
62 float blurred_value = blurred_input.load_pixel<float>(texel);
63 blurred_input.store_pixel(texel, math::max(input_value, blurred_value));
68 float input_value = input.load_pixel<float>(texel);
69 float blurred_value = blurred_input.load_pixel<float>(texel);
70 blurred_input.store_pixel(texel, math::min(input_value, blurred_value));
83 if (context.use_gpu()) {
96 const int filter_type)
#define BLI_assert_unreachable()
void GPU_shader_bind(blender::gpu::Shader *shader, const blender::gpu::shader::SpecializationConstants *constants_state=nullptr)
void unbind_as_image() const
void bind_as_image(gpu::Shader *shader, const char *image_name, bool read=false) const
void symmetric_separable_blur(Context &context, const Result &input, Result &output, const float2 &radius, const int filter_type=R_FILTER_GAUSS)
void compute_dispatch_threads_at_least(gpu::Shader *shader, int2 threads_range, int2 local_size=int2(16))
static void apply_morphological_operator_gpu(Context &context, const Result &input, Result &blurred_input, const MorphologicalBlurOperation operation)
static void apply_morphological_operator(Context &context, const Result &input, Result &blurred_input, const MorphologicalBlurOperation operation)
void morphological_blur(Context &context, const Result &input, Result &output, const float2 &radius, const MorphologicalBlurOperation operation=MorphologicalBlurOperation::Erode, const int filter_type=R_FILTER_GAUSS)
MorphologicalBlurOperation
static const char * get_shader(MorphologicalBlurOperation operation)
static void apply_morphological_operator_cpu(const Result &input, Result &blurred_input, const MorphologicalBlurOperation operation)
void parallel_for(const int2 range, const Function &function)
VecBase< int32_t, 2 > int2
VecBase< float, 2 > float2