Orange branch: Revived hidden treasure, the Groups!
[blender.git] / source / blender / render / intern / source / renderPreAndPost.c
1 /**
2  *
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  * Prepare the scene data for rendering.
31  * 
32  * $Id$
33  */
34
35 #include "MEM_guardedalloc.h"
36
37 #include "DNA_group_types.h"
38
39 #include "render.h"
40 #include "renderPreAndPost.h"
41 #include "RE_callbacks.h"
42
43 #include "shadbuf.h"
44 #include "envmap.h"
45 #include "renderHelp.h"
46 #include "radio.h"
47
48 #ifdef HAVE_CONFIG_H
49 #include <config.h>
50 #endif
51
52 /**
53  * Rotate all objects, make shadowbuffers and environment maps.
54  */
55 void prepareScene()
56 {
57         GroupObject *go;
58         extern void makeoctree(void);
59         
60         RE_local_get_renderdata();
61
62         /* SHADOW BUFFER */
63         for(go=R.lights.first; go; go= go->next) {
64                 LampRen *lar= go->lampren;
65                 if(lar->shb) makeshadowbuf(lar);
66                 if(RE_local_test_break()) break;
67         }
68
69         /* yafray: 'direct' radiosity, environment maps and octree init not needed for yafray render */
70         /* although radio mode could be useful at some point, later */
71         if (R.r.renderer==R_INTERN) {
72
73                 /* RADIO */
74                 if(R.r.mode & R_RADIO) do_radio_render();
75
76                 /* octree */
77                 if(R.r.mode & R_RAYTRACE) makeoctree();
78
79                 /* ENVIRONMENT MAPS */
80                 make_envmaps();
81                 
82         }
83 }
84
85 void finalizeScene(void)
86 {
87         extern void freeoctree(void);
88
89         /* Among other things, it releases the shadow buffers. */
90         RE_local_free_renderdata();
91         /* yafray: freeoctree not needed after yafray render, not initialized, see above */
92         if (R.r.renderer==R_INTERN) {
93                 if(R.r.mode & R_RAYTRACE) freeoctree();
94         }
95 }
96
97
98 void doClipping( void (*projectfunc)(float *, float *) )
99 {
100         setzbufvlaggen(projectfunc);
101 }
102
103 /* eof */