diff options
author | Manuel Castilla <manzanillawork@gmail.com> | 2021-07-22 22:55:42 +0300 |
---|---|---|
committer | Manuel Castilla <manzanillawork@gmail.com> | 2021-07-22 22:55:42 +0300 |
commit | 585a891ab2e73c45a7225fa854cf92c559c897fb (patch) | |
tree | 07d930f19e5eafc759ed693eb3d6fa506b3a3bdc /source/blender/compositor/intern/COM_NodeOperation.cc | |
parent | 89b5731f19cc4c5ac15950c3c2ed8c7440c3c80a (diff) | |
parent | 1a91c5732032621ff58677178a93f5e6a9d2b8f8 (diff) |
Merge branch 'master' into compositor-full-frame
Diffstat (limited to 'source/blender/compositor/intern/COM_NodeOperation.cc')
-rw-r--r-- | source/blender/compositor/intern/COM_NodeOperation.cc | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/source/blender/compositor/intern/COM_NodeOperation.cc b/source/blender/compositor/intern/COM_NodeOperation.cc index c52fca81b12..43710e62496 100644 --- a/source/blender/compositor/intern/COM_NodeOperation.cc +++ b/source/blender/compositor/intern/COM_NodeOperation.cc @@ -211,12 +211,12 @@ bool NodeOperation::determineDependingAreaOfInterest(rcti *input, * caller must clamp it. * TODO: See if it's possible to use parameter overloading (input_id for example). * - * \param input_op_idx: Input operation index for which we want to calculate the area being read. + * \param input_idx: Input operation index for which we want to calculate the area being read. * \param output_area: Area being rendered by this operation. * \param r_input_area: Returned input operation area that needs to be read in order to render * given output area. */ -void NodeOperation::get_area_of_interest(const int input_op_idx, +void NodeOperation::get_area_of_interest(const int input_idx, const rcti &output_area, rcti &r_input_area) { @@ -226,7 +226,7 @@ void NodeOperation::get_area_of_interest(const int input_op_idx, else { /* Non full-frame operations never implement this method. To ensure correctness assume * whole area is used. */ - NodeOperation *input_op = getInputOperation(input_op_idx); + NodeOperation *input_op = getInputOperation(input_idx); BLI_rcti_init(&r_input_area, 0, input_op->getWidth(), 0, input_op->getHeight()); } } @@ -241,7 +241,7 @@ void NodeOperation::get_area_of_interest(NodeOperation *input_op, return; } } - BLI_assert(!"input_op is not an input operation."); + BLI_assert_msg(0, "input_op is not an input operation."); } /** @@ -249,18 +249,16 @@ void NodeOperation::get_area_of_interest(NodeOperation *input_op, * \param output_buf: Buffer to write result to. * \param areas: Areas within this operation bounds to render. * \param inputs_bufs: Inputs operations buffers. - * \param exec_system: Execution system. */ void NodeOperation::render(MemoryBuffer *output_buf, Span<rcti> areas, - Span<MemoryBuffer *> inputs_bufs, - ExecutionSystem &exec_system) + Span<MemoryBuffer *> inputs_bufs) { if (get_flags().is_fullframe_operation) { - render_full_frame(output_buf, areas, inputs_bufs, exec_system); + render_full_frame(output_buf, areas, inputs_bufs); } else { - render_full_frame_fallback(output_buf, areas, inputs_bufs, exec_system); + render_full_frame_fallback(output_buf, areas, inputs_bufs); } } @@ -269,12 +267,11 @@ void NodeOperation::render(MemoryBuffer *output_buf, */ void NodeOperation::render_full_frame(MemoryBuffer *output_buf, Span<rcti> areas, - Span<MemoryBuffer *> inputs_bufs, - ExecutionSystem &exec_system) + Span<MemoryBuffer *> inputs_bufs) { initExecution(); for (const rcti &area : areas) { - update_memory_buffer(output_buf, area, inputs_bufs, exec_system); + update_memory_buffer(output_buf, area, inputs_bufs); } deinitExecution(); } @@ -284,8 +281,7 @@ void NodeOperation::render_full_frame(MemoryBuffer *output_buf, */ void NodeOperation::render_full_frame_fallback(MemoryBuffer *output_buf, Span<rcti> areas, - Span<MemoryBuffer *> inputs_bufs, - ExecutionSystem &exec_system) + Span<MemoryBuffer *> inputs_bufs) { Vector<NodeOperationOutput *> orig_input_links = replace_inputs_with_buffers(inputs_bufs); @@ -299,7 +295,7 @@ void NodeOperation::render_full_frame_fallback(MemoryBuffer *output_buf, } else { for (const rcti &rect : areas) { - exec_system.execute_work(rect, [=](const rcti &split_rect) { + exec_system_->execute_work(rect, [=](const rcti &split_rect) { rcti tile_rect = split_rect; if (is_output_operation) { executeRegion(&tile_rect, 0); @@ -353,6 +349,7 @@ Vector<NodeOperationOutput *> NodeOperation::replace_inputs_with_buffers( BufferOperation *buffer_op = new BufferOperation(inputs_bufs[i], input_socket->getDataType()); orig_links[i] = input_socket->getLink(); input_socket->setLink(buffer_op->getOutputSocket()); + buffer_op->initExecution(); } return orig_links; } @@ -362,8 +359,10 @@ void NodeOperation::remove_buffers_and_restore_original_inputs( { BLI_assert(original_inputs_links.size() == getNumberOfInputSockets()); for (int i = 0; i < original_inputs_links.size(); i++) { - BLI_assert(typeid(*getInputOperation(i)) == typeid(BufferOperation)); - + NodeOperation *buffer_op = get_input_operation(i); + BLI_assert(buffer_op != nullptr); + BLI_assert(typeid(*buffer_op) == typeid(BufferOperation)); + buffer_op->deinitExecution(); NodeOperationInput *input_socket = getInputSocket(i); delete &input_socket->getLink()->getOperation(); input_socket->setLink(original_inputs_links[i]); |