Files
test/source/blender/compositor/algorithms/intern/extract_alpha.cc

51 lines
1.2 KiB
C++

/* SPDX-FileCopyrightText: 2024 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#include "GPU_shader.hh"
#include "COM_context.hh"
#include "COM_result.hh"
#include "COM_utilities.hh"
#include "COM_algorithm_extract_alpha.hh"
namespace blender::compositor {
static void extract_alpha_gpu(Context &context, Result &input, Result &output)
{
GPUShader *shader = context.get_shader("compositor_convert_color_to_alpha");
GPU_shader_bind(shader);
input.bind_as_texture(shader, "input_tx");
output.allocate_texture(input.domain());
output.bind_as_image(shader, "output_img");
compute_dispatch_threads_at_least(shader, input.domain().size);
GPU_shader_unbind();
input.unbind_as_texture();
output.unbind_as_image();
}
static void extract_alpha_cpu(Result &input, Result &output)
{
output.allocate_texture(input.domain());
parallel_for(input.domain().size, [&](const int2 texel) {
output.store_pixel(texel, input.load_pixel<float4>(texel).w);
});
}
void extract_alpha(Context &context, Result &input, Result &output)
{
if (context.use_gpu()) {
extract_alpha_gpu(context, input, output);
}
else {
extract_alpha_cpu(input, output);
}
}
} // namespace blender::compositor