New export through plugin scheme for yafray. It is working on linux and mac os x
[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 FreeCamera;
51 struct Radio;
52 struct Object;
53 struct World;
54 struct Scene;
55 struct Image;
56 struct Group;
57
58 typedef struct Base {
59         struct Base *next, *prev;
60         unsigned int lay, selcol;
61         int flag;
62         short sx, sy;
63         struct Object *object;
64 } Base;
65
66 typedef struct AviCodecData {
67         void                    *lpFormat;                      /* save format */
68         void                    *lpParms;                       /* compressor options */
69         unsigned int    cbFormat;                       /* size of lpFormat buffer */
70         unsigned int    cbParms;                        /* size of lpParms buffer */
71
72         unsigned int    fccType;            /* stream type, for consistency */
73         unsigned int    fccHandler;         /* compressor */
74         unsigned int    dwKeyFrameEvery;    /* keyframe rate */
75         unsigned int    dwQuality;          /* compress quality 0-10,000 */
76         unsigned int    dwBytesPerSecond;   /* bytes per second */
77         unsigned int    dwFlags;            /* flags... see below */
78         unsigned int    dwInterleaveEvery;  /* for non-video streams only */
79         unsigned int    pad;
80
81         char                    avicodecname[128];
82 } AviCodecData;
83
84 typedef struct QuicktimeCodecData {
85
86         void                    *cdParms;                       /* codec/compressor options */
87         void                    *pad;                           /* padding */
88
89         unsigned int    cdSize;                         /* size of cdParms buffer */
90         unsigned int    pad2;                           /* padding */
91
92         char                    qtcodecname[128];
93 } QuicktimeCodecData;
94
95 typedef struct AudioData {
96         int mixrate;
97         float main;             /* Main mix in dB */
98         short flag;
99         short pad[3];
100 } AudioData;
101
102 typedef struct RenderData {
103         struct AviCodecData *avicodecdata;
104         struct QuicktimeCodecData *qtcodecdata;
105
106         short cfra, sfra, efra; /* fames as in 'images' */
107         short images, framapto, flag;
108         float ctime;                    /* use for calcutions */
109         float framelen, blurfac;
110
111         /** For UR edge rendering: give the edges this colour */
112         float edgeR, edgeG, edgeB;
113         
114         short fullscreen, xplay, yplay, freqplay;       /* standalone player */
115         short depth, attrib, rt1, rt2;                          /* standalone player */
116
117         short stereomode;                                       /* standalone player stereo settings */
118         short pad[3];
119
120         short size, maximsize;  /* size in %, max in Kb */
121         /* from buttons: */
122         /**
123          * The desired number of pixels in the x direction
124          */
125         short xsch;
126         /**
127          * The desired number of pixels in the y direction
128          */
129         short ysch;
130         /**
131          * Adjustment factors for the aspect ratio in the x direction
132          */
133         short xasp;
134         /**
135          * Adjustment factors for the aspect ratio in the x direction
136          */
137         short yasp;
138         /**
139          * The number of part to use in the x direction
140          */
141         short xparts;
142         /**
143          * The number of part to use in the y direction
144          */
145         short yparts;
146         /* should rewrite this I think... */
147         rctf safety, border;
148         
149         short winpos, planes, imtype;
150         /** Mode bits:                                                           */
151         /* 0: Enable backbuffering for images                                    */
152         short bufflag;
153         short quality;
154         /**
155          * Flags for render settings. Use bit-masking to access the settings.
156          * 0: enable sequence output rendering                                   
157          * 1: render daemon                                                      
158          * 4: add extensions to filenames
159          */
160         short scemode;
161
162         /**
163          * Flags for render settings. Use bit-masking to access the settings.
164          * The bits have these meanings:
165          * 0: do oversampling
166          * 1: do shadows
167          * 2: do gamma correction
168          * 3: ortho (not used?)
169          * 4: do envmap
170          * 5: edge shading
171          * 6: field rendering
172          * 7: Disables time difference in field calculations
173          * 8: radio rendering
174          * 9: borders
175          * 10: panorama
176          * 11: crop
177          * 12: save SGI movies with Cosmo hardware
178          * 13: odd field first rendering
179          * 14: motion blur
180          * 15: use unified renderer for this pic
181          * 16: enable raytracing
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         /**
209          * The gamma for the normal rendering. Used when doing
210          * oversampling, to correctly blend subpixels to pixels.  */
211         float gamma, gauss;
212         /** post-production settings. Don't really belong here */
213         float postmul, postgamma, postadd, postigamma;
214
215         /* yafray: global panel params */
216         short GIquality, GIcache, GImethod, GIgradient,GIphotons,GIdirect;
217         short YF_AA, YFexportxml; 
218         int GIdepth, GIcausdepth, GIpixelspersample;
219         int GIphotoncount,GImixphotons;
220         float GIphotonradius;
221     int YF_numprocs,YF_raydepth, YF_AApasses, YF_AAsamples, YFintpad; 
222         float GIshadowquality, GIrefinement, GIpower;
223         float YF_gamma, YF_exposure,YF_raybias, YF_AAthreshold;
224
225         char backbuf[160], pic[160], ftype[160];
226         
227 } RenderData;
228
229
230 typedef struct GameFraming {
231         float col[3];
232         char type, pad1, pad2, pad3;
233 } GameFraming;
234
235 #define SCE_GAMEFRAMING_BARS   0
236 #define SCE_GAMEFRAMING_EXTEND 1
237 #define SCE_GAMEFRAMING_SCALE  2
238
239 typedef struct Scene {
240         ID id;
241         struct Object *camera;
242         struct World *world;
243         
244         struct Scene *set;
245         struct Image *ima;
246         
247         ListBase base;
248         struct Base *basact;
249         struct Group *group;
250         
251         float cursor[3];
252         unsigned int lay;
253
254         /* some realtime vars */
255         struct FreeCamera *fcam;  /* old, can be removed (ton) */
256         
257         void *ed;
258         struct Radio *radio;
259         void *sumohandle;
260         
261         struct GameFraming framing;
262
263         /* migrate or replace? depends on some internal things... */
264         /* no, is on the right place (ton) */
265         struct RenderData r;
266         struct AudioData audio; 
267         
268         ScriptLink scriptlink;
269 } Scene;
270
271
272 /* **************** RENDERDATA ********************* */
273
274 /* bufflag */
275 #define R_BACKBUF               1
276 #define R_BACKBUFANIM   2
277 #define R_FRONTBUF              4
278 #define R_FRONTBUFANIM  8
279
280 /* mode (int now) */
281 #define R_OSA                   0x0001
282 #define R_SHADOW                0x0002
283 #define R_GAMMA                 0x0004
284 #define R_ORTHO                 0x0008
285 #define R_ENVMAP                0x0010
286 #define R_EDGE                  0x0020
287 #define R_FIELDS                0x0040
288 #define R_FIELDSTILL    0x0080
289 #define R_RADIO                 0x0100
290 #define R_BORDER                0x0200
291 #define R_PANORAMA              0x0400
292 #define R_MOVIECROP             0x0800
293 #define R_COSMO                 0x1000
294 #define R_ODDFIELD              0x2000
295 #define R_MBLUR                 0x4000
296 #define R_UNIFIED       0x8000
297 #define R_RAYTRACE      0x10000
298 #define R_GAUSS         0x20000
299
300 /* yafray: renderer flag (not only exclusive to yafray) */
301 #define R_INTERN        0
302 #define R_YAFRAY        1
303
304 /* scemode */
305 #define R_DOSEQ                 0x0001
306 #define R_BG_RENDER             0x0002
307
308 #define R_EXTENSION             0x0010
309 #define R_OGL                   0x0020
310
311 /* alphamode */
312 #define R_ADDSKY                0
313 #define R_ALPHAPREMUL   1
314 #define R_ALPHAKEY              2
315
316 /* planes */
317 #define R_PLANES24              24
318 #define R_PLANES32              32
319 #define R_PLANESBW              8
320
321 /* imtype */
322 #define R_TARGA         0
323 #define R_IRIS          1
324 #define R_HAMX          2
325 #define R_FTYPE         3
326 #define R_JPEG90        4
327 #define R_MOVIE         5
328 #define R_IRIZ          7
329 #define R_RAWTGA        14
330 #define R_AVIRAW        15
331 #define R_AVIJPEG       16
332 #define R_PNG           17
333 #define R_AVICODEC      18
334 #define R_QUICKTIME     19
335 #define R_BMP           20
336
337
338 /* **************** RENDER ********************* */
339 /* mode flag is same as for renderdata */
340 /* flag */
341 #define R_ZTRA                  1
342 #define R_HALO                  2
343 #define R_SEC_FIELD             4
344 #define R_LAMPHALO              8
345 #define R_RENDERING             16
346 #define R_ANIMRENDER    32
347
348 /* vlakren->flag (vlak = face in dutch) */
349 #define R_SMOOTH                1
350 #define R_VISIBLE               2
351 #define R_NOPUNOFLIP    8
352 #define R_CMAPCODE              16
353 #define R_FACE_SPLIT    32
354 #define R_DIVIDE_24             64 /* Tells render to divide face other way. */
355
356 /* vertren->texofs (texcoordinate offset relative to vertren->orco */
357 #define R_UVOFS3        1
358
359 /* **************** SCENE ********************* */
360 #define RAD_PHASE_PATCHES       1
361 #define RAD_PHASE_FACES         2
362
363 /* base->flag is in DNA_object_types.h */
364
365 /* sce->flag */
366 #define SCE_ADDSCENAME          1
367
368 /* return flag next_object function */
369 #define F_START                 0
370 #define F_SCENE                 1
371 #define F_SET                   2
372 #define F_DUPLI                 3
373
374 /* audio->flag */
375 #define AUDIO_MUTE              1
376 #define AUDIO_SYNC              2
377 #define AUDIO_SCRUB             4
378
379 #ifdef __cplusplus
380 }
381 #endif
382
383 #endif
384