[Bf-blender-cvs] [863460e5a5c] master: Compositor: Full frame previews

Manuel Castilla noreply at git.blender.org
Sat Sep 11 18:07:21 CEST 2021


Commit: 863460e5a5cb196a8c6ca1050a2dbc1efd7957e0
Author: Manuel Castilla
Date:   Sat Sep 11 15:12:22 2021 +0200
Branches: master
https://developer.blender.org/rB863460e5a5cb196a8c6ca1050a2dbc1efd7957e0

Compositor: Full frame previews

Adds full frame implementation to PreviewOperation.

Part of T88150.

===================================================================

M	source/blender/compositor/operations/COM_PreviewOperation.cc
M	source/blender/compositor/operations/COM_PreviewOperation.h

===================================================================

diff --git a/source/blender/compositor/operations/COM_PreviewOperation.cc b/source/blender/compositor/operations/COM_PreviewOperation.cc
index e7c11613aa3..fa8b5ffcabf 100644
--- a/source/blender/compositor/operations/COM_PreviewOperation.cc
+++ b/source/blender/compositor/operations/COM_PreviewOperation.cc
@@ -171,4 +171,43 @@ eCompositorPriority PreviewOperation::getRenderPriority() const
   return eCompositorPriority::Low;
 }
 
+void PreviewOperation::get_area_of_interest(const int input_idx,
+                                            const rcti &output_area,
+                                            rcti &r_input_area)
+{
+  BLI_assert(input_idx == 0);
+  UNUSED_VARS_NDEBUG(input_idx);
+
+  r_input_area.xmin = output_area.xmin / m_divider;
+  r_input_area.xmax = output_area.xmax / m_divider;
+  r_input_area.ymin = output_area.ymin / m_divider;
+  r_input_area.ymax = output_area.ymax / m_divider;
+}
+
+void PreviewOperation::update_memory_buffer_partial(MemoryBuffer *UNUSED(output),
+                                                    const rcti &area,
+                                                    Span<MemoryBuffer *> inputs)
+{
+  MemoryBuffer *input = inputs[0];
+  struct ColormanageProcessor *cm_processor = IMB_colormanagement_display_processor_new(
+      m_viewSettings, m_displaySettings);
+
+  rcti buffer_area;
+  BLI_rcti_init(&buffer_area, 0, this->getWidth(), 0, this->getHeight());
+  BuffersIteratorBuilder<uchar> it_builder(
+      m_outputBuffer, buffer_area, area, COM_data_type_num_channels(DataType::Color));
+
+  for (BuffersIterator<uchar> it = it_builder.build(); !it.is_end(); ++it) {
+    const float rx = it.x / m_divider;
+    const float ry = it.y / m_divider;
+
+    float color[4];
+    input->read_elem_checked(rx, ry, color);
+    IMB_colormanagement_processor_apply_v4(cm_processor, color);
+    rgba_float_to_uchar(it.out, color);
+  }
+
+  IMB_colormanagement_processor_free(cm_processor);
+}
+
 }  // namespace blender::compositor
diff --git a/source/blender/compositor/operations/COM_PreviewOperation.h b/source/blender/compositor/operations/COM_PreviewOperation.h
index 0f43f01c5d6..05dae9c4dd8 100644
--- a/source/blender/compositor/operations/COM_PreviewOperation.h
+++ b/source/blender/compositor/operations/COM_PreviewOperation.h
@@ -20,13 +20,13 @@
 
 #include "BKE_global.h"
 #include "BLI_rect.h"
-#include "COM_NodeOperation.h"
+#include "COM_MultiThreadedOperation.h"
 #include "DNA_color_types.h"
 #include "DNA_image_types.h"
 
 namespace blender::compositor {
 
-class PreviewOperation : public NodeOperation {
+class PreviewOperation : public MultiThreadedOperation {
  protected:
   unsigned char *m_outputBuffer;
 
@@ -63,6 +63,11 @@ class PreviewOperation : public NodeOperation {
   bool determineDependingAreaOfInterest(rcti *input,
                                         ReadBufferOperation *readOperation,
                                         rcti *output) override;
+
+  void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) override;
+  void update_memory_buffer_partial(MemoryBuffer *output,
+                                    const rcti &area,
+                                    Span<MemoryBuffer *> inputs) override;
 };
 
 }  // namespace blender::compositor



More information about the Bf-blender-cvs mailing list