Welcome to mirror list, hosted at ThFree Co, Russian Federation.

render.h « include « extern « render « blender « source - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 0ac9d7e61c895f29853394ae3ad48d766a67bc4d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
/**
 * $Id$
 *
 * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version. The Blender
 * Foundation also sells licenses for use in proprietary software under
 * the Blender License.  See http://www.blender.org/BL/ for information
 * about this.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
 * All rights reserved.
 *
 * The Original Code is: all of this file.
 *
 * Contributor(s): none yet.
 *
 * ***** END GPL/BL DUAL LICENSE BLOCK *****
 * Interface to transform the Blender scene into renderable data.
 */

#ifndef RENDER_H
#define RENDER_H "$Id$"

/* ------------------------------------------------------------------------- */
/* This little preamble might be moved to a separate include. It contains    */
/* some defines that should become functions, and some platform dependency   */
/* fixes. I think it is risky to always include it...                        */
/* ------------------------------------------------------------------------- */

/* fix for OSA and defmaterial extern */
#include "BKE_osa_types.h"
#include "DNA_material_types.h"

#ifdef __cplusplus
extern "C" { 
#endif


/* For #undefs of stupid windows defines */
#ifdef WIN32
#include "BLI_winstuff.h"
#endif

/* ------------------------------------------------------------------------- */
/* Types                                                                     */
/* Both external and internal types can be placed here. Make sure there are  */
/* no dirty extras in the type files so they can be included without         */
/* problems. If possible, make a note why the include is needed.             */
/* ------------------------------------------------------------------------- */

#include "render_types.h"

/* ------------------------------------------------------------------------- */
/* Global variables                                                          */
/* These variable are global to the render module, and also externally       */
/* visible. The file where they are defined must be added.                   */
/* ------------------------------------------------------------------------- */

extern RE_Render         R;           /* rendercore.c */
extern Osa               O;           /* rendercore.c */
extern Material          defmaterial; /* initrender.c */
extern unsigned short   *igamtab1;    /* initrender.c */
extern unsigned short   *gamtab;      /* initrender.c */

struct View3D;

/* ------------------------------------------------------------------------- */
/* Function definitions                                                      */
/*                                                                           */
/* All functions that need to be externally visible must be declared here.   */
/* Currently, this interface contains 29 functions and 11 callbacks.         */
/* ------------------------------------------------------------------------- */


/* ------------------------------------------------------------------------- */
/* Needed for the outside world referring to shadowbuffers                   */
/* ------------------------------------------------------------------------- */

#ifndef RE_SHADOWBUFFERHANDLE
#define RE_SHADOWBUFFERHANDLE
#define RE_DECLARE_HANDLE(name) typedef struct name##__ { int unused; } *name
	RE_DECLARE_HANDLE(RE_ShadowBufferHandle);
#endif
		
	/**
	 * Create a new, empty shadow buffer with certain settings.
	 *
	 * @param mode 0 is a dummy buffer, 1 is the old buffer for
	 * c-based shadowing, 2 is the old buffer with c++ refit , 2 is a
	 * deep buffer
	 */
	extern RE_ShadowBufferHandle RE_createShadowBuffer(struct LampRen *lar,
													   float mat[][4],
													   int mode);

	/**
	 * Delete a shadow buffer.
	 * @param shb handle to the buffer to be released
	 */
	extern void RE_deleteShadowBuffer(RE_ShadowBufferHandle shb);


	
/* ------------------------------------------------------------------------- */
/* initrender (14)                                                           */
/* ------------------------------------------------------------------------- */

struct View3D;

/**
 * Guarded call to frame renderer? Tests several limits and boundary
 * conditions. 
 * 
 * @param ogl_render_area The View3D area to use for OpenGL rendering
 * (can be NULL unless render R_OGL flag is set)
 */
void    RE_initrender(struct View3D *ogl_render_view3d);

/**
 *
 */
void    RE_setwindowclip(int mode, int jmode);

/*
 * @param ogl_render_area The View3D area to use for OpenGL rendering
 * (can be NULL unless render R_OGL flag is set)
 */
void    RE_animrender(struct View3D *ogl_render_view3d);
void    RE_free_render_data(void);
void    RE_free_filt_mask(void);
void    RE_holoview(void);
void    RE_init_filt_mask(void);
void    RE_init_render_data(void);
void    RE_jitterate1(float *jit1, float *jit2, int num, float rad1);
void    RE_jitterate2(float *jit1, float *jit2, int num, float rad2);
void    RE_make_existing_file(char *name);

/* ------------------------------------------------------------------------- */
/* zbuf (2)                                                                  */
/* ------------------------------------------------------------------------- */

/**
 * Converts a world coordinate into a homogenous coordinate in view
 * coordinates. (WCS -> HCS)
 * Also called in: shadbuf.c render.c radfactors.c
 *                 initrender.c envmap.c editmesh.c
 * @param v1  [3 floats] the world coordinate
 * @param adr [4 floats] the homogenous view coordinate
 */
void    RE_projectverto(float *v1,float *adr);

/**
 * Something about doing radiosity z buffering?
 * (called in radfactors.c), hope the RadView is defined already... 
 * Also called in: radfactors.c
 * Note: Uses globals.
 * @param radview radiosity view definition
 */
	struct RadView;
	struct RNode;
void    RE_zbufferall_radio(struct RadView *vw, struct RNode **rg_elem, int rg_totelem);


/* ------------------------------------------------------------------------- */
/* envmap (5)                                                                   */
/* ------------------------------------------------------------------------- */
	struct EnvMap;
	struct Tex;
void    RE_free_envmapdata(struct EnvMap *env);
void    RE_free_envmap(struct EnvMap *env);
struct EnvMap *RE_add_envmap(void);
/* these two maybe not external? yes, they are, for texture.c */
struct EnvMap *RE_copy_envmap(struct EnvMap *env);
/* (used in texture.c) */
int     RE_envmaptex(struct Tex *tex, float *texvec, float *dxt, float *dyt);

	/* --------------------------------------------------------------------- */
	/* rendercore (2)                                                        */
	/* --------------------------------------------------------------------- */
	float   RE_Spec(float inp, int hard);

	/* maybe not external */
	void    RE_calc_R_ref(void);

	/* --------------------------------------------------------------------- */
	/* renderdatabase (3)                                                    */
	/* --------------------------------------------------------------------- */
	struct VlakRen *RE_findOrAddVlak(int nr);
	struct VertRen *RE_findOrAddVert(int nr);
	struct HaloRen *RE_findOrAddHalo(int nr);
	HaloRen *RE_inithalo(Material *ma, 
					  float *vec, 
					  float *vec1, 
					  float *orco, 
					  float hasize, 
					  float vectsize);
  

	/**
	 * callbacks (11):
	 *
	 * If the callbacks aren't set, rendering will still proceed as
	 * desired, but the concerning functionality will not be enabled.
	 *
	 * There need to be better uncoupling between the renderer and
	 * these functions still!
	 * */
	
	void RE_set_test_break_callback(int (*f)(void));

	void RE_set_timecursor_callback(void (*f)(int));

	void RE_set_renderdisplay_callback(void (*f)(int, int, int, int, unsigned int *));
	void RE_set_initrenderdisplay_callback(void (*f)(void));
	void RE_set_clearrenderdisplay_callback(void (*f)(short));
	
	void RE_set_printrenderinfo_callback(void (*f)(double,int));

	void RE_set_getrenderdata_callback(void (*f)(void));
	void RE_set_freerenderdata_callback(void (*f)(void));
	

	/*from renderhelp, should disappear!!! */ 
	/** Recalculate all normals on renderdata. */
	void set_normalflags(void);
	/**
	 * On loan from zbuf.h:
	 * Tests whether the first three coordinates should be clipped
	 * wrt. the fourth component. Bits 1 and 2 test on x, 3 and 4 test on
	 * y, 5 and 6 test on z:
	 * xyz >  test => set first bit   (01),
	 * xyz < -test => set second bit  (10),
	 * xyz == test => reset both bits (00).
	 * Note: functionality is duplicated from an internal function
	 * Also called in: initrender.c, radfactors.c
	 * @param  v [4 floats] a coordinate 
	 * @return a vector of bitfields
	 */
	int RE_testclip(float *v); 

	/* patch for the external if, to support the split for the ui */
	void RE_addalphaAddfac(char *doel, char *bron, char addfac);
	void RE_sky(char *col); 
	void RE_renderflare(struct HaloRen *har); 
	/**
	 * Shade the pixel at xn, yn for halo har, and write the result to col. 
	 * Also called in: previewrender.c
	 * @param har    The halo to be rendered on this location
	 * @param col    [unsigned int 3] The destination colour vector 
	 * @param zz     Some kind of distance
	 * @param dist   Square of the distance of this coordinate to the halo's center
	 * @param x      [f] Pixel x relative to center
	 * @param y      [f] Pixel y relative to center
	 * @param flarec Flare counter? Always har->flarec...
	 */
	void RE_shadehalo(struct HaloRen *har,
				   char *col,
				   unsigned int zz,
				   float dist,
				   float x,
				   float y,
				   short flarec); 

/***/

/* haloren->type: flags */

#define HA_ONLYSKY		1
#define HA_VECT			2
#define HA_XALPHA		4
#define HA_FLARECIRC	8

#ifdef __cplusplus
}
#endif

#endif /* RENDER_H */