Merge branch 'blender2.7'
[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         /** Shorty for result lookup. */
47         short flag, shorty;
48 } CurveMapPoint;
49
50 /* curvepoint->flag */
51 enum {
52         CUMA_SELECT = (1 << 0),
53         CUMA_HANDLE_VECTOR = (1 << 1),
54         CUMA_HANDLE_AUTO_ANIM = (1 << 2),
55 };
56
57 typedef struct CurveMap {
58         short totpoint, flag;
59
60         /** Quick multiply value for reading table. */
61         float range;
62         /** The x-axis range for the table. */
63         float mintable, maxtable;
64         /** For extrapolated curves, the direction vector. */
65         float ext_in[2], ext_out[2];
66         /** Actual curve. */
67         CurveMapPoint *curve;
68         /** Display and evaluate table. */
69         CurveMapPoint *table;
70
71         /** For RGB curves, premulled table. */
72         CurveMapPoint *premultable;
73         /** For RGB curves, premulled extrapolation vector. */
74         float premul_ext_in[2];
75         float premul_ext_out[2];
76 } CurveMap;
77
78 /* cuma->flag */
79 #define CUMA_EXTEND_EXTRAPOLATE 1
80
81 typedef struct CurveMapping {
82         /** Cur; for buttons, to show active curve. */
83         int flag, cur;
84         int preset;
85         int changed_timestamp;
86
87         /** Current rect, clip rect (is default rect too). */
88         rctf curr, clipr;
89
90         /** Max 4 builtin curves per mapping struct now. */
91         CurveMap cm[4];
92         /** Black/white point (black[0] abused for current frame). */
93         float black[3], white[3];
94         /** Black/white point multiply value, for speed. */
95         float bwmul[3];
96
97         /** Sample values, if flag set it draws line and intersection. */
98         float sample[3];
99
100         short tone;
101         short pad[3];
102 } CurveMapping;
103
104 /* cumapping->flag */
105 #define CUMA_DO_CLIP            (1 << 0)
106 #define CUMA_PREMULLED          (1 << 1)
107 #define CUMA_DRAW_CFRA          (1 << 2)
108 #define CUMA_DRAW_SAMPLE        (1 << 3)
109
110 /* cumapping->preset */
111 typedef enum eCurveMappingPreset {
112         CURVE_PRESET_LINE   = 0,
113         CURVE_PRESET_SHARP  = 1,
114         CURVE_PRESET_SMOOTH = 2,
115         CURVE_PRESET_MAX    = 3,
116         CURVE_PRESET_MID9   = 4,
117         CURVE_PRESET_ROUND  = 5,
118         CURVE_PRESET_ROOT   = 6,
119         CURVE_PRESET_GAUSS  = 7,
120         CURVE_PRESET_BELL   = 8,
121 } eCurveMappingPreset;
122
123 /* CurveMapping->tone */
124 typedef enum eCurveMappingTone {
125         CURVE_TONE_STANDARD = 0,
126         CURVE_TONE_FILMLIKE = 2,
127 } eCurveMappingTone;
128
129 /* histogram->mode */
130 enum {
131         HISTO_MODE_LUMA   = 0,
132         HISTO_MODE_RGB    = 1,
133         HISTO_MODE_R      = 2,
134         HISTO_MODE_G      = 3,
135         HISTO_MODE_B      = 4,
136         HISTO_MODE_ALPHA  = 5
137 };
138
139 enum {
140         HISTO_FLAG_LINE        = (1 << 0),
141         HISTO_FLAG_SAMPLELINE  = (1 << 1)
142 };
143
144 typedef struct Histogram {
145         int channels;
146         int x_resolution;
147         float data_luma[256];
148         float data_r[256];
149         float data_g[256];
150         float data_b[256];
151         float data_a[256];
152         float xmax, ymax;
153         short mode;
154         short flag;
155         int height;
156
157         /* sample line only */
158         /* image coords src -> dst */
159         float co[2][2];
160 } Histogram;
161
162
163 typedef struct Scopes {
164         int ok;
165         int sample_full;
166         int sample_lines;
167         float accuracy;
168         int wavefrm_mode;
169         float wavefrm_alpha;
170         float wavefrm_yfac;
171         int wavefrm_height;
172         float vecscope_alpha;
173         int vecscope_height;
174         float minmax[3][2];
175         struct Histogram hist;
176         float *waveform_1;
177         float *waveform_2;
178         float *waveform_3;
179         float *vecscope;
180         int waveform_tot;
181         int pad;
182 } Scopes;
183
184 /* scopes->wavefrm_mode */
185 #define SCOPES_WAVEFRM_LUMA             0
186 #define SCOPES_WAVEFRM_RGB_PARADE       1
187 #define SCOPES_WAVEFRM_YCC_601  2
188 #define SCOPES_WAVEFRM_YCC_709  3
189 #define SCOPES_WAVEFRM_YCC_JPEG 4
190 #define SCOPES_WAVEFRM_RGB              5
191
192 typedef struct ColorManagedViewSettings {
193         int flag, pad;
194         /** Look which is being applied when displaying buffer on the screen (prior to view transform). */
195         char look[64];
196         /** View transform which is being applied when displaying buffer on the screen. */
197         char view_transform[64];
198         /** Fstop exposure. */
199         float exposure;
200         /** Post-display gamma transform. */
201         float gamma;
202         /** Pre-display RGB curves transform. */
203         struct CurveMapping *curve_mapping;
204         void *pad2;
205 } ColorManagedViewSettings;
206
207 typedef struct ColorManagedDisplaySettings {
208         char display_device[64];
209 } ColorManagedDisplaySettings;
210
211 typedef struct ColorManagedColorspaceSettings {
212         /** MAX_COLORSPACE_NAME. */
213         char name[64];
214 } ColorManagedColorspaceSettings;
215
216 /* ColorManagedViewSettings->flag */
217 enum {
218         COLORMANAGE_VIEW_USE_CURVES = (1 << 0)
219 };
220
221 #endif