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