Code refactor: don't expose UpdateObjectTransformState in header.
[blender-staging.git] / intern / opencolorio / ocio_impl.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
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  * The Original Code is Copyright (C) 2012 Blender Foundation.
19  * All rights reserved.
20  *
21  * Contributor(s): Sergey Sharybin
22  *
23  * ***** END GPL LICENSE BLOCK *****
24  */
25
26 #ifndef __OCIO_IMPL_H__
27 #define __OCIO_IMPL_H__
28
29 #include "ocio_capi.h"
30
31 class IOCIOImpl {
32 public:
33         virtual ~IOCIOImpl() {}
34
35         virtual OCIO_ConstConfigRcPtr *getCurrentConfig(void) = 0;
36         virtual void setCurrentConfig(const OCIO_ConstConfigRcPtr *config) = 0;
37
38         virtual OCIO_ConstConfigRcPtr *configCreateFromEnv(void) = 0;
39         virtual OCIO_ConstConfigRcPtr *configCreateFromFile(const char* filename) = 0;
40
41         virtual void configRelease(OCIO_ConstConfigRcPtr *config) = 0;
42
43         virtual int configGetNumColorSpaces(OCIO_ConstConfigRcPtr *config) = 0;
44         virtual const char *configGetColorSpaceNameByIndex(OCIO_ConstConfigRcPtr *config, int index) = 0;
45         virtual OCIO_ConstColorSpaceRcPtr *configGetColorSpace(OCIO_ConstConfigRcPtr *config, const char *name) = 0;
46         virtual int configGetIndexForColorSpace(OCIO_ConstConfigRcPtr *config, const char *name) = 0;
47
48         virtual int colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs) = 0;
49         virtual int colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs) = 0;
50
51         virtual void colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs) = 0;
52
53         virtual const char *configGetDefaultDisplay(OCIO_ConstConfigRcPtr *config) = 0;
54         virtual int         configGetNumDisplays(OCIO_ConstConfigRcPtr *config) = 0;
55         virtual const char *configGetDisplay(OCIO_ConstConfigRcPtr *config, int index) = 0;
56         virtual const char *configGetDefaultView(OCIO_ConstConfigRcPtr *config, const char *display) = 0;
57         virtual int         configGetNumViews(OCIO_ConstConfigRcPtr *config, const char *display) = 0;
58         virtual const char *configGetView(OCIO_ConstConfigRcPtr *config, const char *display, int index) = 0;
59         virtual const char *configGetDisplayColorSpaceName(OCIO_ConstConfigRcPtr *config, const char *display, const char *view) = 0;
60
61         virtual void configGetDefaultLumaCoefs(OCIO_ConstConfigRcPtr *config, float *rgb) = 0;
62
63         virtual int                  configGetNumLooks(OCIO_ConstConfigRcPtr *config) = 0;
64         virtual const char          *configGetLookNameByIndex(OCIO_ConstConfigRcPtr *config, int index) = 0;
65         virtual OCIO_ConstLookRcPtr *configGetLook(OCIO_ConstConfigRcPtr *config, const char *name) = 0;
66
67         virtual const char *lookGetProcessSpace(OCIO_ConstLookRcPtr *look) = 0;
68         virtual void        lookRelease(OCIO_ConstLookRcPtr *look) = 0;
69
70         virtual OCIO_ConstProcessorRcPtr *configGetProcessorWithNames(OCIO_ConstConfigRcPtr *config, const char *srcName, const char *dstName) = 0;
71         virtual OCIO_ConstProcessorRcPtr *configGetProcessor(OCIO_ConstConfigRcPtr *config, OCIO_ConstTransformRcPtr *transform) = 0;
72
73         virtual void processorApply(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img) = 0;
74         virtual void processorApply_predivide(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img) = 0;
75         virtual void processorApplyRGB(OCIO_ConstProcessorRcPtr *processor, float *pixel) = 0;
76         virtual void processorApplyRGBA(OCIO_ConstProcessorRcPtr *processor, float *pixel) = 0;
77         virtual void processorApplyRGBA_predivide(OCIO_ConstProcessorRcPtr *processor, float *pixel) = 0;
78
79         virtual void processorRelease(OCIO_ConstProcessorRcPtr *p) = 0;
80
81         virtual const char *colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs) = 0;
82         virtual const char *colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs) = 0;
83         virtual const char *colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs) = 0;
84
85         virtual OCIO_DisplayTransformRcPtr *createDisplayTransform(void) = 0;
86         virtual void displayTransformSetInputColorSpaceName(OCIO_DisplayTransformRcPtr *dt, const char *name) = 0;
87         virtual void displayTransformSetDisplay(OCIO_DisplayTransformRcPtr *dt, const char *name) = 0;
88         virtual void displayTransformSetView(OCIO_DisplayTransformRcPtr *dt, const char *name) = 0;
89         virtual void displayTransformSetDisplayCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *et) = 0;
90         virtual void displayTransformSetLinearCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *et) = 0;
91         virtual void displayTransformSetLooksOverride(OCIO_DisplayTransformRcPtr *dt, const char *looks) = 0;
92         virtual void displayTransformSetLooksOverrideEnabled(OCIO_DisplayTransformRcPtr *dt, bool enabled) = 0;
93         virtual void displayTransformRelease(OCIO_DisplayTransformRcPtr *dt) = 0;
94
95         virtual OCIO_PackedImageDesc *createOCIO_PackedImageDesc(float *data, long width, long height, long numChannels,
96                                                        long chanStrideBytes, long xStrideBytes, long yStrideBytes) = 0;
97
98         virtual void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *p) = 0;
99
100         virtual OCIO_ExponentTransformRcPtr *createExponentTransform(void) = 0;
101         virtual void exponentTransformSetValue(OCIO_ExponentTransformRcPtr *et, const float *exponent) = 0;
102         virtual void exponentTransformRelease(OCIO_ExponentTransformRcPtr *et) = 0;
103
104         virtual OCIO_MatrixTransformRcPtr *createMatrixTransform(void) = 0;
105         virtual void matrixTransformSetValue(OCIO_MatrixTransformRcPtr *mt, const float *m44, const float *offset4) = 0;
106         virtual void matrixTransformRelease(OCIO_MatrixTransformRcPtr *mt) = 0;
107
108         virtual void matrixTransformScale(float * m44, float * offset4, const float * scale4) = 0;
109
110         virtual bool supportGLSLDraw(void) = 0;
111         virtual bool setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor,
112                                    OCIO_CurveMappingSettings *curve_mapping_settings, float dither, bool predivide) = 0;
113         virtual void finishGLSLDraw(struct OCIO_GLSLDrawState *state) = 0;
114         virtual void freeGLState(struct OCIO_GLSLDrawState *state_r) = 0;
115
116         virtual const char *getVersionString(void) = 0;
117         virtual int getVersionHex(void) = 0;
118 };
119
120 class FallbackImpl : public IOCIOImpl {
121 public:
122         FallbackImpl() {}
123
124         OCIO_ConstConfigRcPtr *getCurrentConfig(void);
125         void setCurrentConfig(const OCIO_ConstConfigRcPtr *config);
126
127         OCIO_ConstConfigRcPtr *configCreateFromEnv(void);
128         OCIO_ConstConfigRcPtr *configCreateFromFile(const char* filename);
129
130         void configRelease(OCIO_ConstConfigRcPtr *config);
131
132         int configGetNumColorSpaces(OCIO_ConstConfigRcPtr *config);
133         const char *configGetColorSpaceNameByIndex(OCIO_ConstConfigRcPtr *config, int index);
134         OCIO_ConstColorSpaceRcPtr *configGetColorSpace(OCIO_ConstConfigRcPtr *config, const char *name);
135         int configGetIndexForColorSpace(OCIO_ConstConfigRcPtr *config, const char *name);
136
137         int colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs);
138         int colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs);
139
140         void colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs);
141
142         const char *configGetDefaultDisplay(OCIO_ConstConfigRcPtr *config);
143         int         configGetNumDisplays(OCIO_ConstConfigRcPtr *config);
144         const char *configGetDisplay(OCIO_ConstConfigRcPtr *config, int index);
145         const char *configGetDefaultView(OCIO_ConstConfigRcPtr *config, const char *display);
146         int         configGetNumViews(OCIO_ConstConfigRcPtr *config, const char *display);
147         const char *configGetView(OCIO_ConstConfigRcPtr *config, const char *display, int index);
148         const char *configGetDisplayColorSpaceName(OCIO_ConstConfigRcPtr *config, const char *display, const char *view);
149
150         void configGetDefaultLumaCoefs(OCIO_ConstConfigRcPtr *config, float *rgb);
151
152         int                  configGetNumLooks(OCIO_ConstConfigRcPtr *config);
153         const char          *configGetLookNameByIndex(OCIO_ConstConfigRcPtr *config, int index);
154         OCIO_ConstLookRcPtr *configGetLook(OCIO_ConstConfigRcPtr *config, const char *name);
155
156         const char *lookGetProcessSpace(OCIO_ConstLookRcPtr *look);
157         void        lookRelease(OCIO_ConstLookRcPtr *look);
158
159         OCIO_ConstProcessorRcPtr *configGetProcessorWithNames(OCIO_ConstConfigRcPtr *config, const char *srcName, const char *dstName);
160         OCIO_ConstProcessorRcPtr *configGetProcessor(OCIO_ConstConfigRcPtr *config, OCIO_ConstTransformRcPtr *transform);
161
162         void processorApply(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img);
163         void processorApply_predivide(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img);
164         void processorApplyRGB(OCIO_ConstProcessorRcPtr *processor, float *pixel);
165         void processorApplyRGBA(OCIO_ConstProcessorRcPtr *processor, float *pixel);
166         void processorApplyRGBA_predivide(OCIO_ConstProcessorRcPtr *processor, float *pixel);
167
168         void processorRelease(OCIO_ConstProcessorRcPtr *p);
169
170         const char *colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs);
171         const char *colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs);
172         const char *colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs);
173
174         OCIO_DisplayTransformRcPtr *createDisplayTransform(void);
175         void displayTransformSetInputColorSpaceName(OCIO_DisplayTransformRcPtr *dt, const char *name);
176         void displayTransformSetDisplay(OCIO_DisplayTransformRcPtr *dt, const char *name);
177         void displayTransformSetView(OCIO_DisplayTransformRcPtr *dt, const char *name);
178         void displayTransformSetDisplayCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *et);
179         void displayTransformSetLinearCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *et);
180         void displayTransformSetLooksOverride(OCIO_DisplayTransformRcPtr *dt, const char *looks);
181         void displayTransformSetLooksOverrideEnabled(OCIO_DisplayTransformRcPtr *dt, bool enabled);
182         void displayTransformRelease(OCIO_DisplayTransformRcPtr *dt);
183
184         OCIO_PackedImageDesc *createOCIO_PackedImageDesc(float *data, long width, long height, long numChannels,
185                                                long chanStrideBytes, long xStrideBytes, long yStrideBytes);
186
187         void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *p);
188
189         OCIO_ExponentTransformRcPtr *createExponentTransform(void);
190         void exponentTransformSetValue(OCIO_ExponentTransformRcPtr *et, const float *exponent);
191         void exponentTransformRelease(OCIO_ExponentTransformRcPtr *et);
192
193         OCIO_MatrixTransformRcPtr *createMatrixTransform(void);
194         void matrixTransformSetValue(OCIO_MatrixTransformRcPtr *mt, const float *m44, const float *offset4);
195         void matrixTransformRelease(OCIO_MatrixTransformRcPtr *mt);
196
197         void matrixTransformScale(float *m44, float *offset4, const float *scale4);
198
199         bool supportGLSLDraw(void);
200         bool setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor,
201                            OCIO_CurveMappingSettings *curve_mapping_settings, float dither, bool predivide);
202         void finishGLSLDraw(struct OCIO_GLSLDrawState *state);
203         void freeGLState(struct OCIO_GLSLDrawState *state_r);
204
205         const char *getVersionString(void);
206         int getVersionHex(void);
207 };
208
209 #ifdef WITH_OCIO
210 class OCIOImpl : public IOCIOImpl {
211 public:
212         OCIOImpl() {};
213
214         OCIO_ConstConfigRcPtr *getCurrentConfig(void);
215         void setCurrentConfig(const OCIO_ConstConfigRcPtr *config);
216
217         OCIO_ConstConfigRcPtr *configCreateFromEnv(void);
218         OCIO_ConstConfigRcPtr *configCreateFromFile(const char* filename);
219
220         void configRelease(OCIO_ConstConfigRcPtr *config);
221
222         int configGetNumColorSpaces(OCIO_ConstConfigRcPtr *config);
223         const char *configGetColorSpaceNameByIndex(OCIO_ConstConfigRcPtr *config, int index);
224         OCIO_ConstColorSpaceRcPtr *configGetColorSpace(OCIO_ConstConfigRcPtr *config, const char *name);
225         int configGetIndexForColorSpace(OCIO_ConstConfigRcPtr *config, const char *name);
226
227         int colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs);
228         int colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs);
229
230         void colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs);
231
232         const char *configGetDefaultDisplay(OCIO_ConstConfigRcPtr *config);
233         int         configGetNumDisplays(OCIO_ConstConfigRcPtr *config);
234         const char *configGetDisplay(OCIO_ConstConfigRcPtr *config, int index);
235         const char *configGetDefaultView(OCIO_ConstConfigRcPtr *config, const char *display);
236         int         configGetNumViews(OCIO_ConstConfigRcPtr *config, const char *display);
237         const char *configGetView(OCIO_ConstConfigRcPtr *config, const char *display, int index);
238         const char *configGetDisplayColorSpaceName(OCIO_ConstConfigRcPtr *config, const char *display, const char *view);
239
240         void configGetDefaultLumaCoefs(OCIO_ConstConfigRcPtr *config, float *rgb);
241
242         int                  configGetNumLooks(OCIO_ConstConfigRcPtr *config);
243         const char          *configGetLookNameByIndex(OCIO_ConstConfigRcPtr *config, int index);
244         OCIO_ConstLookRcPtr *configGetLook(OCIO_ConstConfigRcPtr *config, const char *name);
245
246         const char *lookGetProcessSpace(OCIO_ConstLookRcPtr *look);
247         void        lookRelease(OCIO_ConstLookRcPtr *look);
248
249         OCIO_ConstProcessorRcPtr *configGetProcessorWithNames(OCIO_ConstConfigRcPtr *config, const char *srcName, const char *dstName);
250         OCIO_ConstProcessorRcPtr *configGetProcessor(OCIO_ConstConfigRcPtr *config, OCIO_ConstTransformRcPtr *transform);
251
252         void processorApply(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img);
253         void processorApply_predivide(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img);
254         void processorApplyRGB(OCIO_ConstProcessorRcPtr *processor, float *pixel);
255         void processorApplyRGBA(OCIO_ConstProcessorRcPtr *processor, float *pixel);
256         void processorApplyRGBA_predivide(OCIO_ConstProcessorRcPtr *processor, float *pixel);
257
258         void processorRelease(OCIO_ConstProcessorRcPtr *p);
259
260         const char *colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs);
261         const char *colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs);
262         const char *colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs);
263
264         OCIO_DisplayTransformRcPtr *createDisplayTransform(void);
265         void displayTransformSetInputColorSpaceName(OCIO_DisplayTransformRcPtr *dt, const char *name);
266         void displayTransformSetDisplay(OCIO_DisplayTransformRcPtr *dt, const char *name);
267         void displayTransformSetView(OCIO_DisplayTransformRcPtr *dt, const char *name);
268         void displayTransformSetDisplayCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *et);
269         void displayTransformSetLinearCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *et);
270         void displayTransformSetLooksOverride(OCIO_DisplayTransformRcPtr *dt, const char *looks);
271         void displayTransformSetLooksOverrideEnabled(OCIO_DisplayTransformRcPtr *dt, bool enabled);
272         void displayTransformRelease(OCIO_DisplayTransformRcPtr *dt);
273
274         OCIO_PackedImageDesc *createOCIO_PackedImageDesc(float *data, long width, long height, long numChannels,
275                                                long chanStrideBytes, long xStrideBytes, long yStrideBytes);
276
277         void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *p);
278
279         OCIO_ExponentTransformRcPtr *createExponentTransform(void);
280         void exponentTransformSetValue(OCIO_ExponentTransformRcPtr *et, const float *exponent);
281         void exponentTransformRelease(OCIO_ExponentTransformRcPtr *et);
282
283         OCIO_MatrixTransformRcPtr *createMatrixTransform(void);
284         void matrixTransformSetValue(OCIO_MatrixTransformRcPtr *mt, const float *m44, const float *offset4);
285         void matrixTransformRelease(OCIO_MatrixTransformRcPtr *mt);
286
287         void matrixTransformScale(float * m44, float * offset4, const float * scale4);
288
289         bool supportGLSLDraw(void);
290         bool setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor,
291                            OCIO_CurveMappingSettings *curve_mapping_settings, float dither, bool predivide);
292         void finishGLSLDraw(struct OCIO_GLSLDrawState *state);
293         void freeGLState(struct OCIO_GLSLDrawState *state_r);
294
295         const char *getVersionString(void);
296         int getVersionHex(void);
297 };
298 #endif
299
300 #endif /* OCIO_IMPL_H */