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