RenderEngine API: add viewport draw utility functions to bind a GLSL fragment
[blender.git] / intern / opencolorio / ocio_capi.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): Xavier Thomas
22  *                 Lukas Toene
23  *                 Sergey Sharybin
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 #ifndef __OCIO_CAPI_H__
29 #define __OCIO_CAPI_H__
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 struct OCIO_GLSLDrawState;
36
37 #define OCIO_DECLARE_HANDLE(name) typedef struct name##__ { int unused; } *name
38
39 #define OCIO_ROLE_SCENE_LINEAR       "scene_linear"
40 #define OCIO_ROLE_COLOR_PICKING      "color_picking"
41 #define OCIO_ROLE_TEXTURE_PAINT      "texture_paint"
42 #define OCIO_ROLE_DEFAULT_BYTE       "default_byte"
43 #define OCIO_ROLE_DEFAULT_FLOAT      "default_float"
44 #define OCIO_ROLE_DEFAULT_SEQUENCER  "default_sequencer"
45
46 OCIO_DECLARE_HANDLE(OCIO_ConstConfigRcPtr);
47 OCIO_DECLARE_HANDLE(OCIO_ConstColorSpaceRcPtr);
48 OCIO_DECLARE_HANDLE(OCIO_ConstProcessorRcPtr);
49 OCIO_DECLARE_HANDLE(OCIO_ConstContextRcPtr);
50 OCIO_DECLARE_HANDLE(OCIO_PackedImageDesc);
51 OCIO_DECLARE_HANDLE(OCIO_DisplayTransformRcPtr);
52 OCIO_DECLARE_HANDLE(OCIO_ConstTransformRcPtr);
53 OCIO_DECLARE_HANDLE(OCIO_ExponentTransformRcPtr);
54 OCIO_DECLARE_HANDLE(OCIO_MatrixTransformRcPtr);
55
56 void OCIO_init(void);
57 void OCIO_exit(void);
58
59 OCIO_ConstConfigRcPtr *OCIO_getCurrentConfig(void);
60 void OCIO_setCurrentConfig(const OCIO_ConstConfigRcPtr *config);
61
62 OCIO_ConstConfigRcPtr *OCIO_configCreateFromEnv(void);
63 OCIO_ConstConfigRcPtr *OCIO_configCreateFromFile(const char* filename);
64 OCIO_ConstConfigRcPtr *OCIO_configCreateFallback(void);
65
66 void OCIO_configRelease(OCIO_ConstConfigRcPtr *config);
67
68 int OCIO_configGetNumColorSpaces(OCIO_ConstConfigRcPtr *config);
69 const char *OCIO_configGetColorSpaceNameByIndex(OCIO_ConstConfigRcPtr *config, int index);
70 OCIO_ConstColorSpaceRcPtr *OCIO_configGetColorSpace(OCIO_ConstConfigRcPtr *config, const char *name);
71 int OCIO_configGetIndexForColorSpace(OCIO_ConstConfigRcPtr *config, const char *name);
72
73 int OCIO_colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs);
74 int OCIO_colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs);
75
76 void OCIO_colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs);
77
78 const char *OCIO_configGetDefaultDisplay(OCIO_ConstConfigRcPtr *config);
79 int         OCIO_configGetNumDisplays(OCIO_ConstConfigRcPtr *config);
80 const char *OCIO_configGetDisplay(OCIO_ConstConfigRcPtr *config, int index);
81 const char *OCIO_configGetDefaultView(OCIO_ConstConfigRcPtr *config, const char *display);
82 int         OCIO_configGetNumViews(OCIO_ConstConfigRcPtr *config, const char *display);
83 const char *OCIO_configGetView(OCIO_ConstConfigRcPtr *config, const char *display, int index);
84 const char *OCIO_configGetDisplayColorSpaceName(OCIO_ConstConfigRcPtr *config, const char *display, const char *view);
85
86 OCIO_ConstProcessorRcPtr *OCIO_configGetProcessorWithNames(OCIO_ConstConfigRcPtr *config, const char *srcName, const char *dstName);
87 OCIO_ConstProcessorRcPtr *OCIO_configGetProcessor(OCIO_ConstConfigRcPtr *config, OCIO_ConstTransformRcPtr *transform);
88
89 void OCIO_processorApply(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img);
90 void OCIO_processorApply_predivide(OCIO_ConstProcessorRcPtr *processor, OCIO_PackedImageDesc *img);
91 void OCIO_processorApplyRGB(OCIO_ConstProcessorRcPtr *processor, float *pixel);
92 void OCIO_processorApplyRGBA(OCIO_ConstProcessorRcPtr *processor, float *pixel);
93 void OCIO_processorApplyRGBA_predivide(OCIO_ConstProcessorRcPtr *processor, float *pixel);
94
95 void OCIO_processorRelease(OCIO_ConstProcessorRcPtr *p);
96
97 const char *OCIO_colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs);
98 const char *OCIO_colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs);
99 const char *OCIO_colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs);
100
101 OCIO_DisplayTransformRcPtr *OCIO_createDisplayTransform(void);
102 void OCIO_displayTransformSetInputColorSpaceName(OCIO_DisplayTransformRcPtr *dt, const char *name);
103 void OCIO_displayTransformSetDisplay(OCIO_DisplayTransformRcPtr *dt, const char *name);
104 void OCIO_displayTransformSetView(OCIO_DisplayTransformRcPtr *dt, const char *name);
105 void OCIO_displayTransformSetDisplayCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *et);
106 void OCIO_displayTransformSetLinearCC(OCIO_DisplayTransformRcPtr *dt, OCIO_ConstTransformRcPtr *et);
107 void OCIO_displayTransformRelease(OCIO_DisplayTransformRcPtr *dt);
108
109 OCIO_PackedImageDesc *OCIO_createOCIO_PackedImageDesc(float *data, long width, long height, long numChannels,
110                                                       long chanStrideBytes, long xStrideBytes, long yStrideBytes);
111
112 void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *p);
113
114 OCIO_ExponentTransformRcPtr *OCIO_createExponentTransform(void);
115 void OCIO_exponentTransformSetValue(OCIO_ExponentTransformRcPtr *et, const float *exponent);
116 void OCIO_exponentTransformRelease(OCIO_ExponentTransformRcPtr *et);
117
118 OCIO_MatrixTransformRcPtr *OCIO_createMatrixTransform(void);
119 void OCIO_matrixTransformSetValue(OCIO_MatrixTransformRcPtr *et, const float *m44, const float *offset4);
120 void OCIO_matrixTransformRelease(OCIO_MatrixTransformRcPtr *mt);
121
122 void OCIO_matrixTransformScale(float * m44, float * offset4, const float * scale4);
123
124 int OCIO_supportGLSLDraw(void);
125 int OCIO_setupGLSLDraw(struct OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRcPtr *processor, int predivide);
126 void OCIO_finishGLSLDraw(struct OCIO_GLSLDrawState *state);
127 void OCIO_freeOGLState(struct OCIO_GLSLDrawState *state);
128
129 #ifdef __cplusplus
130 }
131 #endif
132
133 #endif /* OCIO_CAPI_H */