Color Management, Stage 2: Switch color pipeline to use OpenColorIO
[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 activegNode the group node that is currently being edited.
70          */
71         bNode *m_activegNode;
72
73         /**
74          * @brief does this system have active opencl devices?
75          */
76         bool m_hasActiveOpenCLDevices;
77         
78         /**
79          * @brief Skip slow nodes
80          */
81         bool m_fastCalculation;
82
83         /* @brief color management settings */
84         const ColorManagedViewSettings *m_viewSettings;
85         const ColorManagedDisplaySettings *m_displaySettings;
86 public:
87         /**
88          * @brief constructor initializes the context with default values.
89          */
90         CompositorContext();
91
92         /**
93          * @brief set the rendering field of the context
94          */
95         void setRendering(bool rendering) { this->m_rendering = rendering; }
96
97         /**
98          * @brief get the rendering field of the context
99          */
100         bool isRendering() const { return this->m_rendering; }
101
102         /**
103          * @brief set the scene of the context
104          */
105         void setRenderData(RenderData *rd) { this->m_rd = rd; }
106
107         /**
108          * @brief set the bnodetree of the context
109          */
110         void setbNodeTree(bNodeTree *bnodetree) { this->m_bnodetree = bnodetree; }
111
112         /**
113          * @brief get the bnodetree of the context
114          */
115         const bNodeTree *getbNodeTree() const { return this->m_bnodetree; }
116
117         /**
118          * @brief set the active groupnode of the context
119          */
120         void setActivegNode(bNode *gnode) { this->m_activegNode = gnode; }
121
122         /**
123          * @brief get the active groupnode of the context
124          */
125         const bNode *getActivegNode() const { return this->m_activegNode; }
126
127         /**
128          * @brief get the scene of the context
129          */
130         const RenderData *getRenderData() const { return this->m_rd; }
131
132         /**
133          * @brief set view settings of color color management
134          */
135         void setViewSettings(const ColorManagedViewSettings *viewSettings) { this->m_viewSettings = viewSettings; }
136
137         /**
138          * @brief get view settings of color color management
139          */
140         const ColorManagedViewSettings *getViewSettings() const { return this->m_viewSettings; }
141
142         /**
143          * @brief set display settings of color color management
144          */
145         void setDisplaySettings(const ColorManagedDisplaySettings *displaySettings) { this->m_displaySettings = displaySettings; }
146
147         /**
148          * @brief get display settings of color color management
149          */
150         const ColorManagedDisplaySettings *getDisplaySettings() const { return this->m_displaySettings; }
151
152         /**
153          * @brief set the quality
154          */
155         void setQuality(CompositorQuality quality) { this->m_quality = quality; }
156
157         /**
158          * @brief get the quality
159          */
160         const CompositorQuality getQuality() const { return this->m_quality; }
161
162         /**
163          * @brief get the current framenumber of the scene in this context
164          */
165         const int getFramenumber() const;
166
167         /**
168          * @brief has this system active openclDevices?
169          */
170         const bool getHasActiveOpenCLDevices() const { return this->m_hasActiveOpenCLDevices; }
171
172         /**
173          * @brief set has this system active openclDevices?
174          */
175         void setHasActiveOpenCLDevices(bool hasAvtiveOpenCLDevices) { this->m_hasActiveOpenCLDevices = hasAvtiveOpenCLDevices; }
176         
177         int getChunksize() { return this->getbNodeTree()->chunksize; }
178         
179         void setFastCalculation(bool fastCalculation) {this->m_fastCalculation = fastCalculation;}
180         bool isFastCalculation() {return this->m_fastCalculation;}
181 };
182
183
184 #endif