Merge branch 'blender2.7'
[blender.git] / source / blender / makesdna / DNA_color_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2006 Blender Foundation.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup DNA
22  */
23
24 #ifndef __DNA_COLOR_TYPES_H__
25 #define __DNA_COLOR_TYPES_H__
26
27 #include "DNA_vec_types.h"
28
29 /* general defines for kernel functions */
30 #define CM_RESOL 32
31 #define CM_TABLE 256
32 #define CM_TABLEDIV             (1.0f/256.0f)
33
34 #define CM_TOT  4
35
36 typedef struct CurveMapPoint {
37         float x, y;
38         /** Shorty for result lookup. */
39         short flag, shorty;
40 } CurveMapPoint;
41
42 /* curvepoint->flag */
43 enum {
44         CUMA_SELECT = (1 << 0),
45         CUMA_HANDLE_VECTOR = (1 << 1),
46         CUMA_HANDLE_AUTO_ANIM = (1 << 2),
47 };
48
49 typedef struct CurveMap {
50         short totpoint, flag;
51
52         /** Quick multiply value for reading table. */
53         float range;
54         /** The x-axis range for the table. */
55         float mintable, maxtable;
56         /** For extrapolated curves, the direction vector. */
57         float ext_in[2], ext_out[2];
58         /** Actual curve. */
59         CurveMapPoint *curve;
60         /** Display and evaluate table. */
61         CurveMapPoint *table;
62
63         /** For RGB curves, premulled table. */
64         CurveMapPoint *premultable;
65         /** For RGB curves, premulled extrapolation vector. */
66         float premul_ext_in[2];
67         float premul_ext_out[2];
68 } CurveMap;
69
70 /* cuma->flag */
71 #define CUMA_EXTEND_EXTRAPOLATE 1
72
73 typedef struct CurveMapping {
74         /** Cur; for buttons, to show active curve. */
75         int flag, cur;
76         int preset;
77         int changed_timestamp;
78
79         /** Current rect, clip rect (is default rect too). */
80         rctf curr, clipr;
81
82         /** Max 4 builtin curves per mapping struct now. */
83         CurveMap cm[4];
84         /** Black/white point (black[0] abused for current frame). */
85         float black[3], white[3];
86         /** Black/white point multiply value, for speed. */
87         float bwmul[3];
88
89         /** Sample values, if flag set it draws line and intersection. */
90         float sample[3];
91
92         short tone;
93         short pad[3];
94 } CurveMapping;
95
96 /* cumapping->flag */
97 #define CUMA_DO_CLIP            (1 << 0)
98 #define CUMA_PREMULLED          (1 << 1)
99 #define CUMA_DRAW_CFRA          (1 << 2)
100 #define CUMA_DRAW_SAMPLE        (1 << 3)
101
102 /* cumapping->preset */
103 typedef enum eCurveMappingPreset {
104         CURVE_PRESET_LINE   = 0,
105         CURVE_PRESET_SHARP  = 1,
106         CURVE_PRESET_SMOOTH = 2,
107         CURVE_PRESET_MAX    = 3,
108         CURVE_PRESET_MID9   = 4,
109         CURVE_PRESET_ROUND  = 5,
110         CURVE_PRESET_ROOT   = 6,
111         CURVE_PRESET_GAUSS  = 7,
112         CURVE_PRESET_BELL   = 8,
113 } eCurveMappingPreset;
114
115 /* CurveMapping->tone */
116 typedef enum eCurveMappingTone {
117         CURVE_TONE_STANDARD = 0,
118         CURVE_TONE_FILMLIKE = 2,
119 } eCurveMappingTone;
120
121 /* histogram->mode */
122 enum {
123         HISTO_MODE_LUMA   = 0,
124         HISTO_MODE_RGB    = 1,
125         HISTO_MODE_R      = 2,
126         HISTO_MODE_G      = 3,
127         HISTO_MODE_B      = 4,
128         HISTO_MODE_ALPHA  = 5,
129 };
130
131 enum {
132         HISTO_FLAG_LINE        = (1 << 0),
133         HISTO_FLAG_SAMPLELINE  = (1 << 1),
134 };
135
136 typedef struct Histogram {
137         int channels;
138         int x_resolution;
139         float data_luma[256];
140         float data_r[256];
141         float data_g[256];
142         float data_b[256];
143         float data_a[256];
144         float xmax, ymax;
145         short mode;
146         short flag;
147         int height;
148
149         /* sample line only */
150         /* image coords src -> dst */
151         float co[2][2];
152 } Histogram;
153
154
155 typedef struct Scopes {
156         int ok;
157         int sample_full;
158         int sample_lines;
159         float accuracy;
160         int wavefrm_mode;
161         float wavefrm_alpha;
162         float wavefrm_yfac;
163         int wavefrm_height;
164         float vecscope_alpha;
165         int vecscope_height;
166         float minmax[3][2];
167         struct Histogram hist;
168         float *waveform_1;
169         float *waveform_2;
170         float *waveform_3;
171         float *vecscope;
172         int waveform_tot;
173         int pad;
174 } Scopes;
175
176 /* scopes->wavefrm_mode */
177 #define SCOPES_WAVEFRM_LUMA             0
178 #define SCOPES_WAVEFRM_RGB_PARADE       1
179 #define SCOPES_WAVEFRM_YCC_601  2
180 #define SCOPES_WAVEFRM_YCC_709  3
181 #define SCOPES_WAVEFRM_YCC_JPEG 4
182 #define SCOPES_WAVEFRM_RGB              5
183
184 typedef struct ColorManagedViewSettings {
185         int flag, pad;
186         /** Look which is being applied when displaying buffer on the screen
187          * (prior to view transform). */
188         char look[64];
189         /** View transform which is being applied when displaying buffer on the screen. */
190         char view_transform[64];
191         /** Fstop exposure. */
192         float exposure;
193         /** Post-display gamma transform. */
194         float gamma;
195         /** Pre-display RGB curves transform. */
196         struct CurveMapping *curve_mapping;
197         void *pad2;
198 } ColorManagedViewSettings;
199
200 typedef struct ColorManagedDisplaySettings {
201         char display_device[64];
202 } ColorManagedDisplaySettings;
203
204 typedef struct ColorManagedColorspaceSettings {
205         /** MAX_COLORSPACE_NAME. */
206         char name[64];
207 } ColorManagedColorspaceSettings;
208
209 /* ColorManagedViewSettings->flag */
210 enum {
211         COLORMANAGE_VIEW_USE_CURVES = (1 << 0),
212 };
213
214 #endif