Blender  V3.3
COM_SharedOperationBuffers.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2021 Blender Foundation. */
3 
4 #pragma once
5 
6 #include "BLI_map.hh"
7 #include "BLI_vector.hh"
8 
9 #include "DNA_vec_types.h"
10 
11 #ifdef WITH_CXX_GUARDEDALLOC
12 # include "MEM_guardedalloc.h"
13 #endif
14 
15 namespace blender::compositor {
16 
17 class MemoryBuffer;
18 class NodeOperation;
19 
25  private:
26  typedef struct BufferData {
27  public:
28  BufferData();
29  std::unique_ptr<MemoryBuffer> buffer;
30  blender::Vector<rcti> render_areas;
31  int registered_reads;
32  int received_reads;
33  bool is_rendered;
34  } BufferData;
36 
37  public:
41  bool is_area_registered(NodeOperation *op, const rcti &area_to_render);
45  void register_area(NodeOperation *op, const rcti &area_to_render);
46 
55  void register_read(NodeOperation *read_op);
56 
60  Vector<rcti> get_areas_to_render(NodeOperation *op, int offset_x, int offset_y);
68  void set_rendered_buffer(NodeOperation *op, std::unique_ptr<MemoryBuffer> buffer);
73 
78  void read_finished(NodeOperation *read_op);
79 
80  private:
81  BufferData &get_buffer_data(NodeOperation *op);
82 
83 #ifdef WITH_CXX_GUARDEDALLOC
84  MEM_CXX_CLASS_ALLOC_FUNCS("COM:SharedOperationBuffers")
85 #endif
86 };
87 
88 } // namespace blender::compositor
Read Guarded memory(de)allocation.
a MemoryBuffer contains access to the data of a chunk
NodeOperation contains calculation logic.
void set_rendered_buffer(NodeOperation *op, std::unique_ptr< MemoryBuffer > buffer)
Vector< rcti > get_areas_to_render(NodeOperation *op, int offset_x, int offset_y)
bool is_area_registered(NodeOperation *op, const rcti &area_to_render)
MemoryBuffer * get_rendered_buffer(NodeOperation *op)
void register_area(NodeOperation *op, const rcti &area_to_render)
ccl_global float * buffer