Changeset View
Changeset View
Standalone View
Standalone View
source/blender/compositor/intern/COM_SharedOperationBuffers.cc
| Show All 17 Lines | |||||
| #include "COM_SharedOperationBuffers.h" | #include "COM_SharedOperationBuffers.h" | ||||
| #include "BLI_rect.h" | #include "BLI_rect.h" | ||||
| #include "COM_NodeOperation.h" | #include "COM_NodeOperation.h" | ||||
| namespace blender::compositor { | namespace blender::compositor { | ||||
| SharedOperationBuffers::BufferData::BufferData() | SharedOperationBuffers::BufferData::BufferData() | ||||
| : buffer(nullptr), registered_reads(0), received_reads(0) | : buffer(nullptr), registered_reads(0), received_reads(0), is_rendered(false) | ||||
| { | { | ||||
| } | } | ||||
| SharedOperationBuffers::BufferData &SharedOperationBuffers::get_buffer_data(NodeOperation *op) | SharedOperationBuffers::BufferData &SharedOperationBuffers::get_buffer_data(NodeOperation *op) | ||||
| { | { | ||||
| return buffers_.lookup_or_add_cb(op, []() { return BufferData(); }); | return buffers_.lookup_or_add_cb(op, []() { return BufferData(); }); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | blender::Span<rcti> SharedOperationBuffers::get_areas_to_render(NodeOperation *op) | ||||
| return get_buffer_data(op).render_areas.as_span(); | return get_buffer_data(op).render_areas.as_span(); | ||||
| } | } | ||||
| /** | /** | ||||
| * Whether this operation buffer has already been rendered. | * Whether this operation buffer has already been rendered. | ||||
| */ | */ | ||||
| bool SharedOperationBuffers::is_operation_rendered(NodeOperation *op) | bool SharedOperationBuffers::is_operation_rendered(NodeOperation *op) | ||||
| { | { | ||||
| return get_buffer_data(op).buffer != nullptr; | return get_buffer_data(op).is_rendered; | ||||
| } | } | ||||
| /** | /** | ||||
| * Stores given operation rendered buffer. | * Stores given operation rendered buffer. | ||||
| */ | */ | ||||
| void SharedOperationBuffers::set_rendered_buffer(NodeOperation *op, | void SharedOperationBuffers::set_rendered_buffer(NodeOperation *op, | ||||
| std::unique_ptr<MemoryBuffer> buffer) | std::unique_ptr<MemoryBuffer> buffer) | ||||
| { | { | ||||
| BufferData &buf_data = get_buffer_data(op); | BufferData &buf_data = get_buffer_data(op); | ||||
| BLI_assert(buf_data.received_reads == 0); | BLI_assert(buf_data.received_reads == 0); | ||||
| BLI_assert(buf_data.buffer == nullptr); | BLI_assert(buf_data.buffer == nullptr); | ||||
| buf_data.buffer = std::move(buffer); | buf_data.buffer = std::move(buffer); | ||||
| buf_data.is_rendered = true; | |||||
| } | } | ||||
| /** | /** | ||||
| * Get given operation rendered buffer. | * Get given operation rendered buffer. | ||||
| */ | */ | ||||
| MemoryBuffer *SharedOperationBuffers::get_rendered_buffer(NodeOperation *op) | MemoryBuffer *SharedOperationBuffers::get_rendered_buffer(NodeOperation *op) | ||||
| { | { | ||||
| BLI_assert(is_operation_rendered(op)); | BLI_assert(is_operation_rendered(op)); | ||||
| Show All 19 Lines | |||||