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