Merge branch 'blender2.7'
[blender.git] / source / blender / makesdna / DNA_scene_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) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file \ingroup DNA
21  */
22
23 #ifndef __DNA_SCENE_TYPES_H__
24 #define __DNA_SCENE_TYPES_H__
25
26 #include "DNA_defs.h"
27
28 /* XXX, temp feature - campbell */
29 #define DURIAN_CAMERA_SWITCH
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 #include "DNA_color_types.h"  /* color management */
36 #include "DNA_vec_types.h"
37 #include "DNA_listBase.h"
38 #include "DNA_ID.h"
39 #include "DNA_freestyle_types.h"
40 #include "DNA_gpu_types.h"
41 #include "DNA_collection_types.h"
42 #include "DNA_layer_types.h"
43 #include "DNA_material_types.h"
44 #include "DNA_userdef_types.h"
45 #include "DNA_view3d_types.h"
46
47 struct AnimData;
48 struct Brush;
49 struct Collection;
50 struct ColorSpace;
51 struct CurveMapping;
52 struct Editing;
53 struct Image;
54 struct MovieClip;
55 struct Object;
56 struct Scene;
57 struct SceneCollection;
58 struct SceneStats;
59 struct Text;
60 struct World;
61 struct bGPdata;
62 struct bNodeTree;
63
64 /* ************************************************************* */
65 /* Scene Data */
66
67 /* ************************************************************* */
68 /* Output Format Data */
69
70 typedef struct AviCodecData {
71         /** Save format. */
72         void                    *lpFormat;
73         /** Compressor options. */
74         void                    *lpParms;
75         /** Size of lpFormat buffer. */
76         unsigned int    cbFormat;
77         /** Size of lpParms buffer. */
78         unsigned int    cbParms;
79
80         /** Stream type, for consistency. */
81         unsigned int    fccType;
82         /** Compressor. */
83         unsigned int    fccHandler;
84         /** Keyframe rate. */
85         unsigned int    dwKeyFrameEvery;
86         /** Compress quality 0-10,000. */
87         unsigned int    dwQuality;
88         /** Bytes per second. */
89         unsigned int    dwBytesPerSecond;
90         /** Flags... see below. */
91         unsigned int    dwFlags;
92         /** For non-video streams only. */
93         unsigned int    dwInterleaveEvery;
94         unsigned int    pad;
95
96         char                    avicodecname[128];
97 } AviCodecData;
98
99 typedef enum eFFMpegPreset {
100         FFM_PRESET_NONE,
101
102 #ifdef DNA_DEPRECATED
103         /* Previously used by h.264 to control encoding speed vs. file size. */
104         FFM_PRESET_ULTRAFAST, /* DEPRECATED */
105         FFM_PRESET_SUPERFAST, /* DEPRECATED */
106         FFM_PRESET_VERYFAST,  /* DEPRECATED */
107         FFM_PRESET_FASTER,    /* DEPRECATED */
108         FFM_PRESET_FAST,      /* DEPRECATED */
109         FFM_PRESET_MEDIUM,    /* DEPRECATED */
110         FFM_PRESET_SLOW,      /* DEPRECATED */
111         FFM_PRESET_SLOWER,    /* DEPRECATED */
112         FFM_PRESET_VERYSLOW,  /* DEPRECATED */
113 #endif
114
115         /* Used by WEBM/VP9 and h.264 to control encoding speed vs. file size.
116          * WEBM/VP9 use these values directly, whereas h.264 map those to
117          * respectively the MEDIUM, SLOWER, and SUPERFAST presets.
118          */
119         /** the default and recommended for most applications */
120         FFM_PRESET_GOOD = 10,
121         /** recommended if you have lots of time and want the best compression efficiency */
122         FFM_PRESET_BEST,
123         /** recommended for live / fast encoding */
124         FFM_PRESET_REALTIME,
125 } eFFMpegPreset;
126
127 /* Mapping from easily-understandable descriptions to CRF values.
128  * Assumes we output 8-bit video. Needs to be remapped if 10-bit
129  * is output.
130  * We use a slightly wider than "subjectively sane range" according
131  * to https://trac.ffmpeg.org/wiki/Encode/H.264#a1.ChooseaCRFvalue
132  */
133 typedef enum eFFMpegCrf {
134         FFM_CRF_NONE = -1,
135         FFM_CRF_LOSSLESS = 0,
136         FFM_CRF_PERC_LOSSLESS = 17,
137         FFM_CRF_HIGH = 20,
138         FFM_CRF_MEDIUM = 23,
139         FFM_CRF_LOW = 26,
140         FFM_CRF_VERYLOW = 29,
141         FFM_CRF_LOWEST = 32,
142 } eFFMpegCrf;
143
144 typedef enum eFFMpegAudioChannels {
145         FFM_CHANNELS_MONO = 1,
146         FFM_CHANNELS_STEREO = 2,
147         FFM_CHANNELS_SURROUND4 = 4,
148         FFM_CHANNELS_SURROUND51 = 6,
149         FFM_CHANNELS_SURROUND71 = 8,
150 } eFFMpegAudioChannels;
151
152 typedef struct FFMpegCodecData {
153         int type;
154         int codec;
155         int audio_codec;
156         int video_bitrate;
157         int audio_bitrate;
158         int audio_mixrate;
159         int audio_channels;
160         int audio_pad;
161         float audio_volume;
162         int gop_size;
163         /** Only used if FFMPEG_USE_MAX_B_FRAMES flag is set. */
164         int max_b_frames;
165         int flags;
166         int constant_rate_factor;
167         /** See eFFMpegPreset. */
168         int ffmpeg_preset;
169
170         int rc_min_rate;
171         int rc_max_rate;
172         int rc_buffer_size;
173         int mux_packet_size;
174         int mux_rate;
175         int pad1;
176
177         IDProperty *properties;
178 } FFMpegCodecData;
179
180 /* ************************************************************* */
181 /* Audio */
182
183 typedef struct AudioData {
184         int mixrate; // 2.5: now in FFMpegCodecData: audio_mixrate
185         float main; // 2.5: now in FFMpegCodecData: audio_volume
186         float speed_of_sound;
187         float doppler_factor;
188         int distance_model;
189         short flag;
190         short pad;
191         float volume;
192         float pad2;
193 } AudioData;
194
195 /* *************************************************************** */
196 /* Render Layers */
197
198 /* Render Layer */
199 typedef struct SceneRenderLayer {
200         struct SceneRenderLayer *next, *prev;
201
202         /** MAX_NAME. */
203         char name[64] DNA_DEPRECATED;
204
205         /** Converted to ViewLayer setting. */
206         struct Material *mat_override DNA_DEPRECATED;
207
208         /** Converted to LayerCollection cycles camera visibility override. */
209         unsigned int lay DNA_DEPRECATED;
210         /** Converted to LayerCollection cycles holdout override. */
211         unsigned int lay_zmask DNA_DEPRECATED;
212         unsigned int lay_exclude DNA_DEPRECATED;
213         /** Converted to ViewLayer layflag and flag. */
214         int layflag DNA_DEPRECATED;
215
216         /* pass_xor has to be after passflag */
217         /** Pass_xor has to be after passflag. */
218         int passflag DNA_DEPRECATED;
219         /** Converted to ViewLayer passflag and flag. */
220         int pass_xor DNA_DEPRECATED;
221
222         /** Converted to ViewLayer setting. */
223         int samples DNA_DEPRECATED;
224         /** Converted to ViewLayer pass_alpha_threshold. */
225         float pass_alpha_threshold DNA_DEPRECATED;
226
227         /** Converted to ViewLayer id_properties. */
228         IDProperty *prop DNA_DEPRECATED;
229
230         /** Converted to ViewLayer freestyleConfig. */
231         struct FreestyleConfig freestyleConfig DNA_DEPRECATED;
232 } SceneRenderLayer;
233
234 /* SceneRenderLayer.layflag */
235 #define SCE_LAY_SOLID   (1 << 0)
236 #define SCE_LAY_ZTRA    (1 << 1)
237 #define SCE_LAY_HALO    (1 << 2)
238 #define SCE_LAY_EDGE    (1 << 3)
239 #define SCE_LAY_SKY     (1 << 4)
240 #define SCE_LAY_STRAND  (1 << 5)
241 #define SCE_LAY_FRS     (1 << 6)
242 #define SCE_LAY_AO      (1 << 7)
243         /* flags between (1 << 8) and (1 << 15) are set to 1 already, for future options */
244
245 #define SCE_LAY_ALL_Z       (1 << 15)
246 /* #define SCE_LAY_XOR         (1 << 16) */  /* UNUSED */
247 #define SCE_LAY_DISABLE     (1 << 17)
248 #define SCE_LAY_ZMASK       (1 << 18)
249 #define SCE_LAY_NEG_ZMASK   (1 << 19)
250
251 /* SceneRenderLayer.passflag */
252 typedef enum eScenePassType {
253         SCE_PASS_COMBINED                 = (1 << 0),
254         SCE_PASS_Z                        = (1 << 1),
255         SCE_PASS_DEPRECATED_1             = (1 << 2), /* RGBA */
256         SCE_PASS_DEPRECATED_2             = (1 << 3), /* DIFFUSE */
257         SCE_PASS_DEPRECATED_3             = (1 << 4), /* SPEC */
258         SCE_PASS_SHADOW                   = (1 << 5),
259         SCE_PASS_AO                       = (1 << 6),
260         SCE_PASS_DEPRECATED_4             = (1 << 7), /* REFLECT */
261         SCE_PASS_NORMAL                   = (1 << 8),
262         SCE_PASS_VECTOR                   = (1 << 9),
263         SCE_PASS_DEPRECATED_5             = (1 << 10), /* REFRACT */
264         SCE_PASS_INDEXOB                  = (1 << 11),
265         SCE_PASS_UV                       = (1 << 12),
266         SCE_PASS_DEPRECATED_6             = (1 << 13), /* INDIRECT */
267         SCE_PASS_MIST                     = (1 << 14),
268         SCE_PASS_RAYHITS                  = (1 << 15),
269         SCE_PASS_EMIT                     = (1 << 16),
270         SCE_PASS_ENVIRONMENT              = (1 << 17),
271         SCE_PASS_INDEXMA                  = (1 << 18),
272         SCE_PASS_DIFFUSE_DIRECT           = (1 << 19),
273         SCE_PASS_DIFFUSE_INDIRECT         = (1 << 20),
274         SCE_PASS_DIFFUSE_COLOR            = (1 << 21),
275         SCE_PASS_GLOSSY_DIRECT            = (1 << 22),
276         SCE_PASS_GLOSSY_INDIRECT          = (1 << 23),
277         SCE_PASS_GLOSSY_COLOR             = (1 << 24),
278         SCE_PASS_TRANSM_DIRECT            = (1 << 25),
279         SCE_PASS_TRANSM_INDIRECT          = (1 << 26),
280         SCE_PASS_TRANSM_COLOR             = (1 << 27),
281         SCE_PASS_SUBSURFACE_DIRECT        = (1 << 28),
282         SCE_PASS_SUBSURFACE_INDIRECT      = (1 << 29),
283         SCE_PASS_SUBSURFACE_COLOR         = (1 << 30),
284         SCE_PASS_ROUGHNESS                = (1u << 31u),
285 } eScenePassType;
286
287 #define RE_PASSNAME_DEPRECATED "Deprecated"
288
289 #define RE_PASSNAME_COMBINED "Combined"
290 #define RE_PASSNAME_Z "Depth"
291 #define RE_PASSNAME_VECTOR "Vector"
292 #define RE_PASSNAME_NORMAL "Normal"
293 #define RE_PASSNAME_UV "UV"
294 #define RE_PASSNAME_EMIT "Emit"
295 #define RE_PASSNAME_SHADOW "Shadow"
296
297 #define RE_PASSNAME_AO "AO"
298 #define RE_PASSNAME_ENVIRONMENT "Env"
299 #define RE_PASSNAME_INDEXOB "IndexOB"
300 #define RE_PASSNAME_INDEXMA "IndexMA"
301 #define RE_PASSNAME_MIST "Mist"
302
303 #define RE_PASSNAME_RAYHITS "RayHits"
304 #define RE_PASSNAME_DIFFUSE_DIRECT "DiffDir"
305 #define RE_PASSNAME_DIFFUSE_INDIRECT "DiffInd"
306 #define RE_PASSNAME_DIFFUSE_COLOR "DiffCol"
307 #define RE_PASSNAME_GLOSSY_DIRECT "GlossDir"
308 #define RE_PASSNAME_GLOSSY_INDIRECT "GlossInd"
309 #define RE_PASSNAME_GLOSSY_COLOR "GlossCol"
310 #define RE_PASSNAME_TRANSM_DIRECT "TransDir"
311 #define RE_PASSNAME_TRANSM_INDIRECT "TransInd"
312 #define RE_PASSNAME_TRANSM_COLOR "TransCol"
313
314 #define RE_PASSNAME_SUBSURFACE_DIRECT "SubsurfaceDir"
315 #define RE_PASSNAME_SUBSURFACE_INDIRECT "SubsurfaceInd"
316 #define RE_PASSNAME_SUBSURFACE_COLOR "SubsurfaceCol"
317
318
319 /* View - MultiView */
320 typedef struct SceneRenderView {
321         struct SceneRenderView *next, *prev;
322
323         /** MAX_NAME. */
324         char name[64];
325         /** MAX_NAME. */
326         char suffix[64];
327
328         int viewflag;
329         int pad[2];
330         char pad2[4];
331
332 } SceneRenderView;
333
334 /* SceneRenderView.viewflag */
335 #define SCE_VIEW_DISABLE                (1<<0)
336
337 /* RenderData.views_format */
338 enum {
339         SCE_VIEWS_FORMAT_STEREO_3D = 0,
340         SCE_VIEWS_FORMAT_MULTIVIEW = 1,
341 };
342
343 /* ImageFormatData.views_format (also used for Sequence.views_format) */
344 enum {
345         R_IMF_VIEWS_INDIVIDUAL = 0,
346         R_IMF_VIEWS_STEREO_3D  = 1,
347         R_IMF_VIEWS_MULTIVIEW  = 2,
348 };
349
350 typedef struct Stereo3dFormat {
351         short flag;
352         /** Encoding mode. */
353         char display_mode;
354         /** Anaglyph scheme for the user display. */
355         char anaglyph_type;
356         /** Interlace type for the user display. */
357         char interlace_type;
358         char pad[3];
359 } Stereo3dFormat;
360
361 /* Stereo3dFormat.display_mode */
362 typedef enum eStereoDisplayMode {
363         S3D_DISPLAY_ANAGLYPH    = 0,
364         S3D_DISPLAY_INTERLACE   = 1,
365         S3D_DISPLAY_PAGEFLIP    = 2,
366         S3D_DISPLAY_SIDEBYSIDE  = 3,
367         S3D_DISPLAY_TOPBOTTOM   = 4,
368 } eStereoDisplayMode;
369
370 /* Stereo3dFormat.flag */
371 typedef enum eStereo3dFlag {
372         S3D_INTERLACE_SWAP        = (1 << 0),
373         S3D_SIDEBYSIDE_CROSSEYED  = (1 << 1),
374         S3D_SQUEEZED_FRAME        = (1 << 2),
375 } eStereo3dFlag;
376
377 /* Stereo3dFormat.anaglyph_type */
378 typedef enum eStereo3dAnaglyphType {
379         S3D_ANAGLYPH_REDCYAN      = 0,
380         S3D_ANAGLYPH_GREENMAGENTA = 1,
381         S3D_ANAGLYPH_YELLOWBLUE   = 2,
382 } eStereo3dAnaglyphType;
383
384 /* Stereo3dFormat.interlace_type */
385 typedef enum eStereo3dInterlaceType {
386         S3D_INTERLACE_ROW          = 0,
387         S3D_INTERLACE_COLUMN       = 1,
388         S3D_INTERLACE_CHECKERBOARD = 2,
389 } eStereo3dInterlaceType;
390
391 /* *************************************************************** */
392
393 /* Generic image format settings,
394  * this is used for NodeImageFile and IMAGE_OT_save_as operator too.
395  *
396  * note: its a bit strange that even though this is an image format struct
397  * the imtype can still be used to select video formats.
398  * RNA ensures these enum's are only selectable for render output.
399  */
400 typedef struct ImageFormatData {
401         /**
402          * R_IMF_IMTYPE_PNG, R_...
403          * \note, video types should only ever be set from this structure when used from RenderData.
404          */
405         char imtype;
406         /**
407          * bits per channel, R_IMF_CHAN_DEPTH_8 -> 32,
408          * not a flag, only set 1 at a time. */
409         char depth;
410
411         /** R_IMF_PLANES_BW, R_IMF_PLANES_RGB, R_IMF_PLANES_RGBA. */
412         char planes;
413         /** Generic options for all image types, alpha zbuffer. */
414         char flag;
415
416         /** (0 - 100), eg: jpeg quality. */
417         char quality;
418         /** (0 - 100), eg: png compression. */
419         char compress;
420
421
422         /* --- format specific --- */
423
424         /* OpenEXR */
425         char  exr_codec;
426
427         /* Cineon */
428         char  cineon_flag;
429         short cineon_white, cineon_black;
430         float cineon_gamma;
431
432         /* Jpeg2000 */
433         char  jp2_flag;
434         char jp2_codec;
435
436         /* TIFF */
437         char tiff_codec;
438
439         char pad[4];
440
441         /* Multiview */
442         char views_format;
443         Stereo3dFormat stereo3d_format;
444
445         /* color management */
446         ColorManagedViewSettings view_settings;
447         ColorManagedDisplaySettings display_settings;
448 } ImageFormatData;
449
450
451 /* ImageFormatData.imtype */
452 #define R_IMF_IMTYPE_TARGA           0
453 #define R_IMF_IMTYPE_IRIS            1
454 /* #define R_HAMX                    2 */ /* hamx is nomore */
455 /* #define R_FTYPE                   3 */ /* ftype is nomore */
456 #define R_IMF_IMTYPE_JPEG90          4
457 /* #define R_MOVIE                   5 */ /* movie is nomore */
458 #define R_IMF_IMTYPE_IRIZ            7
459 #define R_IMF_IMTYPE_RAWTGA         14
460 #define R_IMF_IMTYPE_AVIRAW         15
461 #define R_IMF_IMTYPE_AVIJPEG        16
462 #define R_IMF_IMTYPE_PNG            17
463 /* #define R_IMF_IMTYPE_AVICODEC    18 */ /* avicodec is nomore */
464 /* #define R_IMF_IMTYPE_QUICKTIME   19 */ /* quicktime is nomore */
465 #define R_IMF_IMTYPE_BMP            20
466 #define R_IMF_IMTYPE_RADHDR         21
467 #define R_IMF_IMTYPE_TIFF           22
468 #define R_IMF_IMTYPE_OPENEXR        23
469 #define R_IMF_IMTYPE_FFMPEG         24
470 /* #define R_IMF_IMTYPE_FRAMESERVER    25 */ /* frame server is nomore */
471 #define R_IMF_IMTYPE_CINEON         26
472 #define R_IMF_IMTYPE_DPX            27
473 #define R_IMF_IMTYPE_MULTILAYER     28
474 #define R_IMF_IMTYPE_DDS            29
475 #define R_IMF_IMTYPE_JP2            30
476 #define R_IMF_IMTYPE_H264           31
477 #define R_IMF_IMTYPE_XVID           32
478 #define R_IMF_IMTYPE_THEORA         33
479 #define R_IMF_IMTYPE_PSD            34
480
481 #define R_IMF_IMTYPE_INVALID        255
482
483 /* ImageFormatData.flag */
484 #define R_IMF_FLAG_ZBUF         (1<<0)   /* was R_OPENEXR_ZBUF */
485 #define R_IMF_FLAG_PREVIEW_JPG  (1<<1)   /* was R_PREVIEW_JPG */
486
487 /* return values from BKE_imtype_valid_depths, note this is depts per channel */
488 #define R_IMF_CHAN_DEPTH_1  (1<<0) /* 1bits  (unused) */
489 #define R_IMF_CHAN_DEPTH_8  (1<<1) /* 8bits  (default) */
490 #define R_IMF_CHAN_DEPTH_10 (1<<2) /* 10bits (uncommon, Cineon/DPX support) */
491 #define R_IMF_CHAN_DEPTH_12 (1<<3) /* 12bits (uncommon, jp2/DPX support) */
492 #define R_IMF_CHAN_DEPTH_16 (1<<4) /* 16bits (tiff, halff float exr) */
493 #define R_IMF_CHAN_DEPTH_24 (1<<5) /* 24bits (unused) */
494 #define R_IMF_CHAN_DEPTH_32 (1<<6) /* 32bits (full float exr) */
495
496 /* ImageFormatData.planes */
497 #define R_IMF_PLANES_RGB   24
498 #define R_IMF_PLANES_RGBA  32
499 #define R_IMF_PLANES_BW    8
500
501 /* ImageFormatData.exr_codec */
502 #define R_IMF_EXR_CODEC_NONE  0
503 #define R_IMF_EXR_CODEC_PXR24 1
504 #define R_IMF_EXR_CODEC_ZIP   2
505 #define R_IMF_EXR_CODEC_PIZ   3
506 #define R_IMF_EXR_CODEC_RLE   4
507 #define R_IMF_EXR_CODEC_ZIPS  5
508 #define R_IMF_EXR_CODEC_B44   6
509 #define R_IMF_EXR_CODEC_B44A  7
510 #define R_IMF_EXR_CODEC_DWAA  8
511 #define R_IMF_EXR_CODEC_DWAB  9
512 #define R_IMF_EXR_CODEC_MAX  10
513
514 /* ImageFormatData.jp2_flag */
515 #define R_IMF_JP2_FLAG_YCC          (1<<0)  /* when disabled use RGB */ /* was R_JPEG2K_YCC */
516 #define R_IMF_JP2_FLAG_CINE_PRESET  (1<<1)  /* was R_JPEG2K_CINE_PRESET */
517 #define R_IMF_JP2_FLAG_CINE_48      (1<<2)  /* was R_JPEG2K_CINE_48FPS */
518
519 /* ImageFormatData.jp2_codec */
520 #define R_IMF_JP2_CODEC_JP2  0
521 #define R_IMF_JP2_CODEC_J2K  1
522
523 /* ImageFormatData.cineon_flag */
524 #define R_IMF_CINEON_FLAG_LOG (1<<0)  /* was R_CINEON_LOG */
525
526 /* ImageFormatData.tiff_codec */
527 enum {
528         R_IMF_TIFF_CODEC_DEFLATE   = 0,
529         R_IMF_TIFF_CODEC_LZW       = 1,
530         R_IMF_TIFF_CODEC_PACKBITS  = 2,
531         R_IMF_TIFF_CODEC_NONE      = 3,
532 };
533
534 typedef struct BakeData {
535         struct ImageFormatData im_format;
536
537         /** FILE_MAX. */
538         char filepath[1024];
539
540         short width, height;
541         short margin, flag;
542
543         float cage_extrusion;
544         int pass_filter;
545
546         char normal_swizzle[3];
547         char normal_space;
548
549         char save_mode;
550         char pad[3];
551
552         struct Object *cage_object;
553 } BakeData;
554
555 /* BakeData.normal_swizzle (char) */
556 typedef enum eBakeNormalSwizzle {
557         R_BAKE_POSX = 0,
558         R_BAKE_POSY = 1,
559         R_BAKE_POSZ = 2,
560         R_BAKE_NEGX = 3,
561         R_BAKE_NEGY = 4,
562         R_BAKE_NEGZ = 5,
563 } eBakeNormalSwizzle;
564
565 /* BakeData.save_mode (char) */
566 typedef enum eBakeSaveMode {
567         R_BAKE_SAVE_INTERNAL = 0,
568         R_BAKE_SAVE_EXTERNAL = 1,
569 } eBakeSaveMode;
570
571 /* BakeData.pass_filter */
572 typedef enum eBakePassFilter {
573         R_BAKE_PASS_FILTER_NONE           = 0,
574         R_BAKE_PASS_FILTER_AO             = (1 << 0),
575         R_BAKE_PASS_FILTER_EMIT           = (1 << 1),
576         R_BAKE_PASS_FILTER_DIFFUSE        = (1 << 2),
577         R_BAKE_PASS_FILTER_GLOSSY         = (1 << 3),
578         R_BAKE_PASS_FILTER_TRANSM         = (1 << 4),
579         R_BAKE_PASS_FILTER_SUBSURFACE     = (1 << 5),
580         R_BAKE_PASS_FILTER_DIRECT         = (1 << 6),
581         R_BAKE_PASS_FILTER_INDIRECT       = (1 << 7),
582         R_BAKE_PASS_FILTER_COLOR          = (1 << 8),
583 } eBakePassFilter;
584
585 #define R_BAKE_PASS_FILTER_ALL (~0)
586
587 /* RenderEngineSettingsClay.options */
588 typedef enum ClayFlagSettings {
589         CLAY_USE_AO     = (1 << 0),
590         CLAY_USE_HSV    = (1 << 1),
591 } ClayFlagSettings;
592
593 /* *************************************************************** */
594 /* Render Data */
595
596 typedef struct RenderData {
597         struct ImageFormatData im_format;
598
599         struct AviCodecData *avicodecdata;
600         struct FFMpegCodecData ffcodecdata;
601
602         /** Frames as in 'images'. */
603         int cfra, sfra, efra;
604         /** Subframe offset from cfra, in 0.0-1.0. */
605         float subframe;
606         /** Start+end frames of preview range. */
607         int psfra, pefra;
608
609         int images, framapto;
610         short flag, threads;
611
612         float framelen, blurfac;
613
614         /** Frames to jump during render/playback. */
615         int frame_step;
616
617         /** Standalone player stereo settings */  //  XXX deprecated since .2.5
618         short stereomode  DNA_DEPRECATED;
619
620         /** For the dimensions presets menu. */
621         short dimensionspreset;
622
623         /** Size in %. */
624         short size;
625
626         short pad6;
627
628         /* from buttons: */
629         /**
630          * The desired number of pixels in the x direction
631          */
632         int xsch;
633         /**
634          * The desired number of pixels in the y direction
635          */
636         int ysch;
637
638         /**
639          * render tile dimensions
640          */
641         int tilex, tiley;
642
643         short planes DNA_DEPRECATED;
644         short imtype DNA_DEPRECATED;
645         short subimtype  DNA_DEPRECATED;
646         short quality  DNA_DEPRECATED;
647
648         /**
649          * Render to image editor, fullscreen or to new window.
650          */
651         short displaymode;
652         char use_lock_interface;
653         char pad7;
654
655         /**
656          * Flags for render settings. Use bit-masking to access the settings.
657          */
658         int scemode;
659
660         /**
661          * Flags for render settings. Use bit-masking to access the settings.
662          */
663         int mode;
664
665         /**
666          * What to do with the sky/background.
667          * Picks sky/premul blending for the background.
668          */
669         short alphamode;
670
671         /**
672          * The number of samples to use per pixel.
673          */
674         short osa;
675
676         short frs_sec, pad[7];
677
678
679         /* safety, border and display rect */
680         rctf safety, border;
681         rcti disprect;
682
683         /* information on different layers to be rendered */
684         /** Converted to Scene->view_layers. */
685         ListBase layers DNA_DEPRECATED;
686         /** Converted to Scene->active_layer. */
687         short actlay DNA_DEPRECATED;
688         short pad1;
689
690         /**
691          * Adjustment factors for the aspect ratio in the x direction, was a short in 2.45
692          */
693         float xasp, yasp;
694
695         float frs_sec_base;
696
697         /**
698          * Value used to define filter size for all filter options  */
699         float gauss;
700
701
702         /* color management settings - color profiles, gamma correction, etc */
703         int color_mgt_flag;
704
705          /* Dither noise intensity */
706         float dither_intensity;
707
708         /* Bake Render options */
709         short bake_mode, bake_flag;
710         short bake_filter, bake_samples;
711         float bake_biasdist, bake_user_scale;
712
713         /* path to render output */
714         /** 1024 = FILE_MAX. */
715         char pic[1024];
716
717         /* stamps flags. */
718         int stamp;
719         /** Select one of blenders bitmap fonts. */
720         short stamp_font_id, pad3;
721
722         /* stamp info user data. */
723         char stamp_udata[768];
724
725         /* foreground/background color. */
726         float fg_stamp[4];
727         float bg_stamp[4];
728
729         /* sequencer options */
730         char seq_prev_type;
731         /** UNUSED!. */
732         char seq_rend_type;
733         /** Flag use for sequence render/draw. */
734         char seq_flag;
735         char pad5[5];
736
737         /* render simplify */
738         short simplify_subsurf;
739         short simplify_subsurf_render;
740         short simplify_gpencil;
741         short pad10;
742         float simplify_particles;
743         float simplify_particles_render;
744
745         /* Freestyle line thickness options */
746         int line_thickness_mode;
747         /** In pixels. */
748         float unit_line_thickness;
749
750         /* render engine */
751         char engine[32];
752         int pad2;
753
754         /* Cycles baking */
755         struct BakeData bake;
756
757         int preview_start_resolution;
758         short preview_pixel_size;
759
760         /* Type of the debug pass to use.
761          * Only used when built with debug passes support.
762          */
763         short debug_pass_type;
764
765         /* MultiView */
766         /** SceneRenderView. */
767         ListBase views;
768         short actview;
769         short views_format;
770
771         /* Hair Display */
772         short hair_type, hair_subdiv;
773
774         /* Motion blur shutter */
775         struct CurveMapping mblur_shutter_curve;
776 } RenderData;
777
778 /* RenderData.hair_type */
779 typedef enum eHairType {
780         SCE_HAIR_SHAPE_STRAND      = 0,
781         SCE_HAIR_SHAPE_STRIP       = 1,
782 } eHairType;
783
784
785 /* *************************************************************** */
786 /* Render Conversion/Simplfication Settings */
787
788 /* control render convert and shading engine */
789 typedef struct RenderProfile {
790         struct RenderProfile *next, *prev;
791         char name[32];
792
793         short particle_perc;
794         short subsurf_max;
795         short shadbufsample_max;
796         short pad1;
797
798         float ao_error, pad2;
799
800 } RenderProfile;
801
802 /* UV Paint */
803 /* ToolSettings.uv_sculpt_settings */
804 #define UV_SCULPT_LOCK_BORDERS                          1
805 #define UV_SCULPT_ALL_ISLANDS                           2
806
807 /* ToolSettings.uv_sculpt_tool */
808 #define UV_SCULPT_TOOL_PINCH                            1
809 #define UV_SCULPT_TOOL_RELAX                            2
810 #define UV_SCULPT_TOOL_GRAB                                     3
811
812 /* ToolSettings.uv_relax_method */
813 #define UV_SCULPT_TOOL_RELAX_LAPLACIAN  1
814 #define UV_SCULPT_TOOL_RELAX_HC                 2
815
816 /* Stereo Flags */
817 #define STEREO_RIGHT_NAME "right"
818 #define STEREO_LEFT_NAME "left"
819 #define STEREO_RIGHT_SUFFIX "_R"
820 #define STEREO_LEFT_SUFFIX "_L"
821
822 /* View3D.stereo3d_camera / View3D.multiview_eye / ImageUser.multiview_eye */
823 typedef enum eStereoViews {
824         STEREO_LEFT_ID = 0,
825         STEREO_RIGHT_ID = 1,
826         STEREO_3D_ID = 2,
827         STEREO_MONO_ID = 3,
828 } eStereoViews;
829
830 /* *************************************************************** */
831 /* Markers */
832
833 typedef struct TimeMarker {
834         struct TimeMarker *next, *prev;
835         int frame;
836         char name[64];
837         unsigned int flag;
838         struct Object *camera;
839 } TimeMarker;
840
841 /* *************************************************************** */
842 /* Paint Mode/Tool Data */
843
844 #define PAINT_MAX_INPUT_SAMPLES 64
845
846 typedef struct Paint_Runtime {
847         /* Avoid having to compare with scene pointer everywhere. */
848         unsigned int tool_offset;
849         unsigned short ob_mode;
850         char _pad[2];
851 } Paint_Runtime;
852
853 /* We might want to store other things here. */
854 typedef struct PaintToolSlot {
855         struct Brush *brush;
856 } PaintToolSlot;
857
858 /* Paint Tool Base */
859 typedef struct Paint {
860         struct Brush *brush;
861
862         /* Each tool has it's own active brush,
863          * The currently active tool is defined by the current 'brush'. */
864         struct PaintToolSlot *tool_slots;
865         int                   tool_slots_len;
866         char _pad1[4];
867
868         struct Palette *palette;
869         /** Cavity curve. */
870         struct CurveMapping *cavity_curve;
871
872         /* WM Paint cursor */
873         void *paint_cursor;
874         unsigned char paint_cursor_col[4];
875
876         /* enum ePaintFlags */
877         int flags;
878
879         /* Paint stroke can use up to PAINT_MAX_INPUT_SAMPLES inputs to
880          * smooth the stroke */
881         int num_input_samples;
882
883         /* flags used for symmetry */
884         int symmetry_flags;
885
886         float tile_offset[3];
887         int pad2;
888
889         struct Paint_Runtime runtime;
890 } Paint;
891
892 /* ------------------------------------------- */
893 /* Image Paint */
894
895 /* Texture/Image Editor */
896 typedef struct ImagePaintSettings {
897         Paint paint;
898
899         short flag, missing_data;
900
901         /* for projection painting only */
902         short seam_bleed, normal_angle;
903         /** Capture size for re-projection. */
904         short screen_grab_size[2];
905
906         /** Mode used for texture painting. */
907         int mode;
908
909         /** Wm handle. */
910         void *paintcursor;
911         /** Workaround until we support true layer masks. */
912         struct Image *stencil;
913         /** Clone layer for image mode for projective texture painting. */
914         struct Image *clone;
915         /** Canvas when the explicit system is used for painting. */
916         struct Image *canvas;
917         float stencil_col[3];
918         /** Dither amount used when painting on byte images. */
919         float dither;
920         /** Display texture interpolation method. */
921         int interp;
922         int pad;
923 } ImagePaintSettings;
924
925 /* ------------------------------------------- */
926 /* Particle Edit */
927
928 /* Settings for a Particle Editing Brush */
929 typedef struct ParticleBrushData {
930         /** Common setting. */
931         short size;
932         /** For specific brushes only. */
933         short step, invert, count;
934         int flag;
935         float strength;
936 } ParticleBrushData;
937
938 /* Particle Edit Mode Settings */
939 typedef struct ParticleEditSettings {
940         short flag;
941         short totrekey;
942         short totaddkey;
943         short brushtype;
944
945         ParticleBrushData brush[7];
946         /** Runtime. */
947         void *paintcursor;
948
949         float emitterdist, rt;
950
951         int selectmode;
952         int edittype;
953
954         int draw_step, fade_frames;
955
956         struct Scene *scene;
957         struct Object *object;
958         struct Object *shape_object;
959 } ParticleEditSettings;
960
961 /* ------------------------------------------- */
962 /* Sculpt */
963
964 /* Sculpt */
965 typedef struct Sculpt {
966         Paint paint;
967
968         /* For rotating around a pivot point */
969         //float pivot[3]; XXX not used?
970         int flags;
971
972         /* Control tablet input */
973         //char tablet_size, tablet_strength; XXX not used?
974         int radial_symm[3];
975
976         /* Maximum edge length for dynamic topology sculpting (in pixels) */
977         float detail_size;
978
979         /* Direction used for SCULPT_OT_symmetrize operator */
980         int symmetrize_direction;
981
982         /* gravity factor for sculpting */
983         float gravity_factor;
984
985         /* scale for constant detail size */
986         /** Constant detail resolution (Blender unit / constant_detail). */
987         float constant_detail;
988         float detail_percent;
989         float pad;
990
991         struct Object *gravity_object;
992 } Sculpt;
993
994 typedef struct UvSculpt {
995         Paint paint;
996 } UvSculpt;
997
998 /* grease pencil drawing brushes */
999 typedef struct GpPaint {
1000         Paint paint;
1001 } GpPaint;
1002
1003 /* ------------------------------------------- */
1004 /* Vertex Paint */
1005
1006 /* Vertex Paint */
1007 typedef struct VPaint {
1008         Paint paint;
1009         char flag;
1010         char pad[3];
1011         /** For mirrored painting. */
1012         int radial_symm[3];
1013 } VPaint;
1014
1015 /* VPaint.flag */
1016 enum {
1017         /* weight paint only */
1018         VP_FLAG_VGROUP_RESTRICT     = (1 << 7),
1019 };
1020
1021 /* ------------------------------------------- */
1022 /* GPencil Stroke Sculpting */
1023
1024 /* GP_Sculpt_Settings.brushtype */
1025 typedef enum eGP_Sculpt_Types {
1026         GP_SCULPT_TYPE_SMOOTH    = 0,
1027         GP_SCULPT_TYPE_THICKNESS = 1,
1028         GP_SCULPT_TYPE_STRENGTH  = 2,
1029         GP_SCULPT_TYPE_GRAB      = 3,
1030         GP_SCULPT_TYPE_PUSH      = 4,
1031         GP_SCULPT_TYPE_TWIST     = 5,
1032         GP_SCULPT_TYPE_PINCH     = 6,
1033         GP_SCULPT_TYPE_RANDOMIZE = 7,
1034         GP_SCULPT_TYPE_CLONE     = 8,
1035         GP_SCULPT_TYPE_SUBDIVIDE = 9,
1036         GP_SCULPT_TYPE_SIMPLIFY  = 10,
1037         /* add any sculpt brush above this value */
1038         GP_SCULPT_TYPE_WEIGHT    = 11,
1039         /* add any weight paint brush below this value. Do no mix brushes */
1040
1041         /* !!! Update GP_Sculpt_Data brush[###]; below !!! */
1042         GP_SCULPT_TYPE_MAX,
1043 } eGP_Sculpt_Types;
1044
1045 /* GP_Sculpt_Settings.lock_axis */
1046 typedef enum eGP_Lockaxis_Types {
1047         GP_LOCKAXIS_VIEW = 0,
1048         GP_LOCKAXIS_X = 1,
1049         GP_LOCKAXIS_Y = 2,
1050         GP_LOCKAXIS_Z = 3,
1051 } eGP_Lockaxis_Types;
1052
1053 /* Settings for a GPencil Stroke Sculpting Brush */
1054 typedef struct GP_Sculpt_Data {
1055         /** Radius of brush. */
1056         short size;
1057         /** EGP_Sculpt_Flag. */
1058         short flag;
1059         /** Strength of effect. */
1060         float strength;
1061         /** Cursor color for add. */
1062         float curcolor_add[3];
1063         /** Cursor color for sub. */
1064         float curcolor_sub[3];
1065         /** Target weight. */
1066         float weight;
1067         char _pad[4];
1068 } GP_Sculpt_Data;
1069
1070 /* Settings for a GPencil Speed Guide */
1071 typedef struct GP_Sculpt_Guide {
1072         char use_guide;
1073         char use_snapping;
1074         char reference_point;
1075         char type;
1076         char _pad2[4];
1077         float angle;
1078         float angle_snap;
1079         float spacing;
1080         float location[3];
1081         struct Object *reference_object;
1082 } GP_Sculpt_Guide;
1083
1084 /* GP_Sculpt_Data.flag */
1085 typedef enum eGP_Sculpt_Flag {
1086         /* invert the effect of the brush */
1087         GP_SCULPT_FLAG_INVERT       = (1 << 0),
1088         /* adjust strength using pen pressure */
1089         GP_SCULPT_FLAG_USE_PRESSURE = (1 << 1),
1090
1091         /* strength of brush falls off with distance from cursor */
1092         GP_SCULPT_FLAG_USE_FALLOFF  = (1 << 2),
1093
1094         /* smooth brush affects pressure values as well */
1095         GP_SCULPT_FLAG_SMOOTH_PRESSURE  = (1 << 3),
1096         /* enable screen cursor */
1097         GP_SCULPT_FLAG_ENABLE_CURSOR = (1 << 4),
1098         /* temporary invert action */
1099         GP_SCULPT_FLAG_TMP_INVERT = (1 << 5),
1100         /* adjust radius using pen pressure */
1101         GP_SCULPT_FLAG_PRESSURE_RADIUS = (1 << 6),
1102 } eGP_Sculpt_Flag;
1103
1104 /* GPencil Stroke Sculpting Settings */
1105 typedef struct GP_Sculpt_Settings {
1106         /** GP_SCULPT_TYPE_MAX. */
1107         GP_Sculpt_Data brush[12];
1108         /** Runtime. */
1109         void *paintcursor;
1110
1111         /** #eGP_Sculpt_Types (sculpt). */
1112         int brushtype;
1113         /** #eGP_Sculpt_SettingsFlag. */
1114         int flag;
1115         /** #eGP_Lockaxis_Types lock drawing to one axis. */
1116         int lock_axis;
1117         /** Threshold for intersections */
1118         float isect_threshold;
1119
1120         /* weight paint is a submode of sculpt but use its own index. All weight paint
1121          * brushes must be defined at the end of the brush array.
1122          */
1123         /** #eGP_Sculpt_Types (weight paint). */
1124         int weighttype;
1125         char pad[4];
1126         /** Multiframe edit falloff effect by frame. */
1127         struct CurveMapping *cur_falloff;
1128         /** Curve used for primitve tools. */
1129         struct CurveMapping *cur_primitive;
1130         /** Guides used for paint tools */
1131         struct GP_Sculpt_Guide guide;
1132 } GP_Sculpt_Settings;
1133
1134 /* GP_Sculpt_Settings.flag */
1135 typedef enum eGP_Sculpt_SettingsFlag {
1136         /* only affect selected points */
1137         GP_SCULPT_SETT_FLAG_SELECT_MASK = (1 << 0),
1138         /* apply brush to position */
1139         GP_SCULPT_SETT_FLAG_APPLY_POSITION = (1 << 1),
1140         /* apply brush to strength */
1141         GP_SCULPT_SETT_FLAG_APPLY_STRENGTH = (1 << 2),
1142         /* apply brush to thickness */
1143         GP_SCULPT_SETT_FLAG_APPLY_THICKNESS = (1 << 3),
1144         /* apply brush to thickness */
1145         GP_SCULPT_SETT_FLAG_WEIGHT_MODE = (1 << 4),
1146         /* enable falloff for multiframe editing */
1147         GP_SCULPT_SETT_FLAG_FRAME_FALLOFF = (1 << 5),
1148         /* apply brush to uv data */
1149         GP_SCULPT_SETT_FLAG_APPLY_UV = (1 << 6),
1150         /* apply primitve curve */
1151         GP_SCULPT_SETT_FLAG_PRIMITIVE_CURVE = (1 << 7),
1152 } eGP_Sculpt_SettingsFlag;
1153
1154 /* Settings for GP Interpolation Operators */
1155 typedef struct GP_Interpolate_Settings {
1156         /** #eGP_Interpolate_SettingsFlag. */
1157         short flag;
1158
1159         /** #eGP_Interpolate_Type - Interpolation Mode. */
1160         char type;
1161         /** #eBezTriple_Easing - Easing mode (if easing equation used). */
1162         char easing;
1163
1164         /** BEZT_IPO_BACK. */
1165         float back;
1166         /** BEZT_IPO_ELASTIC. */
1167         float amplitude, period;
1168
1169         /** Custom interpolation curve (for use with GP_IPO_CURVEMAP). */
1170         struct CurveMapping *custom_ipo;
1171 } GP_Interpolate_Settings;
1172
1173 /* GP_Interpolate_Settings.flag */
1174 typedef enum eGP_Interpolate_SettingsFlag {
1175         /* apply interpolation to all layers */
1176         GP_TOOLFLAG_INTERPOLATE_ALL_LAYERS    = (1 << 0),
1177         /* apply interpolation to only selected */
1178         GP_TOOLFLAG_INTERPOLATE_ONLY_SELECTED = (1 << 1),
1179 } eGP_Interpolate_SettingsFlag;
1180
1181 /* GP_Interpolate_Settings.type */
1182 typedef enum eGP_Interpolate_Type {
1183         /* Traditional Linear Interpolation */
1184         GP_IPO_LINEAR   = 0,
1185
1186         /* CurveMap Defined Interpolation */
1187         GP_IPO_CURVEMAP = 1,
1188
1189         /* Easing Equations */
1190         GP_IPO_BACK = 3,
1191         GP_IPO_BOUNCE = 4,
1192         GP_IPO_CIRC = 5,
1193         GP_IPO_CUBIC = 6,
1194         GP_IPO_ELASTIC = 7,
1195         GP_IPO_EXPO = 8,
1196         GP_IPO_QUAD = 9,
1197         GP_IPO_QUART = 10,
1198         GP_IPO_QUINT = 11,
1199         GP_IPO_SINE = 12,
1200 } eGP_Interpolate_Type;
1201
1202 /* *************************************************************** */
1203 /* Unified Paint Settings
1204  */
1205
1206 /* These settings can override the equivalent fields in the active
1207  * Brush for any paint mode; the flag field controls whether these
1208  * values are used */
1209 typedef struct UnifiedPaintSettings {
1210         /* unified radius of brush in pixels */
1211         int size;
1212
1213         /* unified radius of brush in Blender units */
1214         float unprojected_radius;
1215
1216         /* unified strength of brush */
1217         float alpha;
1218
1219         /* unified brush weight, [0, 1] */
1220         float weight;
1221
1222         /* unified brush color */
1223         float rgb[3];
1224         /* unified brush secondary color */
1225         float secondary_rgb[3];
1226
1227         /* user preferences for sculpt and paint */
1228         int flag;
1229
1230         /* rake rotation */
1231
1232         /* record movement of mouse so that rake can start at an intuitive angle */
1233         float last_rake[2];
1234         float last_rake_angle;
1235
1236         int last_stroke_valid;
1237         float average_stroke_accum[3];
1238         int average_stroke_counter;
1239
1240
1241         float brush_rotation;
1242         float brush_rotation_sec;
1243
1244         /*******************************************************************************
1245          * all data below are used to communicate with cursor drawing and tex sampling *
1246          *******************************************************************************/
1247         int anchored_size;
1248
1249         /**
1250          * Normalization factor due to accumulated value of curve along spacing.
1251          * Calculated when brush spacing changes to dampen strength of stroke
1252          * if space attenuation is used.
1253          */
1254         float overlap_factor;
1255         char draw_inverted;
1256         /* check is there an ongoing stroke right now */
1257         char stroke_active;
1258
1259         char draw_anchored;
1260         char do_linear_conversion;
1261
1262         /* store last location of stroke or whether the mesh was hit.
1263          * Valid only while stroke is active */
1264         float last_location[3];
1265         int last_hit;
1266
1267         float anchored_initial_mouse[2];
1268
1269         /* radius of brush, premultiplied with pressure.
1270          * In case of anchored brushes contains the anchored radius */
1271         float pixel_radius;
1272
1273         /* drawing pressure */
1274         float size_pressure_value;
1275
1276         /* position of mouse, used to sample the texture */
1277         float tex_mouse[2];
1278
1279         /* position of mouse, used to sample the mask texture */
1280         float mask_tex_mouse[2];
1281
1282         /* ColorSpace cache to avoid locking up during sampling */
1283         struct ColorSpace *colorspace;
1284 } UnifiedPaintSettings;
1285
1286 /* UnifiedPaintSettings.flag */
1287 typedef enum {
1288         UNIFIED_PAINT_SIZE  = (1 << 0),
1289         UNIFIED_PAINT_ALPHA = (1 << 1),
1290         UNIFIED_PAINT_WEIGHT = (1 << 5),
1291         UNIFIED_PAINT_COLOR = (1 << 6),
1292
1293         /* only used if unified size is enabled, mirrors the brush flags
1294          * BRUSH_LOCK_SIZE and BRUSH_SIZE_PRESSURE */
1295         UNIFIED_PAINT_BRUSH_LOCK_SIZE = (1 << 2),
1296         UNIFIED_PAINT_BRUSH_SIZE_PRESSURE   = (1 << 3),
1297
1298         /* only used if unified alpha is enabled, mirrors the brush flag
1299          * BRUSH_ALPHA_PRESSURE */
1300         UNIFIED_PAINT_BRUSH_ALPHA_PRESSURE  = (1 << 4),
1301 } eUnifiedPaintSettingsFlags;
1302
1303
1304 typedef struct CurvePaintSettings {
1305         char curve_type;
1306         char flag;
1307         char depth_mode;
1308         char surface_plane;
1309         char fit_method;
1310         char pad;
1311         short error_threshold;
1312         float radius_min, radius_max;
1313         float radius_taper_start, radius_taper_end;
1314         float surface_offset;
1315         float corner_angle;
1316 } CurvePaintSettings;
1317
1318 /* CurvePaintSettings.flag */
1319 enum {
1320         CURVE_PAINT_FLAG_CORNERS_DETECT             = (1 << 0),
1321         CURVE_PAINT_FLAG_PRESSURE_RADIUS            = (1 << 1),
1322         CURVE_PAINT_FLAG_DEPTH_STROKE_ENDPOINTS     = (1 << 2),
1323         CURVE_PAINT_FLAG_DEPTH_STROKE_OFFSET_ABS    = (1 << 3),
1324 };
1325
1326 /* CurvePaintSettings.fit_method */
1327 enum {
1328         CURVE_PAINT_FIT_METHOD_REFIT            = 0,
1329         CURVE_PAINT_FIT_METHOD_SPLIT            = 1,
1330 };
1331
1332 /* CurvePaintSettings.depth_mode */
1333 enum {
1334         CURVE_PAINT_PROJECT_CURSOR              = 0,
1335         CURVE_PAINT_PROJECT_SURFACE             = 1,
1336 };
1337
1338 /* CurvePaintSettings.surface_plane */
1339 enum {
1340         CURVE_PAINT_SURFACE_PLANE_NORMAL_VIEW           = 0,
1341         CURVE_PAINT_SURFACE_PLANE_NORMAL_SURFACE        = 1,
1342         CURVE_PAINT_SURFACE_PLANE_VIEW                  = 2,
1343 };
1344
1345
1346 /* *************************************************************** */
1347 /* Stats */
1348
1349 /* Stats for Meshes */
1350 typedef struct MeshStatVis {
1351         char type;
1352         char _pad1[2];
1353
1354         /* overhang */
1355         char  overhang_axis;
1356         float overhang_min, overhang_max;
1357
1358         /* thickness */
1359         float thickness_min, thickness_max;
1360         char thickness_samples;
1361         char _pad2[3];
1362
1363         /* distort */
1364         float distort_min, distort_max;
1365
1366         /* sharp */
1367         float sharp_min, sharp_max;
1368 } MeshStatVis;
1369
1370
1371 /* *************************************************************** */
1372 /* Tool Settings */
1373
1374 typedef struct ToolSettings {
1375         /** Vertex paint. */
1376         VPaint *vpaint;
1377         /** Weight paint. */
1378         VPaint *wpaint;
1379         Sculpt *sculpt;
1380         /** Uv smooth. */
1381         UvSculpt *uvsculpt;
1382         /** Gpencil paint. */
1383         GpPaint *gp_paint;
1384
1385         /* Vertex group weight - used only for editmode, not weight
1386          * paint */
1387         float vgroup_weight;
1388
1389         /** Remove doubles limit. */
1390         float doublimit;
1391         char automerge;
1392         char object_flag;
1393
1394         /* Selection Mode for Mesh */
1395         short selectmode;
1396
1397         /* UV Calculation */
1398         char unwrapper;
1399         char uvcalc_flag;
1400         char uv_flag;
1401         char uv_selectmode;
1402
1403         float uvcalc_margin;
1404
1405         /* Auto-IK */
1406         /** Runtime only. */
1407         short autoik_chainlen;
1408
1409         /* Grease Pencil */
1410         /** Flags/options for how the tool works. */
1411         char gpencil_flags;
1412
1413         /** Stroke placement settings: 3D View. */
1414         char gpencil_v3d_align;
1415         /** General 2D Editor. */
1416         char gpencil_v2d_align;
1417         /** Sequencer Preview. */
1418         char gpencil_seq_align;
1419         /** Image Editor. */
1420         char gpencil_ima_align;
1421
1422         /* Annotations */
1423         /** Stroke placement settings - 3D View. */
1424         char annotate_v3d_align;
1425
1426         /** Default stroke thickness for annotation strokes. */
1427         short annotate_thickness;
1428         /** Stroke selection mode. */
1429         short gpencil_selectmode;
1430
1431         /* Grease Pencil Sculpt */
1432         struct GP_Sculpt_Settings gp_sculpt;
1433
1434         /* Grease Pencil Interpolation Tool(s) */
1435         struct GP_Interpolate_Settings gp_interpolate;
1436
1437         /* Image Paint (8 bytes aligned please!) */
1438         struct ImagePaintSettings imapaint;
1439
1440         /* Particle Editing */
1441         struct ParticleEditSettings particle;
1442
1443         /* Transform Proportional Area of Effect */
1444         float proportional_size;
1445
1446         /* Select Group Threshold */
1447         float select_thresh;
1448
1449         /* Auto-Keying Mode */
1450         /** Defines in DNA_userdef_types.h. */
1451         short autokey_flag;
1452         char  autokey_mode;
1453         /** Keyframe type (see DNA_curve_types.h). */
1454         char keyframe_type;
1455
1456         /* Multires */
1457         char multires_subdiv_type;
1458
1459         /* Alt+RMB option */
1460         char edge_mode;
1461         char edge_mode_live_unwrap;
1462
1463         /* SCE_GIZMO_SHOW_* */
1464         char gizmo_flag;
1465
1466         /* Transform */
1467         char transform_pivot_point;
1468         char transform_flag;
1469         char snap_mode, snap_node_mode;
1470         char snap_uv_mode;
1471         char snap_flag;
1472         char snap_target;
1473         char snap_transform_mode_flag;
1474
1475
1476         char proportional, prop_mode;
1477         /** Proportional edit, object mode. */
1478         char proportional_objects;
1479         /** Proportional edit, mask editing. */
1480         char proportional_mask;
1481         /** Proportional edit, action editor. */
1482         char proportional_action;
1483         /** Proportional edit, graph editor. */
1484         char proportional_fcurve;
1485         /** Lock marker editing. */
1486         char lock_markers;
1487
1488         /**aUto normalizing mode in wpain.t*/
1489         char auto_normalize;
1490         /** Paint multiple bones in wpaint. */
1491         char multipaint;
1492         char weightuser;
1493         /** Subset selection filter in wpaint. */
1494         char vgroupsubset;
1495
1496         /* UV painting */
1497         char _pad2[1];
1498         char use_uv_sculpt;
1499         char uv_sculpt_settings;
1500         char uv_sculpt_tool;
1501         char uv_relax_method;
1502         /* XXX: these sculpt_paint_* fields are deprecated, use the
1503          * unified_paint_settings field instead! */
1504         short sculpt_paint_settings DNA_DEPRECATED;     short pad5;
1505         int sculpt_paint_unified_size DNA_DEPRECATED;
1506         float sculpt_paint_unified_unprojected_radius DNA_DEPRECATED;
1507         float sculpt_paint_unified_alpha DNA_DEPRECATED;
1508
1509         /* Unified Paint Settings */
1510         struct UnifiedPaintSettings unified_paint_settings;
1511
1512         struct CurvePaintSettings curve_paint_settings;
1513
1514         struct MeshStatVis statvis;
1515
1516         /* Normal Editing */
1517         float normal_vector[3];
1518         int face_strength;
1519 } ToolSettings;
1520
1521 /* *************************************************************** */
1522 /* Assorted Scene Data */
1523
1524 /* ------------------------------------------- */
1525 /* Stats (show in Info header) */
1526
1527 typedef struct bStats {
1528         /* scene totals for visible layers */
1529         int totobj, totlamp, totobjsel, totcurve, totmesh, totarmature;
1530         int totvert, totface;
1531 } bStats;
1532
1533 /* ------------------------------------------- */
1534 /* Unit Settings */
1535
1536 typedef struct UnitSettings {
1537         /* Display/Editing unit options for each scene */
1538         /** Maybe have other unit conversions?. */
1539         float scale_length;
1540         /** Imperial, metric etc. */
1541         char system;
1542         /** Not implemented as a proper unit system yet. */
1543         char system_rotation;
1544         short flag;
1545
1546         char length_unit;
1547         char mass_unit;
1548         char time_unit;
1549
1550         char pad[5];
1551 } UnitSettings;
1552
1553 /* ------------------------------------------- */
1554 /* Global/Common Physics Settings */
1555
1556 typedef struct PhysicsSettings {
1557         float gravity[3];
1558         int flag, quick_cache_step, rt;
1559 } PhysicsSettings;
1560
1561 /* ------------------------------------------- */
1562 /* Safe Area options used in Camera View & Sequencer
1563  */
1564 typedef struct DisplaySafeAreas {
1565         /* each value represents the (x,y) margins as a multiplier.
1566          * 'center' in this context is just the name for a different kind of safe-area */
1567
1568         /** Title Safe. */
1569         float title[2];
1570         /** Image/Graphics Safe. */
1571         float action[2];
1572
1573         /* use for alternate aspect ratio */
1574         float title_center[2];
1575         float action_center[2];
1576 } DisplaySafeAreas;
1577
1578 /* ------------------------------------------- */
1579 /* Scene Display - used for store scene specific display settings for the 3d view */
1580 typedef struct SceneDisplay {
1581         /** Light direction for shadows/highlight. */
1582         float light_direction[3];
1583         float shadow_shift, shadow_focus;
1584
1585         /** Settings for Cavity Shader. */
1586         float matcap_ssao_distance;
1587         float matcap_ssao_attenuation;
1588         int matcap_ssao_samples;
1589
1590         /** OpenGL render engine settings. */
1591         View3DShading shading;
1592 } SceneDisplay;
1593
1594 typedef struct SceneEEVEE {
1595         int flag;
1596         int gi_diffuse_bounces;
1597         int gi_cubemap_resolution;
1598         int gi_visibility_resolution;
1599         float gi_irradiance_smoothing;
1600         float gi_glossy_clamp;
1601         float gi_filter_quality;
1602         float pad;
1603
1604         float gi_cubemap_draw_size;
1605         float gi_irradiance_draw_size;
1606
1607         int taa_samples;
1608         int taa_render_samples;
1609         int sss_samples;
1610         float sss_jitter_threshold;
1611
1612         float ssr_quality;
1613         float ssr_max_roughness;
1614         float ssr_thickness;
1615         float ssr_border_fade;
1616         float ssr_firefly_fac;
1617
1618         float volumetric_start;
1619         float volumetric_end;
1620         int volumetric_tile_size;
1621         int volumetric_samples;
1622         float volumetric_sample_distribution;
1623         float volumetric_light_clamp;
1624         int volumetric_shadow_samples;
1625
1626         float gtao_distance;
1627         float gtao_factor;
1628         float gtao_quality;
1629
1630         float bokeh_max_size;
1631         float bokeh_threshold;
1632
1633         float bloom_color[3];
1634         float bloom_threshold;
1635         float bloom_knee;
1636         float bloom_intensity;
1637         float bloom_radius;
1638         float bloom_clamp;
1639
1640         int motion_blur_samples;
1641         float motion_blur_shutter;
1642
1643         int shadow_method;
1644         int shadow_cube_size;
1645         int shadow_cascade_size;
1646
1647         struct LightCache *light_cache;
1648         char light_cache_info[64];
1649
1650         float overscan;
1651         float light_threshold;
1652 } SceneEEVEE;
1653
1654 /* *************************************************************** */
1655 /* Scene ID-Block */
1656
1657 typedef struct TransformOrientationSlot {
1658         int type;
1659         int index_custom;
1660         char flag;
1661         char _pad0[7];
1662 } TransformOrientationSlot;
1663
1664 /* Indices when used in Scene.orientation. */
1665 enum {
1666         SCE_ORIENT_DEFAULT = 0,
1667         SCE_ORIENT_TRANSLATE = 1,
1668         SCE_ORIENT_ROTATE = 2,
1669         SCE_ORIENT_SCALE = 3,
1670 };
1671
1672 typedef struct Scene {
1673         ID id;
1674         /** Animation data (must be immediately after id for utilities to use it). */
1675         struct AnimData *adt;
1676
1677         struct Object *camera;
1678         struct World *world;
1679
1680         struct Scene *set;
1681
1682         ListBase base DNA_DEPRECATED;
1683         /** Active base. */
1684         struct Base  *basact DNA_DEPRECATED;
1685         void *_pad1;
1686
1687         /** 3d cursor location. */
1688         View3DCursor cursor;
1689
1690         /** Bitflags for layer visibility (deprecated). */
1691         unsigned int lay DNA_DEPRECATED;
1692         /** Active layer (deprecated) */
1693         int layact DNA_DEPRECATED;
1694         unsigned int pad1;
1695
1696         /** Various settings. */
1697         short flag;
1698
1699         char use_nodes;
1700         char pad[1];
1701
1702         struct bNodeTree *nodetree;
1703
1704         /** Sequence editor data is allocated here. */
1705         struct Editing *ed;
1706
1707         /** Default allocated now. */
1708         struct ToolSettings *toolsettings;
1709         void *pad2;
1710         struct DisplaySafeAreas safe_areas;
1711
1712         /* migrate or replace? depends on some internal things... */
1713         /* no, is on the right place (ton) */
1714         struct RenderData r;
1715         struct AudioData audio;
1716
1717         ListBase markers;
1718         ListBase transform_spaces;
1719
1720         /** First is the [scene, translate, rotate, scale]. */
1721         TransformOrientationSlot orientation_slots[4];
1722
1723         void *sound_scene;
1724         void *playback_handle;
1725         void *sound_scrub_handle;
1726         void *speaker_handles;
1727
1728         /** (runtime) info/cache used for presenting playback framerate info to the user. */
1729         void *fps_info;
1730
1731         /* none of the dependency graph  vars is mean to be saved */
1732         struct GHash *depsgraph_hash;
1733         int pad7;
1734
1735         /* User-Defined KeyingSets */
1736         /**
1737          * Index of the active KeyingSet.
1738          * first KeyingSet has index 1, 'none' active is 0, 'add new' is -1
1739          */
1740         int active_keyingset;
1741         /** KeyingSets for this scene */
1742         ListBase keyingsets;
1743
1744         /* Units */
1745         struct UnitSettings unit;
1746
1747         /* Grease Pencil - Annotations */
1748         struct bGPdata *gpd;
1749
1750         /* Movie Tracking */
1751         /** Active movie clip. */
1752         struct MovieClip *clip;
1753
1754         /* Physics simulation settings */
1755         struct PhysicsSettings physics_settings;
1756
1757         void *pad8;
1758         /* XXX. runtime flag for drawing, actually belongs in the window,
1759          * only used by BKE_object_handle_update() */
1760         uint64_t customdata_mask;
1761         /* XXX. same as above but for temp operator use (gl renders) */
1762         uint64_t customdata_mask_modal;
1763
1764
1765         /* Color Management */
1766         ColorManagedViewSettings view_settings;
1767         ColorManagedDisplaySettings display_settings;
1768         ColorManagedColorspaceSettings sequencer_colorspace_settings;
1769
1770         /* RigidBody simulation world+settings */
1771         struct RigidBodyWorld *rigidbody_world;
1772
1773         struct PreviewImage *preview;
1774
1775         ListBase view_layers;
1776         /* Not an actual datablock, but memory owned by scene. */
1777         Collection *master_collection;
1778         struct SceneCollection *collection DNA_DEPRECATED;
1779
1780         /** Settings to be override by workspaces. */
1781         IDProperty *layer_properties;
1782
1783         struct SceneDisplay display;
1784         struct SceneEEVEE eevee;
1785 } Scene;
1786
1787 /* **************** RENDERDATA ********************* */
1788
1789 /* RenderData.flag */
1790         /* use preview range */
1791 #define SCER_PRV_RANGE  (1<<0)
1792 #define SCER_LOCK_FRAME_SELECTION       (1<<1)
1793         /* show/use subframes (for checking motion blur) */
1794 #define SCER_SHOW_SUBFRAME      (1<<3)
1795
1796 /* RenderData.mode */
1797 #define R_OSA                   (1 << 0)
1798 #define R_MODE_DEPRECATED_1     (1 << 1)  /* cleared */
1799 #define R_MODE_DEPRECATED_2     (1 << 2)  /* cleared */
1800 #define R_MODE_DEPRECATED_3     (1 << 3)  /* cleared */
1801 #define R_MODE_DEPRECATED_4     (1 << 4)  /* cleared */
1802 #define R_MODE_DEPRECATED_5     (1 << 5)  /* cleared */
1803 #define R_MODE_DEPRECATED_6     (1 << 6)  /* cleared */
1804 #define R_MODE_DEPRECATED_7     (1 << 7)  /* cleared */
1805 #define R_MODE_DEPRECATED_8     (1 << 8)  /* cleared */
1806 #define R_BORDER                (1 << 9)
1807 #define R_MODE_DEPRECATED_10    (1 << 10)  /* cleared */
1808 #define R_CROP                  (1 << 11)
1809 /* Disable camera switching: runtime (DURIAN_CAMERA_SWITCH) */
1810 #define R_NO_CAMERA_SWITCH      (1 << 12)
1811 #define R_MODE_DEPRECATED_13    (1 << 13)  /* cleared */
1812 #define R_MBLUR                 (1 << 14)
1813                 /* unified was here */
1814 #define R_MODE_DEPRECATED_16    (1 << 16)  /* cleared */
1815 #define R_MODE_DEPRECATED_17    (1 << 17)  /* cleared */
1816 #define R_MODE_DEPRECATED_18    (1 << 18)  /* cleared */
1817 #define R_MODE_DEPRECATED_19    (1 << 19)  /* cleared */
1818 #define R_FIXED_THREADS         (1 << 19)
1819
1820 #define R_MODE_DEPRECATED_20    (1 << 20)  /* cleared */
1821 #define R_MODE_DEPRECATED_21    (1 << 21)  /* cleared */
1822 #define R_NO_OVERWRITE          (1 << 22)  /* skip existing files */
1823 #define R_TOUCH                 (1 << 23)  /* touch files before rendering */
1824 #define R_SIMPLIFY              (1 << 24)
1825 #define R_EDGE_FRS              (1 << 25) /* R_EDGE reserved for Freestyle */
1826 #define R_PERSISTENT_DATA       (1 << 26) /* keep data around for re-render */
1827 #define R_MODE_DEPRECATED_27    (1 << 27)  /* cleared */
1828
1829 /* RenderData.seq_flag */
1830 enum {
1831         R_SEQ_DEPRECATED_0 = (1 << 0),  /* cleared */
1832         R_SEQ_DEPRECATED_1 = (1 << 1),  /* cleared */
1833         R_SEQ_DEPRECATED_2 = (1 << 2),  /* cleared */
1834         R_SEQ_SOLID_TEX  = (1 << 3),
1835         R_SEQ_CAMERA_DOF = (1 << 4),
1836 };
1837
1838 /* RenderData.displaymode */
1839 #define R_OUTPUT_SCREEN 0
1840 #define R_OUTPUT_AREA   1
1841 #define R_OUTPUT_WINDOW 2
1842 #define R_OUTPUT_NONE   3
1843 /*#define R_OUTPUT_FORKED       4*/
1844
1845 /* RenderData.filtertype (used for nodes) */
1846 #define R_FILTER_BOX    0
1847 #define R_FILTER_TENT   1
1848 #define R_FILTER_QUAD   2
1849 #define R_FILTER_CUBIC  3
1850 #define R_FILTER_CATROM 4
1851 #define R_FILTER_GAUSS  5
1852 #define R_FILTER_MITCH  6
1853 #define R_FILTER_FAST_GAUSS     7
1854
1855 /* RenderData.scemode */
1856 #define R_DOSEQ                 (1 << 0)
1857 #define R_BG_RENDER             (1 << 1)
1858                 /* passepartout is camera option now, keep this for backward compatibility */
1859 #define R_PASSEPARTOUT          (1 << 2)
1860 #define R_BUTS_PREVIEW          (1 << 3)
1861 #define R_EXTENSION             (1 << 4)
1862 #define R_MATNODE_PREVIEW       (1 << 5)
1863 #define R_DOCOMP                (1 << 6)
1864 #define R_COMP_CROP             (1 << 7)
1865 #define R_SCEMODE_DEPRECATED_8  (1 << 8)  /* cleared */
1866 #define R_SINGLE_LAYER          (1 << 9)
1867 #define R_EXR_TILE_FILE         (1 << 10)
1868 #define R_SCEMODE_DEPRECATED_11 (1 << 11)  /* cleared */
1869 #define R_NO_IMAGE_LOAD         (1 << 12)
1870 #define R_SCEMODE_DEPRECATED_13 (1 << 13)  /* cleared */
1871 #define R_NO_FRAME_UPDATE       (1 << 14)
1872 #define R_FULL_SAMPLE           (1 << 15)
1873 #define R_SCEMODE_DEPRECATED_16 (1 << 16)  /* cleared */
1874 #define R_SCEMODE_DEPRECATED_17 (1 << 17)  /* cleared */
1875 #define R_TEXNODE_PREVIEW       (1 << 18)
1876 #define R_SCEMODE_DEPRECATED_19 (1 << 19)  /* cleared */
1877 #define R_EXR_CACHE_FILE        (1 << 20)
1878 #define R_MULTIVIEW             (1 << 21)
1879
1880 /* RenderData.stamp */
1881 #define R_STAMP_TIME    (1 << 0)
1882 #define R_STAMP_FRAME   (1 << 1)
1883 #define R_STAMP_DATE    (1 << 2)
1884 #define R_STAMP_CAMERA  (1 << 3)
1885 #define R_STAMP_SCENE   (1 << 4)
1886 #define R_STAMP_NOTE    (1 << 5)
1887 #define R_STAMP_DRAW    (1 << 6) /* draw in the image */
1888 #define R_STAMP_MARKER  (1 << 7)
1889 #define R_STAMP_FILENAME        (1 << 8)
1890 #define R_STAMP_SEQSTRIP        (1 << 9)
1891 #define R_STAMP_RENDERTIME      (1 << 10)
1892 #define R_STAMP_CAMERALENS      (1 << 11)
1893 #define R_STAMP_STRIPMETA       (1 << 12)
1894 #define R_STAMP_MEMORY          (1 << 13)
1895 #define R_STAMP_HIDE_LABELS     (1 << 14)
1896 #define R_STAMP_FRAME_RANGE     (1 << 15)
1897 #define R_STAMP_HOSTNAME        (1 << 16)
1898 #define R_STAMP_ALL (R_STAMP_TIME|R_STAMP_FRAME|R_STAMP_DATE|R_STAMP_CAMERA|R_STAMP_SCENE| \
1899                      R_STAMP_NOTE|R_STAMP_MARKER|R_STAMP_FILENAME|R_STAMP_SEQSTRIP|        \
1900                      R_STAMP_RENDERTIME|R_STAMP_CAMERALENS|R_STAMP_MEMORY|                 \
1901                      R_STAMP_HIDE_LABELS|R_STAMP_FRAME_RANGE|R_STAMP_HOSTNAME)
1902
1903 /** #RenderData.alphamode */
1904 #define R_ADDSKY                0
1905 #define R_ALPHAPREMUL   1
1906
1907 /* RenderData.color_mgt_flag */
1908 enum {
1909         /** deprecated, should only be used in versioning code only */
1910         R_COLOR_MANAGEMENT              = (1 << 0),
1911         R_COLOR_MANAGEMENT_DEPRECATED_1 = (1 << 1),
1912 };
1913
1914 #ifdef DNA_DEPRECATED
1915 /* RenderData.subimtype flag options for imtype */
1916 enum {
1917         R_OPENEXR_HALF  = (1 << 0),  /*deprecated*/
1918         R_OPENEXR_ZBUF  = (1 << 1),  /*deprecated*/
1919         R_PREVIEW_JPG   = (1 << 2),  /*deprecated*/
1920         R_CINEON_LOG    = (1 << 3),  /*deprecated*/
1921         R_TIFF_16BIT    = (1 << 4),  /*deprecated*/
1922
1923         R_JPEG2K_12BIT          =     (1 << 5),  /* Jpeg2000 */                    /*deprecated*/
1924         R_JPEG2K_16BIT          =     (1 << 6),                                    /*deprecated*/
1925         R_JPEG2K_YCC            =     (1 << 7),  /* when disabled use RGB */      /*deprecated*/
1926         R_JPEG2K_CINE_PRESET    =     (1 << 8),                                   /*deprecated*/
1927         R_JPEG2K_CINE_48FPS     =     (1 << 9),                                   /*deprecated*/
1928 };
1929 #endif
1930
1931 /* bake_mode: same as RE_BAKE_xxx defines */
1932 /* RenderData.bake_flag */
1933 #define R_BAKE_CLEAR        (1 << 0)
1934 /* #define R_BAKE_OSA       (1 << 1) */ /* deprecated */
1935 #define R_BAKE_TO_ACTIVE    (1 << 2)
1936 /* #define R_BAKE_NORMALIZE (1 << 3) */ /* deprecated */
1937 #define R_BAKE_MULTIRES     (1 << 4)
1938 #define R_BAKE_LORES_MESH   (1 << 5)
1939 /* #define R_BAKE_VCOL      (1 << 6) */ /* deprecated */
1940 #define R_BAKE_USERSCALE    (1 << 7)
1941 #define R_BAKE_CAGE         (1 << 8)
1942 #define R_BAKE_SPLIT_MAT    (1 << 9)
1943 #define R_BAKE_AUTO_NAME    (1 << 10)
1944
1945 /* RenderData.bake_normal_space */
1946 #define R_BAKE_SPACE_CAMERA      0
1947 #define R_BAKE_SPACE_WORLD       1
1948 #define R_BAKE_SPACE_OBJECT      2
1949 #define R_BAKE_SPACE_TANGENT 3
1950
1951 /* RenderData.line_thickness_mode */
1952 #define R_LINE_THICKNESS_ABSOLUTE 1
1953 #define R_LINE_THICKNESS_RELATIVE 2
1954
1955 /* sequencer seq_prev_type seq_rend_type */
1956
1957 /* RenderData.engine (scene.c) */
1958 extern const char *RE_engine_id_BLENDER_EEVEE;
1959 extern const char *RE_engine_id_BLENDER_WORKBENCH;
1960 extern const char *RE_engine_id_CYCLES;
1961
1962 /* **************** SCENE ********************* */
1963
1964 /* note that much higher maxframes give imprecise sub-frames, see: T46859 */
1965 /* Current precision is 16 for the sub-frames closer to MAXFRAME. */
1966
1967 /* for general use */
1968 #define MAXFRAME        1048574
1969 #define MAXFRAMEF       1048574.0f
1970
1971 #define MINFRAME        0
1972 #define MINFRAMEF       0.0f
1973
1974 /* (minimum frame number for current-frame) */
1975 #define MINAFRAME       -1048574
1976 #define MINAFRAMEF      -1048574.0f
1977
1978 #define BASE_VISIBLE(v3d, base) (                                                                        \
1979         ((v3d == NULL) || ((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
1980         ((v3d == NULL) || (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0)) &&     \
1981         (((base)->flag & BASE_VISIBLE) != 0))
1982 #define BASE_SELECTABLE(v3d, base) (                                                               \
1983         BASE_VISIBLE(v3d, base) &&                                                                     \
1984         ((v3d == NULL) || (((1 << (base)->object->type) & (v3d)->object_type_exclude_select) == 0)) && \
1985         (((base)->flag & BASE_SELECTABLE) != 0))
1986 #define BASE_SELECTED(v3d, base) \
1987         (BASE_VISIBLE(v3d, base) && (((base)->flag & BASE_SELECTED) != 0))
1988 #define BASE_EDITABLE(v3d, base) \
1989         (BASE_VISIBLE(v3d, base) && ((base)->object->id.lib == NULL))
1990 #define BASE_SELECTED_EDITABLE(v3d, base) \
1991         (BASE_EDITABLE(v3d, base) && (((base)->flag & BASE_SELECTED) != 0))
1992
1993 /* deprecate this! */
1994 #define FIRSTBASE(_view_layer)  ((_view_layer)->object_bases.first)
1995 #define LASTBASE(_view_layer)   ((_view_layer)->object_bases.last)
1996 #define BASACT(_view_layer)     ((_view_layer)->basact)
1997 #define OBACT(_view_layer)      (BASACT(_view_layer) ? BASACT(_view_layer)->object: NULL)
1998
1999 #define OBEDIT_FROM_WORKSPACE(workspace, _view_layer) \
2000         (((workspace)->object_mode & OD_MODE_EDIT) ? OBACT(_view_layer) : NULL)
2001 #define OBEDIT_FROM_OBACT(ob) \
2002         ((ob) ? (((ob)->mode & OB_MODE_EDIT) ? ob : NULL) : NULL)
2003 #define OBPOSE_FROM_OBACT(ob) \
2004         ((ob) ? (((ob)->mode & OB_MODE_POSE) ? ob : NULL) : NULL)
2005 #define OBEDIT_FROM_VIEW_LAYER(view_layer) \
2006         OBEDIT_FROM_OBACT(OBACT(view_layer))
2007
2008 #define V3D_CAMERA_LOCAL(v3d) ((!(v3d)->scenelock && (v3d)->camera) ? (v3d)->camera : NULL)
2009 #define V3D_CAMERA_SCENE(scene, v3d) ((!(v3d)->scenelock && (v3d)->camera) ? (v3d)->camera : (scene)->camera)
2010
2011 #define CFRA            (scene->r.cfra)
2012 #define SUBFRA          (scene->r.subframe)
2013 #define SFRA            (scene->r.sfra)
2014 #define EFRA            (scene->r.efra)
2015 #define PRVRANGEON      (scene->r.flag & SCER_PRV_RANGE)
2016 #define PSFRA           ((PRVRANGEON) ? (scene->r.psfra) : (scene->r.sfra))
2017 #define PEFRA           ((PRVRANGEON) ? (scene->r.pefra) : (scene->r.efra))
2018 #define FRA2TIME(a)     ((((double) scene->r.frs_sec_base) * (double)(a)) / (double)scene->r.frs_sec)
2019 #define TIME2FRA(a)     ((((double) scene->r.frs_sec) * (double)(a)) / (double)scene->r.frs_sec_base)
2020 #define FPS              (((double) scene->r.frs_sec) / (double)scene->r.frs_sec_base)
2021
2022 /* Base.flag is in DNA_object_types.h */
2023
2024 /* ToolSettings.transform_flag */
2025 enum {
2026         SCE_XFORM_AXIS_ALIGN = (1 << 0),
2027 };
2028
2029 /* ToolSettings.object_flag */
2030 enum {
2031         SCE_OBJECT_MODE_LOCK = (1 << 0),
2032 };
2033
2034 /* ToolSettings.snap_flag */
2035 #define SCE_SNAP                                (1 << 0)
2036 #define SCE_SNAP_ROTATE                 (1 << 1)
2037 #define SCE_SNAP_PEEL_OBJECT    (1 << 2)
2038 #define SCE_SNAP_PROJECT                (1 << 3)
2039 #define SCE_SNAP_NO_SELF                (1 << 4)
2040 #define SCE_SNAP_ABS_GRID               (1 << 5)
2041
2042 /* ToolSettings.snap_target */
2043 #define SCE_SNAP_TARGET_CLOSEST 0
2044 #define SCE_SNAP_TARGET_CENTER  1
2045 #define SCE_SNAP_TARGET_MEDIAN  2
2046 #define SCE_SNAP_TARGET_ACTIVE  3
2047
2048 /* ToolSettings.snap_mode */
2049 #define SCE_SNAP_MODE_VERTEX    (1 << 0)
2050 #define SCE_SNAP_MODE_EDGE      (1 << 1)
2051 #define SCE_SNAP_MODE_FACE      (1 << 2)
2052 #define SCE_SNAP_MODE_VOLUME    (1 << 3)
2053 #define SCE_SNAP_MODE_INCREMENT (1 << 4)
2054
2055 /* ToolSettings.snap_node_mode */
2056 #define SCE_SNAP_MODE_GRID      (1 << 5)
2057 #define SCE_SNAP_MODE_NODE_X    (1 << 6)
2058 #define SCE_SNAP_MODE_NODE_Y    (1 << 7)
2059
2060 /** #ToolSettings.snap_transform_mode_flag */
2061 enum {
2062         SCE_SNAP_TRANSFORM_MODE_TRANSLATE  = (1 << 0),
2063         SCE_SNAP_TRANSFORM_MODE_ROTATE     = (1 << 1),
2064         SCE_SNAP_TRANSFORM_MODE_SCALE      = (1 << 2),
2065 };
2066
2067 /* ToolSettings.selectmode */
2068 #define SCE_SELECT_VERTEX       (1 << 0) /* for mesh */
2069 #define SCE_SELECT_EDGE         (1 << 1)
2070 #define SCE_SELECT_FACE         (1 << 2)
2071
2072 /* MeshStatVis.type */
2073 #define SCE_STATVIS_OVERHANG    0
2074 #define SCE_STATVIS_THICKNESS   1
2075 #define SCE_STATVIS_INTERSECT   2
2076 #define SCE_STATVIS_DISTORT             3
2077 #define SCE_STATVIS_SHARP               4
2078
2079 /* ParticleEditSettings.selectmode for particles */
2080 #define SCE_SELECT_PATH         (1 << 0)
2081 #define SCE_SELECT_POINT        (1 << 1)
2082 #define SCE_SELECT_END          (1 << 2)
2083
2084 /* ToolSettings.prop_mode (proportional falloff) */
2085 #define PROP_SMOOTH            0
2086 #define PROP_SPHERE            1
2087 #define PROP_ROOT              2
2088 #define PROP_SHARP             3
2089 #define PROP_LIN               4
2090 #define PROP_CONST             5
2091 #define PROP_RANDOM            6
2092 #define PROP_INVSQUARE         7
2093 #define PROP_MODE_MAX          8
2094
2095 /* ToolSettings.proportional */
2096 #define PROP_EDIT_OFF                   0
2097 #define PROP_EDIT_ON                    1
2098 #define PROP_EDIT_CONNECTED             2
2099 #define PROP_EDIT_PROJECTED             3
2100
2101 /* ToolSettings.weightuser */
2102 enum {
2103         OB_DRAW_GROUPUSER_NONE      = 0,
2104         OB_DRAW_GROUPUSER_ACTIVE    = 1,
2105         OB_DRAW_GROUPUSER_ALL       = 2,
2106 };
2107
2108 /* toolsettings->face_strength */
2109 enum {
2110         FACE_STRENGTH_WEAK = -16384,
2111         FACE_STRENGTH_MEDIUM = 0,
2112         FACE_STRENGTH_STRONG = 16384,
2113 };
2114
2115 /* object_vgroup.c */
2116 /* ToolSettings.vgroupsubset */
2117 typedef enum eVGroupSelect {
2118         WT_VGROUP_ALL = 0,
2119         WT_VGROUP_ACTIVE = 1,
2120         WT_VGROUP_BONE_SELECT = 2,
2121         WT_VGROUP_BONE_DEFORM = 3,
2122         WT_VGROUP_BONE_DEFORM_OFF = 4,
2123 } eVGroupSelect;
2124
2125 #define WT_VGROUP_MASK_ALL \
2126         ((1 << WT_VGROUP_ACTIVE) | \
2127          (1 << WT_VGROUP_BONE_SELECT) | \
2128          (1 << WT_VGROUP_BONE_DEFORM) | \
2129          (1 << WT_VGROUP_BONE_DEFORM_OFF) | \
2130          (1 << WT_VGROUP_ALL))
2131
2132
2133 /* Scene.flag */
2134 #define SCE_DS_SELECTED                 (1<<0)
2135 #define SCE_DS_COLLAPSED                (1<<1)
2136 #define SCE_NLA_EDIT_ON                 (1<<2)
2137 #define SCE_FRAME_DROP                  (1<<3)
2138 #define SCE_KEYS_NO_SELONLY         (1<<4)
2139
2140         /* return flag BKE_scene_base_iter_next functions */
2141 /* #define F_ERROR                      -1 */  /* UNUSED */
2142 #define F_START                 0
2143 #define F_SCENE                 1
2144 #define F_DUPLI                 3
2145
2146 /* AudioData.flag */
2147 #define AUDIO_MUTE                (1<<0)
2148 #define AUDIO_SYNC                (1<<1)
2149 #define AUDIO_SCRUB                       (1<<2)
2150 #define AUDIO_VOLUME_ANIMATED     (1<<3)
2151
2152 /* FFMpegCodecData.flags */
2153 enum {
2154 #ifdef DNA_DEPRECATED
2155         FFMPEG_MULTIPLEX_AUDIO  = (1 << 0),  /* deprecated, you can choose none as audiocodec now */
2156 #endif
2157         FFMPEG_AUTOSPLIT_OUTPUT = (1 << 1),
2158         FFMPEG_LOSSLESS_OUTPUT  = (1 << 2),
2159         FFMPEG_USE_MAX_B_FRAMES = (1 << 3),
2160 };
2161
2162 /* Paint.flags */
2163 typedef enum ePaintFlags {
2164         PAINT_SHOW_BRUSH = (1 << 0),
2165         PAINT_FAST_NAVIGATE = (1 << 1),
2166         PAINT_SHOW_BRUSH_ON_SURFACE = (1 << 2),
2167         PAINT_USE_CAVITY_MASK = (1 << 3),
2168 } ePaintFlags;
2169
2170 /* Paint.symmetry_flags
2171  * (for now just a duplicate of sculpt symmetry flags) */
2172 typedef enum ePaintSymmetryFlags {
2173         PAINT_SYMM_X = (1 << 0),
2174         PAINT_SYMM_Y = (1 << 1),
2175         PAINT_SYMM_Z = (1 << 2),
2176         PAINT_SYMMETRY_FEATHER = (1 << 3),
2177         PAINT_TILE_X = (1 << 4),
2178         PAINT_TILE_Y = (1 << 5),
2179         PAINT_TILE_Z = (1 << 6),
2180 } ePaintSymmetryFlags;
2181
2182 #define PAINT_SYMM_AXIS_ALL (PAINT_SYMM_X | PAINT_SYMM_Y | PAINT_SYMM_Z)
2183
2184 /* Sculpt.flags */
2185 /* These can eventually be moved to paint flags? */
2186 typedef enum eSculptFlags {
2187         SCULPT_FLAG_DEPRECATED_0 = (1 << 0),  /* cleared */
2188         SCULPT_FLAG_DEPRECATED_1 = (1 << 1),  /* cleared */
2189         SCULPT_FLAG_DEPRECATED_2 = (1 << 2),  /* cleared */
2190
2191         SCULPT_LOCK_X = (1 << 3),
2192         SCULPT_LOCK_Y = (1 << 4),
2193         SCULPT_LOCK_Z = (1 << 5),
2194
2195         SCULPT_FLAG_DEPRECATED_6 = (1 << 6),  /* cleared */
2196
2197         SCULPT_USE_OPENMP = (1 << 7),
2198         SCULPT_ONLY_DEFORM = (1 << 8),
2199         SCULPT_SHOW_DIFFUSE = (1 << 9),
2200
2201         /* If set, the mesh will be drawn with smooth-shading in
2202          * dynamic-topology mode */
2203         SCULPT_DYNTOPO_SMOOTH_SHADING = (1 << 10),
2204
2205         /* If set, dynamic-topology brushes will subdivide short edges */
2206         SCULPT_DYNTOPO_SUBDIVIDE = (1 << 12),
2207         /* If set, dynamic-topology brushes will collapse short edges */
2208         SCULPT_DYNTOPO_COLLAPSE = (1 << 11),
2209
2210         /* If set, dynamic-topology detail size will be constant in object space */
2211         SCULPT_DYNTOPO_DETAIL_CONSTANT = (1 << 13),
2212         SCULPT_DYNTOPO_DETAIL_BRUSH = (1 << 14),
2213         SCULPT_DYNTOPO_DETAIL_MANUAL = (1 << 16),
2214
2215         /* Don't display mask in viewport, but still use it for strokes. */
2216         SCULPT_HIDE_MASK = (1 << 15),
2217 } eSculptFlags;
2218
2219 /* ImagePaintSettings.mode */
2220 typedef enum eImagePaintMode {
2221         IMAGEPAINT_MODE_MATERIAL, /* detect texture paint slots from the material */
2222         IMAGEPAINT_MODE_IMAGE,    /* select texture paint image directly */
2223 } eImagePaintMode;
2224
2225 /* ImagePaintSettings.interp */
2226 enum {
2227         IMAGEPAINT_INTERP_LINEAR = 0,
2228         IMAGEPAINT_INTERP_CLOSEST,
2229 };
2230
2231 /* ImagePaintSettings.flag */
2232 #define IMAGEPAINT_DRAWING                              (1 << 0)
2233 // #define IMAGEPAINT_DRAW_TOOL                 (1 << 1) // deprecated
2234 // #define IMAGEPAINT_DRAW_TOOL_DRAWING (1 << 2) // deprecated
2235
2236 /* projection painting only */
2237 /* ImagePaintSettings.flag */
2238 #define IMAGEPAINT_PROJECT_XRAY                 (1 << 4)
2239 #define IMAGEPAINT_PROJECT_BACKFACE             (1 << 5)
2240 #define IMAGEPAINT_PROJECT_FLAT                 (1 << 6)
2241 #define IMAGEPAINT_PROJECT_LAYER_CLONE  (1 << 7)
2242 #define IMAGEPAINT_PROJECT_LAYER_STENCIL        (1 << 8)
2243 #define IMAGEPAINT_PROJECT_LAYER_STENCIL_INV    (1 << 9)
2244
2245 /* ImagePaintSettings.missing_data */
2246 #define IMAGEPAINT_MISSING_UVS       (1 << 0)
2247 #define IMAGEPAINT_MISSING_MATERIAL  (1 << 1)
2248 #define IMAGEPAINT_MISSING_TEX       (1 << 2)
2249 #define IMAGEPAINT_MISSING_STENCIL   (1 << 3)
2250
2251 /* ToolSettings.uvcalc_flag */
2252 #define UVCALC_FILLHOLES                        (1 << 0)
2253 /** would call this UVCALC_ASPECT_CORRECT, except it should be default with old file */
2254 #define UVCALC_NO_ASPECT_CORRECT        (1 << 1)
2255 /** adjust UV's while transforming to avoid distortion */
2256 #define UVCALC_TRANSFORM_CORRECT        (1 << 2)
2257 /** Use mesh data after subsurf to compute UVs*/
2258 #define UVCALC_USESUBSURF                       (1 << 3)
2259
2260 /* ToolSettings.uv_flag */
2261 #define UV_SYNC_SELECTION       1
2262 #define UV_SHOW_SAME_IMAGE      2
2263
2264 /* ToolSettings.uv_selectmode */
2265 #define UV_SELECT_VERTEX        1
2266 #define UV_SELECT_EDGE          2
2267 #define UV_SELECT_FACE          4
2268 #define UV_SELECT_ISLAND        8
2269
2270 /* ToolSettings.edge_mode */
2271 #define EDGE_MODE_SELECT                                0
2272 #define EDGE_MODE_TAG_SEAM                              1
2273 #define EDGE_MODE_TAG_SHARP                             2
2274 #define EDGE_MODE_TAG_CREASE                    3
2275 #define EDGE_MODE_TAG_BEVEL                             4
2276 #define EDGE_MODE_TAG_FREESTYLE                 5
2277
2278 /* ToolSettings.gizmo_flag */
2279 enum {
2280         SCE_GIZMO_SHOW_TRANSLATE = (1 << 0),
2281         SCE_GIZMO_SHOW_ROTATE    = (1 << 1),
2282         SCE_GIZMO_SHOW_SCALE     = (1 << 2),
2283 };
2284
2285 /* ToolSettings.gpencil_flags */
2286 typedef enum eGPencil_Flags {
2287         /* When creating new frames, the last frame gets used as the basis for the new one */
2288         GP_TOOL_FLAG_RETAIN_LAST            = (1 << 1),
2289         /* Add the strokes below all strokes in the layer */
2290         GP_TOOL_FLAG_PAINT_ONBACK           = (1 << 2),
2291         /* Show compact list of colors */
2292         GP_TOOL_FLAG_THUMBNAIL_LIST         = (1 << 3),
2293         /* Generate wheight data for new strokes */
2294         GP_TOOL_FLAG_CREATE_WEIGHTS         = (1 << 4),
2295 } eGPencil_Flags;
2296
2297 /* scene->r.simplify_gpencil */
2298 typedef enum eGPencil_SimplifyFlags {
2299         /* Simplify */
2300         SIMPLIFY_GPENCIL_ENABLE           = (1 << 0),
2301         /* Simplify on play */
2302         SIMPLIFY_GPENCIL_ON_PLAY          = (1 << 1),
2303         /* Simplify fill on viewport */
2304         SIMPLIFY_GPENCIL_FILL             = (1 << 2),
2305         /* Simplify modifier on viewport */
2306         SIMPLIFY_GPENCIL_MODIFIER         = (1 << 3),
2307         /* Remove fill external line */
2308         SIMPLIFY_GPENCIL_REMOVE_FILL_LINE = (1 << 4),
2309         /* Simplify Shader FX */
2310         SIMPLIFY_GPENCIL_FX               = (1 << 5),
2311         /* Simplify layer blending */
2312         SIMPLIFY_GPENCIL_BLEND            = (1 << 6),
2313 } eGPencil_SimplifyFlags;
2314
2315 /* ToolSettings.gpencil_*_align - Stroke Placement mode flags */
2316 typedef enum eGPencil_Placement_Flags {
2317         /* New strokes are added in viewport/data space (i.e. not screen space) */
2318         GP_PROJECT_VIEWSPACE    = (1 << 0),
2319
2320         /* Viewport space, but relative to render canvas (Sequencer Preview Only) */
2321         GP_PROJECT_CANVAS       = (1 << 1),
2322
2323         /* Project into the screen's Z values */
2324         GP_PROJECT_DEPTH_VIEW   = (1 << 2),
2325         GP_PROJECT_DEPTH_STROKE = (1 << 3),
2326
2327         /* "Use Endpoints" */
2328         GP_PROJECT_DEPTH_STROKE_ENDPOINTS = (1 << 4),
2329         GP_PROJECT_CURSOR = (1 << 5),
2330         GP_PROJECT_DEPTH_STROKE_FIRST = (1 << 6),
2331 } eGPencil_Placement_Flags;
2332
2333 /* ToolSettings.gpencil_selectmode */
2334 typedef enum eGPencil_Selectmode_types {
2335         GP_SELECTMODE_POINT   = 0,
2336         GP_SELECTMODE_STROKE  = 1,
2337         GP_SELECTMODE_SEGMENT = 2,
2338 } eGPencil_Selectmode_types;
2339
2340 /* ToolSettings.gpencil_guide_types */
2341 typedef enum eGPencil_GuideTypes {
2342         GP_GUIDE_CIRCULAR = 0,
2343         GP_GUIDE_RADIAL,
2344         GP_GUIDE_PARALLEL,
2345         GP_GUIDE_GRID
2346 } eGPencil_GuideTypes;
2347
2348 /* ToolSettings.gpencil_guide_references */
2349 typedef enum eGPencil_Guide_Reference {
2350         GP_GUIDE_REF_CURSOR = 0,
2351         GP_GUIDE_REF_CUSTOM,
2352         GP_GUIDE_REF_OBJECT
2353 } eGPencil_Guide_Reference;
2354
2355 /* ToolSettings.particle flag */
2356 #define PE_KEEP_LENGTHS         (1 << 0)
2357 #define PE_LOCK_FIRST           (1 << 1)
2358 #define PE_DEFLECT_EMITTER      (1 << 2)
2359 #define PE_INTERPOLATE_ADDED    (1 << 3)
2360 #define PE_DRAW_PART            (1 << 4)
2361 #define PE_DEPRECATED_6         (1 << 6)  /* cleared */
2362 #define PE_FADE_TIME            (1 << 7)
2363 #define PE_AUTO_VELOCITY        (1 << 8)
2364
2365 /* ParticleEditSettings.brushtype */
2366 #define PE_BRUSH_NONE           -1
2367 #define PE_BRUSH_COMB           0
2368 #define PE_BRUSH_CUT            1
2369 #define PE_BRUSH_LENGTH         2
2370 #define PE_BRUSH_PUFF           3
2371 #define PE_BRUSH_ADD            4
2372 #define PE_BRUSH_SMOOTH         5
2373 #define PE_BRUSH_WEIGHT         6
2374
2375 /* ParticleBrushData.flag */
2376 #define PE_BRUSH_DATA_PUFF_VOLUME 1
2377
2378 /* ParticleBrushData.edittype */
2379 #define PE_TYPE_PARTICLES       0
2380 #define PE_TYPE_SOFTBODY        1
2381 #define PE_TYPE_CLOTH           2
2382
2383 /* PhysicsSettings.flag */
2384 #define PHYS_GLOBAL_GRAVITY             1
2385
2386 /* UnitSettings */
2387
2388 #define USER_UNIT_ADAPTIVE 0xFF
2389 /* UnitSettings.system */
2390 #define USER_UNIT_NONE                  0
2391 #define USER_UNIT_METRIC                1
2392 #define USER_UNIT_IMPERIAL              2
2393 /* UnitSettings.flag */
2394 #define USER_UNIT_OPT_SPLIT             1
2395 #define USER_UNIT_ROT_RADIANS   2
2396
2397 /* SceneEEVEE->flag */
2398 enum {
2399         SCE_EEVEE_VOLUMETRIC_ENABLED    = (1 << 0),
2400         SCE_EEVEE_VOLUMETRIC_LIGHTS             = (1 << 1),
2401         SCE_EEVEE_VOLUMETRIC_SHADOWS    = (1 << 2),
2402 //      SCE_EEVEE_VOLUMETRIC_COLORED    = (1 << 3), /* Unused */
2403         SCE_EEVEE_GTAO_ENABLED                  = (1 << 4),
2404         SCE_EEVEE_GTAO_BENT_NORMALS             = (1 << 5),
2405         SCE_EEVEE_GTAO_BOUNCE                   = (1 << 6),
2406         SCE_EEVEE_DOF_ENABLED                   = (1 << 7),
2407         SCE_EEVEE_BLOOM_ENABLED                 = (1 << 8),
2408         SCE_EEVEE_MOTION_BLUR_ENABLED   = (1 << 9),
2409         SCE_EEVEE_SHADOW_HIGH_BITDEPTH  = (1 << 10),
2410         SCE_EEVEE_TAA_REPROJECTION              = (1 << 11),
2411         SCE_EEVEE_SSS_ENABLED                   = (1 << 12),
2412         SCE_EEVEE_SSS_SEPARATE_ALBEDO   = (1 << 13),
2413         SCE_EEVEE_SSR_ENABLED                   = (1 << 14),
2414         SCE_EEVEE_SSR_REFRACTION                = (1 << 15),
2415         SCE_EEVEE_SSR_HALF_RESOLUTION   = (1 << 16),
2416         SCE_EEVEE_SHOW_IRRADIANCE               = (1 << 17),
2417         SCE_EEVEE_SHOW_CUBEMAPS                 = (1 << 18),
2418         SCE_EEVEE_GI_AUTOBAKE                   = (1 << 19),
2419         SCE_EEVEE_SHADOW_SOFT                   = (1 << 20),
2420         SCE_EEVEE_OVERSCAN                              = (1 << 21),
2421 };
2422
2423 /* SceneEEVEE->shadow_method */
2424 enum {
2425         SHADOW_ESM = 1,
2426         SHADOW_VSM = 2,
2427         SHADOW_METHOD_MAX = 3,
2428 };
2429
2430 #ifdef __cplusplus
2431 }
2432 #endif
2433
2434 #endif  /* __DNA_SCENE_TYPES_H__ */