21411528e21fe69a7ec90c530b23280cf738aab2
[blender-staging.git] / source / blender / makesdna / DNA_scene_types.h
1 /**
2  * $Id$ 
3  *
4  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  */
32 #ifndef DNA_SCENE_TYPES_H
33 #define DNA_SCENE_TYPES_H
34
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38
39 #include "DNA_vec_types.h"
40 #include "DNA_listBase.h"
41 #include "DNA_scriptlink_types.h"
42 #include "DNA_ID.h"
43 #include "DNA_scriptlink_types.h"
44
45 struct Radio;
46 struct Object;
47 struct World;
48 struct Scene;
49 struct Image;
50 struct Group;
51 struct bNodeTree;
52
53 typedef struct Base {
54         struct Base *next, *prev;
55         unsigned int lay, selcol;
56         int flag;
57         short sx, sy;
58         struct Object *object;
59 } Base;
60
61 typedef struct AviCodecData {
62         void                    *lpFormat;  /* save format */
63         void                    *lpParms;   /* compressor options */
64         unsigned int    cbFormat;           /* size of lpFormat buffer */
65         unsigned int    cbParms;            /* size of lpParms buffer */
66
67         unsigned int    fccType;            /* stream type, for consistency */
68         unsigned int    fccHandler;         /* compressor */
69         unsigned int    dwKeyFrameEvery;    /* keyframe rate */
70         unsigned int    dwQuality;          /* compress quality 0-10,000 */
71         unsigned int    dwBytesPerSecond;   /* bytes per second */
72         unsigned int    dwFlags;            /* flags... see below */
73         unsigned int    dwInterleaveEvery;  /* for non-video streams only */
74         unsigned int    pad;
75
76         char                    avicodecname[128];
77 } AviCodecData;
78
79 typedef struct QuicktimeCodecData {
80
81         void                    *cdParms;   /* codec/compressor options */
82         void                    *pad;       /* padding */
83
84         unsigned int    cdSize;             /* size of cdParms buffer */
85         unsigned int    pad2;               /* padding */
86
87         char                    qtcodecname[128];
88 } QuicktimeCodecData;
89
90 typedef struct FFMpegCodecData {
91         int type;
92         int codec;
93         int audio_codec;
94         int video_bitrate;
95         int audio_bitrate;
96         int gop_size;
97         int flags;
98
99         int rc_min_rate;
100         int rc_max_rate;
101         int rc_buffer_size;
102         int mux_packet_size;
103         int mux_rate;
104 } FFMpegCodecData;
105
106
107 typedef struct AudioData {
108         int mixrate;
109         float main;             /* Main mix in dB */
110         short flag;
111         short pad[3];
112 } AudioData;
113
114 typedef struct SceneRenderLayer {
115         struct SceneRenderLayer *next, *prev;
116         
117         char name[32];
118         
119         struct Material *mat_override;
120         struct Group *light_override;
121         
122         unsigned int lay;               /* scene->lay itself has priority over this */
123         int layflag;
124         int passflag;                   /* pass_xor has to be after passflag */
125         int pass_xor;
126 } SceneRenderLayer;
127
128 /* srl->layflag */
129 #define SCE_LAY_SOLID   1
130 #define SCE_LAY_ZTRA    2
131 #define SCE_LAY_HALO    4
132 #define SCE_LAY_EDGE    8
133 #define SCE_LAY_SKY             16
134 #define SCE_LAY_STRAND  32
135         /* flags between 32 and 0x8000 are set to 1 already, for future options */
136
137 #define SCE_LAY_ALL_Z   0x8000
138 #define SCE_LAY_XOR             0x10000
139 #define SCE_LAY_DISABLE 0x20000
140
141 /* srl->passflag */
142 #define SCE_PASS_COMBINED       1
143 #define SCE_PASS_Z                      2
144 #define SCE_PASS_RGBA           4
145 #define SCE_PASS_DIFFUSE        8
146 #define SCE_PASS_SPEC           16
147 #define SCE_PASS_SHADOW         32
148 #define SCE_PASS_AO                     64
149 #define SCE_PASS_REFLECT        128
150 #define SCE_PASS_NORMAL         256
151 #define SCE_PASS_VECTOR         512
152 #define SCE_PASS_REFRACT        1024
153 #define SCE_PASS_INDEXOB        2048
154 #define SCE_PASS_UV                     4096
155 #define SCE_PASS_RADIO          8192
156 /* note, srl->passflag is treestore element 'nr' in outliner, short still... */
157
158
159 typedef struct RenderData {
160         
161         struct AviCodecData *avicodecdata;
162         struct QuicktimeCodecData *qtcodecdata;
163         struct FFMpegCodecData ffcodecdata;
164
165         int cfra, sfra, efra;   /* frames as in 'images' */
166         int psfra, pefra;               /* start+end frames of preview range */
167
168         int images, framapto;
169         short flag, threads;
170
171         float ctime;                    /* use for calcutions */
172         float framelen, blurfac;
173
174         /** For UR edge rendering: give the edges this color */
175         float edgeR, edgeG, edgeB;
176         
177         short fullscreen, xplay, yplay, freqplay;       /* standalone player */
178         short depth, attrib, rt1, rt2;                  /* standalone player */
179
180         short stereomode;       /* standalone player stereo settings */
181         
182         short dimensionspreset;         /* for the dimensions presets menu */
183         
184         short filtertype;       /* filter is box, tent, gauss, mitch, etc */
185
186         short size, maximsize;  /* size in %, max in Kb */
187         /* from buttons: */
188         /**
189          * The desired number of pixels in the x direction
190          */
191         short xsch;
192         /**
193          * The desired number of pixels in the y direction
194          */
195         short ysch;
196         /**
197          * Adjustment factors for the aspect ratio in the x direction
198          */
199         short xasp;
200         /**
201          * Adjustment factors for the aspect ratio in the x direction
202          */
203         short yasp;
204         /**
205          * The number of part to use in the x direction
206          */
207         short xparts;
208         /**
209          * The number of part to use in the y direction
210          */
211         short yparts;
212         
213         short winpos, planes, imtype, subimtype;
214         
215         /** Mode bits:                                                           */
216         /* 0: Enable backbuffering for images                                    */
217         short bufflag;
218         short quality;
219         
220         /**
221          * Flags for render settings. Use bit-masking to access the settings.
222          */
223         short scemode;
224
225         /**
226          * Flags for render settings. Use bit-masking to access the settings.
227          */
228         int mode;
229
230         /* render engine, octree resolution */
231         short renderer, ocres, rpad[2];
232
233         /**
234          * What to do with the sky/background. Picks sky/premul/key
235          * blending for the background
236          */
237         short alphamode;
238
239         /**
240          * The number of samples to use per pixel.
241          */
242         short osa;
243         
244         short frs_sec, edgeint;
245
246         /* safety, border and display rect */
247         rctf safety, border;
248         rcti disprect;
249         
250         /* information on different layers to be rendered */
251         ListBase layers;
252         short actlay, pad;
253         int pad2;
254         
255         /**
256          * Value used to define filter size for all filter options  */
257         float gauss;
258         
259         /** post-production settings. Depricated, but here for upwards compat (initialized to 1) */      
260         float postmul, postgamma, posthue, postsat;      
261         
262         /* Dither noise intensity */
263         float dither_intensity;
264         
265         /* Bake Render options */
266         short bake_osa, bake_filter, bake_mode, bake_flag;
267         
268         /* yafray: global panel params. TODO: move elsewhere */
269         short GIquality, GIcache, GImethod, GIphotons, GIdirect;
270         short YF_AA, YFexportxml, YF_nobump, YF_clamprgb, yfpad1;
271         int GIdepth, GIcausdepth, GIpixelspersample;
272         int GIphotoncount, GImixphotons;
273         float GIphotonradius;
274         int YF_numprocs, YF_raydepth, YF_AApasses, YF_AAsamples;
275         float GIshadowquality, GIrefinement, GIpower, GIindirpower;
276         float YF_gamma, YF_exposure, YF_raybias, YF_AApixelsize, YF_AAthreshold;
277
278         /* paths to backbufffer, output, ftype */
279         char backbuf[160], pic[160], ftype[160];
280
281 } RenderData;
282
283
284 typedef struct GameFraming {
285         float col[3];
286         char type, pad1, pad2, pad3;
287 } GameFraming;
288
289 #define SCE_GAMEFRAMING_BARS   0
290 #define SCE_GAMEFRAMING_EXTEND 1
291 #define SCE_GAMEFRAMING_SCALE  2
292
293 typedef struct TimeMarker {
294         struct TimeMarker *next, *prev;
295         int frame;
296         char name[64];
297         unsigned int flag;
298 } TimeMarker;
299
300 struct ImagePaintSettings {
301         struct Brush *brush;
302         short flag, tool;
303         int pad3;
304 };
305
306 typedef struct ToolSettings {
307         /* Subdivide Settings */
308         short cornertype;
309         short editbutflag;
310         /*Triangle to Quad conversion threshold*/
311         float jointrilimit;
312         /* Extrude Tools */
313         float degr; 
314         short step;
315         short turn; 
316         
317         float extr_offs; 
318         float doublimit;
319         
320         /* Primitive Settings */
321         /* UV Sphere */
322         short segments;
323         short rings;
324         
325         /* Cylinder - Tube - Circle */
326         short vertices;
327
328         /* UV Calculation */
329         short unwrapper;
330         float uvcalc_radius;
331         float uvcalc_cubesize;
332         short uvcalc_mapdir;
333         short uvcalc_mapalign;
334         short uvcalc_flag;
335
336         short pad2;
337         
338         /* Image Paint (8 byte aligned please!) */
339         struct ImagePaintSettings imapaint;
340         
341         /* Select Group Threshold */
342         float select_thresh;
343         
344         /* IPO-Editor */
345         float clean_thresh;
346         
347         /* Retopo */
348         char retopo_mode;
349         char retopo_paint_tool;
350         char line_div, ellipse_div, retopo_hotspot;
351
352         /* Multires */
353         char multires_subdiv_type;
354         
355         char  pad4[2];
356 } ToolSettings;
357
358 /* Used by all brushes to store their properties, which can be directly set
359    by the interface code. Note that not all properties are actually used by
360    all the brushes. */
361 typedef struct BrushData
362 {
363         short size;
364         char strength, dir; /* Not used for smooth brush */
365         char airbrush;
366         char view;
367         char pad[2];
368 } BrushData;
369
370 struct SculptSession;
371 typedef struct SculptData
372 {
373         /* Data stored only from entering sculptmode until exiting sculptmode */
374         struct SculptSession *session;
375
376         /* Pointers to all of sculptmodes's textures */
377         struct MTex *mtex[10];
378
379         /* Settings for each brush */
380         BrushData drawbrush, smoothbrush, pinchbrush, inflatebrush, grabbrush, layerbrush, flattenbrush;
381         short brush_type;
382
383         /* For the Brush Shape */
384         short texact, texnr;
385         short spacing;
386         char texrept;
387         char texfade;
388         char texsep;
389
390         char averaging;
391         char flags;
392         
393         /* Control tablet input */
394         char tablet_size, tablet_strength;
395         
396         /* Symmetry is separate from the other BrushData because the same
397            settings are always used for all brush types */
398         char symm;
399 } SculptData;
400
401 typedef struct Scene {
402         ID id;
403         struct Object *camera;
404         struct World *world;
405         
406         struct Scene *set;
407         struct Image *ima;
408         
409         ListBase base;
410         struct Base *basact;
411         
412         float cursor[3];
413         float twcent[3];                        /* center for transform widget */
414         float twmin[3], twmax[3];       /* boundbox of selection for transform widget */
415         unsigned int lay;
416         
417         /* editmode stuff */
418         float editbutsize;                      /* size of normals */
419         short selectmode;
420         short proportional, prop_mode;
421         
422         short use_nodes;
423         struct bNodeTree *nodetree;     
424         
425         void *ed;
426         struct Radio *radio;
427         void *sumohandle;               /* TODO - remove this, its not ued anywhere (Campbell) */
428         
429         struct GameFraming framing;
430
431         struct ToolSettings *toolsettings;
432
433         /* migrate or replace? depends on some internal things... */
434         /* no, is on the right place (ton) */
435         struct RenderData r;
436         struct AudioData audio; 
437         
438         ScriptLink scriptlink;
439         
440         ListBase markers;
441         
442         short jumpframe;
443         short pad1, pad2, pad3;
444         
445         /* none of the dependancy graph  vars is mean to be saved */
446         struct  DagForest *theDag;
447         short dagisvalid, dagflags;
448         short pad4, recalc;                             /* recalc = counterpart of ob->recalc */
449
450         /* Sculptmode data */
451         struct SculptData sculptdata;
452 } Scene;
453
454
455 /* **************** RENDERDATA ********************* */
456
457 /* bufflag */
458 #define R_BACKBUF               1
459 #define R_BACKBUFANIM   2
460 #define R_FRONTBUF              4
461 #define R_FRONTBUFANIM  8
462
463 /* mode (int now) */
464 #define R_OSA                   0x0001
465 #define R_SHADOW                0x0002
466 #define R_GAMMA                 0x0004
467 #define R_ORTHO                 0x0008
468 #define R_ENVMAP                0x0010
469 #define R_EDGE                  0x0020
470 #define R_FIELDS                0x0040
471 #define R_FIELDSTILL    0x0080
472 #define R_RADIO                 0x0100
473 #define R_BORDER                0x0200
474 #define R_PANORAMA              0x0400
475 #define R_CROP                  0x0800
476 #define R_COSMO                 0x1000
477 #define R_ODDFIELD              0x2000
478 #define R_MBLUR                 0x4000
479                 /* unified was here */
480 #define R_RAYTRACE      0x10000
481                 /* R_GAUSS is obsolete, but used to retrieve setting from old files */
482 #define R_GAUSS         0x20000
483                 /* fbuf obsolete... */
484 #define R_FBUF                  0x40000
485                 /* threads obsolete... is there for old files */
486 #define R_THREADS               0x80000
487 #define R_SPEED                 0x100000
488 #define R_SSS                   0x200000
489
490 /* filtertype */
491 #define R_FILTER_BOX    0
492 #define R_FILTER_TENT   1
493 #define R_FILTER_QUAD   2
494 #define R_FILTER_CUBIC  3
495 #define R_FILTER_CATROM 4
496 #define R_FILTER_GAUSS  5
497 #define R_FILTER_MITCH  6
498
499 /* yafray: renderer flag (not only exclusive to yafray) */
500 #define R_INTERN        0
501 #define R_YAFRAY        1
502
503 /* scemode */
504 #define R_DOSEQ                         0x0001
505 #define R_BG_RENDER                     0x0002
506                 /* passepartout is camera option now, keep this for backward compatibility */
507 #define R_PASSEPARTOUT          0x0004
508 #define R_PREVIEWBUTS           0x0008
509 #define R_EXTENSION                     0x0010
510 #define R_NODE_PREVIEW          0x0020
511 #define R_DOCOMP                        0x0040
512 #define R_COMP_CROP                     0x0080
513 #define R_FREE_IMAGE            0x0100
514 #define R_SINGLE_LAYER          0x0200
515 #define R_EXR_TILE_FILE         0x0400
516 #define R_COMP_FREE                     0x0800
517 #define R_NO_IMAGE_LOAD         0x1000
518 #define R_NO_TEX                0x2000
519
520
521 /* alphamode */
522 #define R_ADDSKY                0
523 #define R_ALPHAPREMUL   1
524 #define R_ALPHAKEY              2
525
526 /* planes */
527 #define R_PLANES24              24
528 #define R_PLANES32              32
529 #define R_PLANESBW              8
530
531 /* imtype */
532 #define R_TARGA         0
533 #define R_IRIS          1
534 #define R_HAMX          2
535 #define R_FTYPE         3
536 #define R_JPEG90        4
537 #define R_MOVIE         5
538 #define R_IRIZ          7
539 #define R_RAWTGA        14
540 #define R_AVIRAW        15
541 #define R_AVIJPEG       16
542 #define R_PNG           17
543 #define R_AVICODEC      18
544 #define R_QUICKTIME 19
545 #define R_BMP           20
546 #define R_RADHDR        21
547 #define R_TIFF          22
548 #define R_OPENEXR       23
549 #define R_FFMPEG        24
550 #define R_FRAMESERVER   25
551 #define R_CINEON                26
552 #define R_DPX                   27
553 #define R_MULTILAYER    28
554 #define R_DDS                   29
555
556 /* subimtype, flag options for imtype */
557 #define R_OPENEXR_HALF  1
558 #define R_OPENEXR_ZBUF  2
559 #define R_PREVIEW_JPG   4
560
561 /* bake_mode: same as RE_BAKE_xxx defines */
562 /* bake_flag: */
563 #define R_BAKE_CLEAR    1
564 #define R_BAKE_OSA              2
565
566 /* **************** SCENE ********************* */
567 #define RAD_PHASE_PATCHES       1
568 #define RAD_PHASE_FACES         2
569
570 /* base->flag is in DNA_object_types.h */
571
572 /* sce->flag */
573 #define SCE_ADDSCENAME          1
574
575 /* sce->selectmode */
576 #define SCE_SELECT_VERTEX       1
577 #define SCE_SELECT_EDGE         2
578 #define SCE_SELECT_FACE         4
579
580 /* sce->recalc (now in use by previewrender) */
581 #define SCE_PRV_CHANGED         1
582
583 /* sce->prop_mode (proportional falloff) */
584 #define PROP_SMOOTH            0
585 #define PROP_SPHERE            1
586 #define PROP_ROOT              2
587 #define PROP_SHARP             3
588 #define PROP_LIN               4
589 #define PROP_CONST             5
590 #define PROP_RANDOM             6
591
592         /* return flag next_object function */
593 #define F_START                 0
594 #define F_SCENE                 1
595 #define F_SET                   2
596 #define F_DUPLI                 3
597
598 /* audio->flag */
599 #define AUDIO_MUTE              1
600 #define AUDIO_SYNC              2
601 #define AUDIO_SCRUB             4
602
603 #define FFMPEG_MULTIPLEX_AUDIO  1
604 #define FFMPEG_AUTOSPLIT_OUTPUT 2
605
606 /* SculptData.flags */
607 #define SCULPT_INPUT_SMOOTH 1
608 #define SCULPT_DRAW_FAST    2
609 #define SCULPT_DRAW_BRUSH   4
610 /* SculptData.brushtype */
611 #define DRAW_BRUSH    1
612 #define SMOOTH_BRUSH  2
613 #define PINCH_BRUSH   3
614 #define INFLATE_BRUSH 4
615 #define GRAB_BRUSH    5
616 #define LAYER_BRUSH   6
617 #define FLATTEN_BRUSH 7
618 /* SculptData.texrept */
619 #define SCULPTREPT_DRAG 1
620 #define SCULPTREPT_TILE 2
621 #define SCULPTREPT_3D   3
622
623 #define SYMM_X 1
624 #define SYMM_Y 2
625 #define SYMM_Z 4
626
627 /* toolsettings->imagepaint_flag */
628 #define IMAGEPAINT_DRAWING                              1
629 #define IMAGEPAINT_DRAW_TOOL                    2
630 #define IMAGEPAINT_DRAW_TOOL_DRAWING    4
631
632 /* toolsettings->retopo_mode */
633 #define RETOPO 1
634 #define RETOPO_PAINT 2
635
636 /* toolsettings->retopo_paint_tool */
637 #define RETOPO_PEN 1
638 #define RETOPO_LINE 2
639 #define RETOPO_ELLIPSE 4
640
641 #ifdef __cplusplus
642 }
643 #endif
644
645 #endif