Blender V4.3
extract_alpha.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#include "BLI_index_range.hh"
6#include "BLI_task.hh"
7
8#include "GPU_shader.hh"
9
10#include "COM_context.hh"
11#include "COM_result.hh"
12#include "COM_utilities.hh"
13
15
17
18static void extract_alpha_gpu(Context &context, Result &input, Result &output)
19{
20 GPUShader *shader = context.get_shader("compositor_convert_color_to_alpha");
21 GPU_shader_bind(shader);
22
23 input.bind_as_texture(shader, "input_tx");
24
25 output.allocate_texture(input.domain());
26 output.bind_as_image(shader, "output_img");
27
28 compute_dispatch_threads_at_least(shader, input.domain().size);
29
31 input.unbind_as_texture();
32 output.unbind_as_image();
33}
34
35static void extract_alpha_cpu(Result &input, Result &output)
36{
37 output.allocate_texture(input.domain());
38 parallel_for(input.domain().size, [&](const int2 texel) {
39 output.store_pixel(texel, float4(input.load_pixel(texel).w));
40 });
41}
42
43void extract_alpha(Context &context, Result &input, Result &output)
44{
45 if (context.use_gpu()) {
46 extract_alpha_gpu(context, input, output);
47 }
48 else {
49 extract_alpha_cpu(input, output);
50 }
51}
52
53} // namespace blender::realtime_compositor
void GPU_shader_bind(GPUShader *shader)
void GPU_shader_unbind()
struct GPUShader GPUShader
static void extract_alpha_cpu(Result &input, Result &output)
void parallel_for(const int2 range, FunctionRef< void(int2)> function)
Definition utilities.cc:252
static void extract_alpha_gpu(Context &context, Result &input, Result &output)
void extract_alpha(Context &context, Result &input, Result &output)
void compute_dispatch_threads_at_least(GPUShader *shader, int2 threads_range, int2 local_size=int2(16))
Definition utilities.cc:131