Blender V4.3
COM_ImageOperation.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
6
7#include "BKE_scene.hh"
8
10#include "IMB_interp.hh"
11
12namespace blender::compositor {
13
15{
16 image_ = nullptr;
17 buffer_ = nullptr;
18 image_user_ = {};
19 imagewidth_ = 0;
20 imageheight_ = 0;
21 framenumber_ = 0;
23 rd_ = nullptr;
24 view_name_ = nullptr;
25}
34
36{
37 if (rd_ == nullptr || image_ == nullptr) {
38 return nullptr;
39 }
40
42 if (ibuf == nullptr || (ibuf->byte_buffer.data == nullptr && ibuf->float_buffer.data == nullptr))
43 {
44 BKE_image_release_ibuf(image_, ibuf, nullptr);
45 return nullptr;
46 }
47 return ibuf;
48}
49
51{
52 ImBuf *stackbuf = get_im_buf();
53 buffer_ = stackbuf;
54 if (stackbuf) {
55 imagewidth_ = stackbuf->x;
56 imageheight_ = stackbuf->y;
57 number_of_channels_ = stackbuf->channels;
58 }
59}
60
65
66void BaseImageOperation::determine_canvas(const rcti & /*preferred_area*/, rcti &r_area)
67{
68 ImBuf *stackbuf = get_im_buf();
69
70 r_area = COM_AREA_NONE;
71
72 if (stackbuf) {
73 BLI_rcti_init(&r_area, 0, stackbuf->x, 0, stackbuf->y);
74 }
75
76 BKE_image_release_ibuf(image_, stackbuf, nullptr);
77}
78
80 const rcti &area,
81 Span<MemoryBuffer *> /*inputs*/)
82{
83 const bool ensure_premultiplied = !ELEM(
85 if (buffer_) {
86 output->copy_from(buffer_, area, ensure_premultiplied, true);
87 }
88 else {
89 output->fill(area, COM_COLOR_TRANSPARENT);
90 }
91}
92
94 const rcti &area,
95 Span<MemoryBuffer *> /*inputs*/)
96{
97 if (buffer_) {
98 output->copy_from(buffer_, area, 3, COM_DATA_TYPE_VALUE_CHANNELS, 0);
99 }
100 else {
101 output->fill(area, COM_VALUE_ZERO);
102 }
103}
104
105} // namespace blender::compositor
ImBuf * BKE_image_acquire_multilayer_view_ibuf(const RenderData &render_data, Image &image, const ImageUser &image_user, const char *pass_name, const char *view_name)
void BKE_image_release_ibuf(Image *ima, ImBuf *ibuf, void *lock)
void BLI_rcti_init(struct rcti *rect, int xmin, int xmax, int ymin, int ymax)
Definition rct.c:418
#define ELEM(...)
@ IMA_ALPHA_IGNORE
@ IMA_ALPHA_CHANNEL_PACKED
Base class for all image operations.
void determine_canvas(const rcti &preferred_area, rcti &r_area) override
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
a MemoryBuffer contains access to the data
void add_output_socket(DataType datatype)
constexpr int COM_DATA_TYPE_VALUE_CHANNELS
Definition COM_defines.h:55
constexpr float COM_VALUE_ZERO[1]
Definition COM_defines.h:64
constexpr rcti COM_AREA_NONE
Definition COM_defines.h:89
constexpr float COM_COLOR_TRANSPARENT[4]
Definition COM_defines.h:60
ImBufFloatBuffer float_buffer
ImBufByteBuffer byte_buffer
char alpha_mode