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   char _pad[6];
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 typedef struct Scopes {
155   int ok;
156   int sample_full;
157   int sample_lines;
158   float accuracy;
159   int wavefrm_mode;
160   float wavefrm_alpha;
161   float wavefrm_yfac;
162   int wavefrm_height;
163   float vecscope_alpha;
164   int vecscope_height;
165   float minmax[3][2];
166   struct Histogram hist;
167   float *waveform_1;
168   float *waveform_2;
169   float *waveform_3;
170   float *vecscope;
171   int waveform_tot;
172   char _pad[4];
173 } Scopes;
174
175 /* scopes->wavefrm_mode */
176 #define SCOPES_WAVEFRM_LUMA 0
177 #define SCOPES_WAVEFRM_RGB_PARADE 1
178 #define SCOPES_WAVEFRM_YCC_601 2
179 #define SCOPES_WAVEFRM_YCC_709 3
180 #define SCOPES_WAVEFRM_YCC_JPEG 4
181 #define SCOPES_WAVEFRM_RGB 5
182
183 typedef struct ColorManagedViewSettings {
184   int flag;
185   char _pad[4];
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