Color management refactoiring and some extra options
[blender.git] / source / blender / makesdna / DNA_color_types.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) 2006 Blender Foundation.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL/BL DUAL LICENSE BLOCK *****
26  */
27
28 /** \file DNA_color_types.h
29  *  \ingroup DNA
30  */
31
32 #ifndef __DNA_COLOR_TYPES_H__
33 #define __DNA_COLOR_TYPES_H__
34
35 #include "DNA_vec_types.h"
36
37 /* general defines for kernel functions */
38 #define CM_RESOL 32
39 #define CM_TABLE 256
40 #define CM_TABLEDIV             (1.0f/256.0f)
41
42 #define CM_TOT  4
43
44 typedef struct CurveMapPoint {
45         float x, y;
46         short flag, shorty;             /* shorty for result lookup */
47 } CurveMapPoint;
48
49 /* curvepoint->flag */
50 #define CUMA_SELECT             1
51 #define CUMA_VECTOR             2
52
53 typedef struct CurveMap {
54         short totpoint, flag;
55         
56         float range;                                    /* quick multiply value for reading table */
57         float mintable, maxtable;               /* the x-axis range for the table */
58         float ext_in[2], ext_out[2];    /* for extrapolated curves, the direction vector */
59         CurveMapPoint *curve;                   /* actual curve */
60         CurveMapPoint *table;                   /* display and evaluate table */
61         CurveMapPoint *premultable;             /* for RGB curves, premulled table */
62 } CurveMap;
63
64 /* cuma->flag */
65 #define CUMA_EXTEND_EXTRAPOLATE 1
66
67 typedef struct CurveMapping {
68         int flag, cur;                                  /* cur; for buttons, to show active curve */
69         int preset;
70         int changed_timestamp;
71         
72         rctf curr, clipr;                               /* current rect, clip rect (is default rect too) */
73         
74         CurveMap cm[4];                                 /* max 4 builtin curves per mapping struct now */
75         float black[3], white[3];               /* black/white point (black[0] abused for current frame) */
76         float bwmul[3];                                 /* black/white point multiply value, for speed */
77         
78         float sample[3];                                /* sample values, if flag set it draws line and intersection */
79 } CurveMapping;
80
81 /* cumapping->flag */
82 #define CUMA_DO_CLIP                    1
83 #define CUMA_PREMULLED                  2
84 #define CUMA_DRAW_CFRA                  4
85 #define CUMA_DRAW_SAMPLE                8
86
87 /* cumapping->preset */
88 typedef enum CurveMappingPreset {
89         CURVE_PRESET_LINE   = 0,
90         CURVE_PRESET_SHARP  = 1,
91         CURVE_PRESET_SMOOTH = 2,
92         CURVE_PRESET_MAX    = 3,
93         CURVE_PRESET_MID9   = 4,
94         CURVE_PRESET_ROUND  = 5,
95         CURVE_PRESET_ROOT   = 6,
96 } CurveMappingPreset;
97
98 /* histogram->mode */
99 enum {
100         HISTO_MODE_LUMA   = 0,
101         HISTO_MODE_RGB    = 1,
102         HISTO_MODE_R      = 2,
103         HISTO_MODE_G      = 3,
104         HISTO_MODE_B      = 4,
105         HISTO_MODE_ALPHA  = 5
106 };
107
108 enum {
109         HISTO_FLAG_LINE        = (1 << 0),
110         HISTO_FLAG_SAMPLELINE  = (1 << 1)
111 };
112
113 typedef struct Histogram {
114         int channels;
115         int x_resolution;
116         float data_luma[256];
117         float data_r[256];
118         float data_g[256];
119         float data_b[256];
120         float data_a[256];
121         float xmax, ymax;
122         short mode;
123         short flag;
124         int height;
125
126         /* sample line only */
127         /* image coords src -> dst */
128         float co[2][2];
129 } Histogram;
130
131 struct ImBuf;
132
133 typedef struct Scopes {
134         int ok;
135         int sample_full;
136         int sample_lines;
137         float accuracy;
138         int wavefrm_mode;
139         float wavefrm_alpha;
140         float wavefrm_yfac;
141         int wavefrm_height;
142         float vecscope_alpha;
143         int vecscope_height;
144         float minmax[3][2];
145         struct Histogram hist;
146         float *waveform_1;
147         float *waveform_2;
148         float *waveform_3;
149         float *vecscope;
150         int waveform_tot;
151         int pad;
152 } Scopes;
153
154 /* scopes->wavefrm_mode */
155 #define SCOPES_WAVEFRM_LUMA             0
156 #define SCOPES_WAVEFRM_RGB              1
157 #define SCOPES_WAVEFRM_YCC_601  2
158 #define SCOPES_WAVEFRM_YCC_709  3
159 #define SCOPES_WAVEFRM_YCC_JPEG 4
160
161 typedef struct ColorManagedViewSettings {
162         int flag;                  /* assodted flags such as using global settings from window and so */
163         char view_transform[64];   /* view transform which is being applied when displaying buffer on the screen */
164         float exposure;            /* fstop exposure */
165         float gamma;               /* post-display gamma transform */
166 } ColorManagedViewSettings;
167
168 enum {
169         COLORMANAGE_VIEW_USE_GLOBAL = (1 << 0)    /* use global display settings instead of per-space setting */
170 };
171
172 #endif
173