Fix for #34739 and #35060, avoid ambiguity in compositor viewer nodes.
[blender.git] / source / blender / compositor / intern / COM_CompositorContext.h
1 /*
2  * Copyright 2011, Blender Foundation.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * Contributor: 
19  *              Jeroen Bakker 
20  *              Monique Dewanchand
21  */
22
23 #ifndef _COM_CompositorContext_h
24 #define _COM_CompositorContext_h
25
26 #include <vector>
27 #include "BKE_text.h"
28 #include <string>
29 #include "DNA_node_types.h"
30 #include "DNA_color_types.h"
31 #include "BLI_rect.h"
32 #include "DNA_scene_types.h"
33 #include "COM_defines.h"
34
35 /**
36  * @brief Overall context of the compositor
37  */
38 class CompositorContext {
39 private:
40         /**
41          * @brief The rendering field describes if we are rendering (F12) or if we are editing (Node editor)
42          * This field is initialized in ExecutionSystem and must only be read from that point on.
43          * @see ExecutionSystem
44          */
45         bool m_rendering;
46
47         /**
48          * @brief The quality of the composite.
49          * This field is initialized in ExecutionSystem and must only be read from that point on.
50          * @see ExecutionSystem
51          */
52         CompositorQuality m_quality;
53
54         /**
55          * @brief Reference to the render data that is being composited.
56          * This field is initialized in ExecutionSystem and must only be read from that point on.
57          * @see ExecutionSystem
58          */
59         RenderData *m_rd;
60
61         /**
62          * @brief reference to the bNodeTree
63          * This field is initialized in ExecutionSystem and must only be read from that point on.
64          * @see ExecutionSystem
65          */
66         bNodeTree *m_bnodetree;
67
68         /**
69          * @brief Preview image hash table
70          * This field is initialized in ExecutionSystem and must only be read from that point on.
71          */
72         bNodeInstanceHash *m_previews;
73
74         /**
75          * @brief does this system have active opencl devices?
76          */
77         bool m_hasActiveOpenCLDevices;
78
79         /**
80          * @brief Skip slow nodes
81          */
82         bool m_fastCalculation;
83
84         /* @brief color management settings */
85         const ColorManagedViewSettings *m_viewSettings;
86         const ColorManagedDisplaySettings *m_displaySettings;
87
88 public:
89         /**
90          * @brief constructor initializes the context with default values.
91          */
92         CompositorContext();
93
94         /**
95          * @brief set the rendering field of the context
96          */
97         void setRendering(bool rendering) { this->m_rendering = rendering; }
98
99         /**
100          * @brief get the rendering field of the context
101          */
102         bool isRendering() const { return this->m_rendering; }
103
104         /**
105          * @brief set the scene of the context
106          */
107         void setRenderData(RenderData *rd) { this->m_rd = rd; }
108
109         /**
110          * @brief set the bnodetree of the context
111          */
112         void setbNodeTree(bNodeTree *bnodetree) { this->m_bnodetree = bnodetree; }
113
114         /**
115          * @brief get the bnodetree of the context
116          */
117         const bNodeTree *getbNodeTree() const { return this->m_bnodetree; }
118
119         /**
120          * @brief get the scene of the context
121          */
122         const RenderData *getRenderData() const { return this->m_rd; }
123
124         /**
125          * @brief set the preview image hash table
126          */
127         void setPreviewHash(bNodeInstanceHash *previews) { this->m_previews = previews; }
128
129         /**
130          * @brief get the preview image hash table
131          */
132         bNodeInstanceHash *getPreviewHash() const { return this->m_previews; }
133
134         /**
135          * @brief set view settings of color color management
136          */
137         void setViewSettings(const ColorManagedViewSettings *viewSettings) { this->m_viewSettings = viewSettings; }
138
139         /**
140          * @brief get view settings of color color management
141          */
142         const ColorManagedViewSettings *getViewSettings() const { return this->m_viewSettings; }
143
144         /**
145          * @brief set display settings of color color management
146          */
147         void setDisplaySettings(const ColorManagedDisplaySettings *displaySettings) { this->m_displaySettings = displaySettings; }
148
149         /**
150          * @brief get display settings of color color management
151          */
152         const ColorManagedDisplaySettings *getDisplaySettings() const { return this->m_displaySettings; }
153
154         /**
155          * @brief set the quality
156          */
157         void setQuality(CompositorQuality quality) { this->m_quality = quality; }
158
159         /**
160          * @brief get the quality
161          */
162         const CompositorQuality getQuality() const { return this->m_quality; }
163
164         /**
165          * @brief get the current framenumber of the scene in this context
166          */
167         const int getFramenumber() const;
168
169         /**
170          * @brief has this system active openclDevices?
171          */
172         const bool getHasActiveOpenCLDevices() const { return this->m_hasActiveOpenCLDevices; }
173
174         /**
175          * @brief set has this system active openclDevices?
176          */
177         void setHasActiveOpenCLDevices(bool hasAvtiveOpenCLDevices) { this->m_hasActiveOpenCLDevices = hasAvtiveOpenCLDevices; }
178         
179         int getChunksize() { return this->getbNodeTree()->chunksize; }
180         
181         void setFastCalculation(bool fastCalculation) {this->m_fastCalculation = fastCalculation;}
182         bool isFastCalculation() {return this->m_fastCalculation;}
183         inline bool isGroupnodeBufferEnabled() {return this->getbNodeTree()->flag & NTREE_COM_GROUPNODE_BUFFER;}
184 };
185
186
187 #endif