Merge branch 'blender-v3.0-release'
[blender.git] / source / blender / compositor / COM_defines.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * Copyright 2011, Blender Foundation.
17  */
18
19 #pragma once
20
21 #include "BLI_float2.hh"
22
23 #include "DNA_vec_types.h"
24
25 namespace blender::compositor {
26
27 using Size2f = float2;
28
29 enum class eExecutionModel {
30   /**
31    * Operations are executed from outputs to inputs grouped in execution groups and rendered
32    * in tiles.
33    */
34   Tiled,
35   /** Operations are fully rendered in order from inputs to outputs. */
36   FullFrame
37 };
38
39 enum class eDimension { X, Y };
40
41 /**
42  * \brief possible data types for sockets
43  * \ingroup Model
44  */
45 enum class DataType {
46   /** \brief Value data type */
47   Value = 0,
48   /** \brief Vector data type */
49   Vector = 1,
50   /** \brief Color data type */
51   Color = 2,
52 };
53
54 /**
55  * Utility to get the number of channels of the given data type.
56  */
57 constexpr int COM_data_type_num_channels(const DataType datatype)
58 {
59   switch (datatype) {
60     case DataType::Value:
61       return 1;
62     case DataType::Vector:
63       return 3;
64     case DataType::Color:
65     default:
66       return 4;
67   }
68 }
69
70 constexpr int COM_data_type_bytes_len(DataType data_type)
71 {
72   return COM_data_type_num_channels(data_type) * sizeof(float);
73 }
74
75 constexpr int COM_DATA_TYPE_VALUE_CHANNELS = COM_data_type_num_channels(DataType::Value);
76 constexpr int COM_DATA_TYPE_VECTOR_CHANNELS = COM_data_type_num_channels(DataType::Vector);
77 constexpr int COM_DATA_TYPE_COLOR_CHANNELS = COM_data_type_num_channels(DataType::Color);
78
79 constexpr float COM_COLOR_TRANSPARENT[4] = {0.0f, 0.0f, 0.0f, 0.0f};
80 constexpr float COM_VECTOR_ZERO[3] = {0.0f, 0.0f, 0.0f};
81 constexpr float COM_COLOR_BLACK[4] = {0.0f, 0.0f, 0.0f, 1.0f};
82 constexpr float COM_VALUE_ZERO[1] = {0.0f};
83 constexpr float COM_VALUE_ONE[1] = {1.0f};
84
85 /**
86  * Utility to get data type for given number of channels.
87  */
88 constexpr DataType COM_num_channels_data_type(const int num_channels)
89 {
90   switch (num_channels) {
91     case 1:
92       return DataType::Value;
93     case 3:
94       return DataType::Vector;
95     case 4:
96     default:
97       return DataType::Color;
98   }
99 }
100
101 /* Configurable items.
102  *
103  * Chunk size determination.
104  *
105  * Chunk order. */
106 /**
107  * \brief The order of chunks to be scheduled
108  * \ingroup Execution
109  */
110 enum class ChunkOrdering {
111   /** \brief order from a distance to centerX/centerY */
112   CenterOut = 0,
113   /** \brief order randomly */
114   Random = 1,
115   /** \brief no ordering */
116   TopDown = 2,
117   /** \brief experimental ordering with 9 hot-spots. */
118   RuleOfThirds = 3,
119
120   Default = ChunkOrdering::CenterOut,
121 };
122
123 constexpr float COM_PREVIEW_SIZE = 140.f;
124 constexpr float COM_RULE_OF_THIRDS_DIVIDER = 100.0f;
125 constexpr float COM_BLUR_BOKEH_PIXELS = 512;
126
127 constexpr rcti COM_AREA_NONE = {0, 0, 0, 0};
128 constexpr rcti COM_CONSTANT_INPUT_AREA_OF_INTEREST = COM_AREA_NONE;
129
130 }  // namespace blender::compositor