Small fixes;
[blender.git] / source / blender / render / intern / include / zbuf.h
1 /*
2  * zbuf_ext.h
3  * external interface for zbuf.h
4  *
5  * $Id$
6  *
7  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation; either version 2
12  * of the License, or (at your option) any later version. The Blender
13  * Foundation also sells licenses for use in proprietary software under
14  * the Blender License.  See http://www.blender.org/BL/ for information
15  * about this.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, write to the Free Software Foundation,
24  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
25  *
26  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
27  * All rights reserved.
28  *
29  * The Original Code is: all of this file.
30  *
31  * Contributor(s): none yet.
32  *
33  * ***** END GPL/BL DUAL LICENSE BLOCK *****
34  */
35
36 #ifndef ZBUF_H
37 #define ZBUF_H
38
39 #ifdef __cplusplus
40 extern "C" { 
41 #endif
42
43 struct LampRen;
44 struct VlakRen;
45
46 /*-----------------------------------------------------------*/ 
47 /* Includes                                                  */
48 /*-----------------------------------------------------------*/ 
49
50 #include "zbuf_types.h"
51 #include "render_types.h"
52 #include "radio_types.h" /* for RadView */
53
54 /*-----------------------------------------------------------*/ 
55 /* Function                                                  */
56 /* (11 so far )                                              */
57 /*-----------------------------------------------------------*/ 
58  
59 /**
60  * Fill a 'rectangle' with a fixed value. The rectangle contains x by
61  * y points. The rows are assumed to be contiguous in memory, and to
62  * consist of uints. This function is used for initializing the z
63  * buffer.
64  * (why is x int and y uint? called in envmap, render, zbuf)
65  * @param rect  Pointer to the data representing the rectangle.
66  * @param x     The width of the rectangle
67  * @param y     The height of the rectangle
68  * @param val   The value used to fill the rectangle.
69  */
70 void fillrect(unsigned int *rect, int x, int y, unsigned int val);
71
72 /**
73  * Converts a world coordinate into a homogenous coordinate in view
74  * coordinates. The transformation matrix is only allowed to have a
75  * scaling and translation component.
76  * Also called in: shadbuf.c render.c radfactors.c
77  *                 initrender.c envmap.c editmesh.c
78  * @param v1  [3 floats] the world coordinate
79  * @param adr [4 floats] the homogenous view coordinate
80  */
81 void projectvert(float *v1,float *adr);
82
83
84 /** 
85  * Do a z buffer calculation pass for shadow calculations.
86  * Also called in: shadbuf.c
87  * Note: Uses globals.
88  * @param lar lamp definition data
89  */
90 void zbuffershad(struct LampRen *lar);
91
92         /* to the external interface, temp, I hope... */
93 /**
94  * Tests whether the first three coordinates should be clipped
95  * wrt. the fourth component. Bits 1 and 2 test on x, 3 and 4 test on
96  * y, 5 and 6 test on z:
97  * xyz >  test => set first bit   (01),
98  * xyz < -test => set second bit  (10),
99  * xyz == test => reset both bits (00).
100  * Note: functionality is duplicated from an internal function
101  * Also called in: initrender.c, radfactors.c
102  * @param  v [4 floats] a coordinate 
103  * @return a vector of bitfields
104  */
105 /*  int testclip(float *v); */
106
107
108 /* The following are only used in zbuf.c and render.c ---------------*/
109 /**
110  * Fills the entire in the alpha DA buffer. (All of it!)
111  * Note: Uses globals.
112  * Also called in: render.c
113  * @param y the line number to set
114  */
115 void abufsetrow(float *acolrow, int y);
116
117
118 /**
119  * Calculate the z buffer for all faces (or edges when in wireframe
120  * mode) presently visible. 
121  * Note: Uses globals.
122  * Also called in: render.c
123  */
124 void zbufferall(void);
125
126
127 /**
128  * Initialize accumulation buffers for alpha z buffering.
129  * The buffers are global variables. Also resets Accu buffer 
130  * y bounds.
131  * <LI>
132  * <IT> Acolrow : colour buffer for one line
133  * <IT> Arectz  : distance buffer for one line, depth ABUFPART
134  * <IT> APixbuf : pixel data buffer for one line, depth ABUFPART 
135  * </LI>
136  * Also called in: render.c (should migrate)
137  * Note: Uses globals.
138  */
139 void bgnaccumbuf(void);
140
141 /**
142  * Discard accumulation buffers for alpha z buffering.
143  * The buffers are global variables. The released buffers are Acolrow,
144  * Arectz, APixBuf. 
145  * Also called in: render.c  (should migrate)
146  * Note: Uses globals.
147  */
148 void endaccumbuf(void);
149
150 /**
151  * Z face intersect?
152  */
153 int vergzvlak(const void *x1, const void *x2);
154
155 /**
156  * Clip and fill vertex into the z buffer. zbuffunc needs to be set
157  * before entering, to assure that there is a buffer fill function
158  * that can be called. Zvlnr must be set to the current valid face
159  * index .
160  * Note: uses globals
161  * @param f1 [4 floats] vertex 1
162  * @param f2 [4 floats] vertex 2
163  * @param f3 [4 floats] vertex 3
164  * @param c1 clip conditions?
165  * @param c2 
166  * @param c3
167  */
168 void  zbufclip(int zvlnr, float *f1, float *f2, float *f3, int c1, int c2, int c3);
169
170 /**
171  * same, for edges
172  */
173 void         zbufclipwire(int zvlnr, struct VlakRen *vlr); 
174
175 #ifdef __cplusplus
176 }
177 #endif
178
179 #endif
180