Orange; more render & compo stuff!
[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 AudioData {
91         int mixrate;
92         float main;             /* Main mix in dB */
93         short flag;
94         short pad[3];
95 } AudioData;
96
97 typedef struct SceneRenderLayer {
98         struct SceneRenderLayer *next, *prev;
99         
100         char name[32];
101         struct Scene *scene;    /* unused still */
102         unsigned int lay;               /* scene->lay itself has priority over this */
103         short layflag;
104         short passflag;
105 } SceneRenderLayer;
106
107 /* srl->layflag */
108 #define SCE_LAY_SOLID   1
109 #define SCE_LAY_ZTRA    2
110 #define SCE_LAY_HALO    4
111 #define SCE_LAY_STRAND  8
112
113 /* srl->passflag */
114 #define SCE_PASS_COMBINED       1
115 #define SCE_PASS_Z                      2
116 #define SCE_PASS_RGBA           4
117 #define SCE_PASS_DIFFUSE        8
118 #define SCE_PASS_SPEC           16
119 #define SCE_PASS_SHADOW         32
120 #define SCE_PASS_AO                     64
121 #define SCE_PASS_MIRROR         128
122 #define SCE_PASS_NORMAL         256
123 #define SCE_PASS_VECTOR         512
124
125 typedef struct RenderData {
126         struct AviCodecData *avicodecdata;
127         struct QuicktimeCodecData *qtcodecdata;
128
129         short cfra, sfra, efra; /* fames as in 'images' */
130         short images, framapto, flag;
131         float ctime;                    /* use for calcutions */
132         float framelen, blurfac;
133
134         /** For UR edge rendering: give the edges this colour */
135         float edgeR, edgeG, edgeB;
136         
137         short fullscreen, xplay, yplay, freqplay;       /* standalone player */
138         short depth, attrib, rt1, rt2;                          /* standalone player */
139
140         short stereomode;                                       /* standalone player stereo settings */
141         
142         short dimensionspreset;         /* for the dimensions presets menu */
143         
144         short filtertype;                       /* filter is box, tent, gauss, mitch, etc */
145
146
147         short size, maximsize;  /* size in %, max in Kb */
148         /* from buttons: */
149         /**
150          * The desired number of pixels in the x direction
151          */
152         short xsch;
153         /**
154          * The desired number of pixels in the y direction
155          */
156         short ysch;
157         /**
158          * Adjustment factors for the aspect ratio in the x direction
159          */
160         short xasp;
161         /**
162          * Adjustment factors for the aspect ratio in the x direction
163          */
164         short yasp;
165         /**
166          * The number of part to use in the x direction
167          */
168         short xparts;
169         /**
170          * The number of part to use in the y direction
171          */
172         short yparts;
173         
174         short winpos, planes, imtype, subimtype;
175         
176         /** Mode bits:                                                           */
177         /* 0: Enable backbuffering for images                                    */
178         short bufflag;
179         short quality;
180         
181         /**
182          * Flags for render settings. Use bit-masking to access the settings.
183          * 0: enable sequence output rendering                                   
184          * 1: render daemon                                                      
185          * 4: add extensions to filenames
186          */
187         short scemode;
188
189         /**
190          * Flags for render settings. Use bit-masking to access the settings.
191          * The bits have these meanings:
192          * 0: do oversampling
193          * 1: do shadows
194          * 2: do gamma correction
195          * 3: ortho (not used?)
196          * 4: do envmap
197          * 5: edge shading
198          * 6: field rendering
199          * 7: Disables time difference in field calculations
200          * 8: radio rendering
201          * 9: borders
202          * 10: panorama
203          * 11: crop
204          * 12: save SGI movies with Cosmo hardware
205          * 13: odd field first rendering
206          * 14: motion blur
207          * 15: use unified renderer for this pic
208          * 16: enable raytracing
209          * 17: gauss sampling for subpixels
210          * 18: keep float buffer after render
211          */
212         int mode;
213
214         /* render engine, octree resolution */
215         short renderer, ocres, rpad[2];
216
217         /**
218          * What to do with the sky/background. Picks sky/premul/key
219          * blending for the background
220          */
221         short alphamode;
222         /**
223          * Toggles whether to apply a gamma correction for subpixel to
224          * pixel blending
225          */
226         short dogamma;
227         /**
228          * The number of samples to use per pixel.
229          */
230         short osa;
231         short frs_sec, edgeint;
232
233         /** For unified renderer: reduce intensity on boundaries with
234          * identical materials with this number.*/
235         short same_mat_redux;
236         
237         /* safety and border rect */
238         rctf safety, border;
239         
240         /* information on different layers to be rendered */
241         ListBase layers;
242         short actlay, pad;
243         int pad2;
244         
245         /**
246          * The gamma for the normal rendering. Used when doing
247          * oversampling, to correctly blend subpixels to pixels.  */
248         float gamma, gauss;
249         /** post-production settings. */
250         float postmul, postgamma, postadd, postigamma, posthue, postsat;
251         
252         /* Dither noise intensity */
253         float dither_intensity;
254         
255         /* Zblur settings */
256         float zmin, focus, zgamma, zsigma, zblur;
257
258         /* yafray: global panel params. TODO: move elsewhere */
259         short GIquality, GIcache, GImethod, GIphotons, GIdirect;
260         short YF_AA, YFexportxml, YF_nobump, YF_clamprgb, yfpad1;
261         int GIdepth, GIcausdepth, GIpixelspersample;
262         int GIphotoncount, GImixphotons;
263         float GIphotonradius;
264         int YF_numprocs, YF_raydepth, YF_AApasses, YF_AAsamples;
265         float GIshadowquality, GIrefinement, GIpower, GIindirpower;
266         float YF_gamma, YF_exposure, YF_raybias, YF_AApixelsize, YF_AAthreshold;
267
268         char backbuf[160], pic[160], ftype[160];
269         
270 } RenderData;
271
272
273 typedef struct GameFraming {
274         float col[3];
275         char type, pad1, pad2, pad3;
276 } GameFraming;
277
278 #define SCE_GAMEFRAMING_BARS   0
279 #define SCE_GAMEFRAMING_EXTEND 1
280 #define SCE_GAMEFRAMING_SCALE  2
281
282 typedef struct TimeMarker {
283         struct TimeMarker *next, *prev;
284         int frame;
285         char name[64];
286         unsigned int flag;
287 } TimeMarker;
288
289 typedef struct ToolSettings {
290         // Subdivide Settings
291         short cornertype;
292         short editbutflag;
293         // Extrude Tools
294         short degr; 
295         short step;
296         short turn; 
297
298         short pad1;
299         
300         float extr_offs; 
301         float doublimit;
302         
303         // Primitive Settings
304         // UV Sphere
305         short segments;
306         short rings;
307         
308         // Cylinder - Tube - Circle
309         short vertices;
310
311         char pad2,pad3;
312 } ToolSettings;
313
314 typedef struct Scene {
315         ID id;
316         struct Object *camera;
317         struct World *world;
318         
319         struct Scene *set;
320         struct Image *ima;
321         
322         ListBase base;
323         struct Base *basact;
324         
325         float cursor[3];
326         float twcent[3];                        /* center for transform widget */
327         float twmin[3], twmax[3];       /* boundbox of selection for transform widget */
328         unsigned int lay;
329         
330         /* editmode stuff */
331         float editbutsize;                      /* size of normals */
332         short selectmode;
333         short proportional, prop_mode;
334         
335         short use_nodes;
336         struct bNodeTree *nodetree;     
337         
338         void *ed;
339         struct Radio *radio;
340         void *sumohandle;
341         
342         struct GameFraming framing;
343
344         struct ToolSettings *toolsettings;
345
346         /* migrate or replace? depends on some internal things... */
347         /* no, is on the right place (ton) */
348         struct RenderData r;
349         struct AudioData audio; 
350         
351         ScriptLink scriptlink;
352         
353         ListBase markers;
354         
355         /* none of the dependancy graph  vars is mean to be saved */
356         struct  DagForest *theDag;
357         short dagisvalid, dagflags;
358         short dirty, recalc;                            /* recalc = counterpart of ob->recalc */
359 } Scene;
360
361
362 /* **************** RENDERDATA ********************* */
363
364 /* bufflag */
365 #define R_BACKBUF               1
366 #define R_BACKBUFANIM   2
367 #define R_FRONTBUF              4
368 #define R_FRONTBUFANIM  8
369
370 /* mode (int now) */
371 #define R_OSA                   0x0001
372 #define R_SHADOW                0x0002
373 #define R_GAMMA                 0x0004
374 #define R_ORTHO                 0x0008
375 #define R_ENVMAP                0x0010
376 #define R_EDGE                  0x0020
377 #define R_FIELDS                0x0040
378 #define R_FIELDSTILL    0x0080
379 #define R_RADIO                 0x0100
380 #define R_BORDER                0x0200
381 #define R_PANORAMA              0x0400
382 #define R_MOVIECROP             0x0800
383 #define R_COSMO                 0x1000
384 #define R_ODDFIELD              0x2000
385 #define R_MBLUR                 0x4000
386 #define R_UNIFIED       0x8000
387 #define R_RAYTRACE      0x10000
388                 /* R_GAUSS is obsolete, but used to retrieve setting from old files */
389 #define R_GAUSS         0x20000
390 #define R_FBUF                  0x40000
391 #define R_THREADS               0x80000
392 #define R_ZBLUR                 0x100000
393
394 /* filtertype */
395 #define R_FILTER_BOX    0
396 #define R_FILTER_TENT   1
397 #define R_FILTER_QUAD   2
398 #define R_FILTER_CUBIC  3
399 #define R_FILTER_CATROM 4
400 #define R_FILTER_GAUSS  5
401 #define R_FILTER_MITCH  6
402
403 /* yafray: renderer flag (not only exclusive to yafray) */
404 #define R_INTERN        0
405 #define R_YAFRAY        1
406
407 /* scemode */
408 #define R_DOSEQ                 0x0001
409 #define R_BG_RENDER             0x0002
410                 /* passepartout is camera option now, keep this for backward compatibility */
411 #define R_PASSEPARTOUT  0x0004
412
413 #define R_EXTENSION             0x0010
414 #define R_NODE_PREVIEW  0x0020
415 #define R_DOCOMP                0x0040
416
417 /* alphamode */
418 #define R_ADDSKY                0
419 #define R_ALPHAPREMUL   1
420 #define R_ALPHAKEY              2
421
422 /* planes */
423 #define R_PLANES24              24
424 #define R_PLANES32              32
425 #define R_PLANESBW              8
426
427 /* imtype */
428 #define R_TARGA         0
429 #define R_IRIS          1
430 #define R_HAMX          2
431 #define R_FTYPE         3
432 #define R_JPEG90        4
433 #define R_MOVIE         5
434 #define R_IRIZ          7
435 #define R_RAWTGA        14
436 #define R_AVIRAW        15
437 #define R_AVIJPEG       16
438 #define R_PNG           17
439 #define R_AVICODEC      18
440 #define R_QUICKTIME     19
441 #define R_BMP           20
442 #define R_RADHDR        21
443 #define R_TIFF          22
444 #define R_OPENEXR       23
445
446 /* subimtype, flag options for imtype */
447 #define R_OPENEXR_HALF  1
448 #define R_OPENEXR_ZBUF  2
449
450
451 /* **************** SCENE ********************* */
452 #define RAD_PHASE_PATCHES       1
453 #define RAD_PHASE_FACES         2
454
455 /* base->flag is in DNA_object_types.h */
456
457 /* sce->flag */
458 #define SCE_ADDSCENAME          1
459
460 /* sce->selectmode */
461 #define SCE_SELECT_VERTEX       1
462 #define SCE_SELECT_EDGE         2
463 #define SCE_SELECT_FACE         4
464
465 /* sce->dirty */
466 #define SCE_CLEAN           0
467 #define SCE_DIRTY           1
468
469 /* sce->recalc (now in use by previewrender) */
470 #define SCE_PRV_CHANGED         1
471
472 /* sce->prop_mode (proportional falloff) */
473 #define PROP_SMOOTH            0
474 #define PROP_SPHERE            1
475 #define PROP_ROOT              2
476 #define PROP_SHARP             3
477 #define PROP_LIN               4
478 #define PROP_CONST             5
479
480         /* return flag next_object function */
481 #define F_START                 0
482 #define F_SCENE                 1
483 #define F_SET                   2
484 #define F_DUPLI                 3
485
486 /* audio->flag */
487 #define AUDIO_MUTE              1
488 #define AUDIO_SYNC              2
489 #define AUDIO_SCRUB             4
490
491
492 #ifdef __cplusplus
493 }
494 #endif
495
496 #endif
497