9 SharedOperationBuffers::BufferData::BufferData()
10 :
buffer(nullptr), registered_reads(0), received_reads(0), is_rendered(false)
14 SharedOperationBuffers::BufferData &SharedOperationBuffers::get_buffer_data(NodeOperation *op)
16 return buffers_.lookup_or_add_cb(op, []() {
return BufferData(); });
19 bool SharedOperationBuffers::is_area_registered(
NodeOperation *op,
const rcti &area_to_render)
24 BufferData &buf_data = get_buffer_data(op);
25 for (
rcti ®_rect : buf_data.render_areas) {
35 get_buffer_data(op).render_areas.append(area_to_render);
40 return get_buffer_data(op).registered_reads > 0;
45 get_buffer_data(read_op).registered_reads++;
52 Span<rcti> render_areas = get_buffer_data(op).render_areas.as_span();
54 for (
rcti dst : render_areas) {
56 dst_areas.
append(std::move(dst));
63 return get_buffer_data(op).is_rendered;
67 std::unique_ptr<MemoryBuffer>
buffer)
69 BufferData &buf_data = get_buffer_data(op);
72 buf_data.buffer = std::move(
buffer);
73 buf_data.is_rendered =
true;
79 return get_buffer_data(op).buffer.get();
84 BufferData &buf_data = get_buffer_data(read_op);
85 buf_data.received_reads++;
86 BLI_assert(buf_data.received_reads > 0 && buf_data.received_reads <= buf_data.registered_reads);
87 if (buf_data.received_reads == buf_data.registered_reads) {
89 buf_data.buffer =
nullptr;
void BLI_rcti_translate(struct rcti *rect, int x, int y)
bool BLI_rcti_inside_rcti(const rcti *rct_a, const rcti *rct_b)
void append(const T &value)
a MemoryBuffer contains access to the data of a chunk
NodeOperation contains calculation logic.
ccl_global float * buffer