Initial revision
[blender.git] / source / blender / render / intern / include / pixelshading.h
1 /*
2  * pixelshading.h
3  *
4  * These functions determine what actual colour a pixel will have.
5  *
6  * $Id$
7  *
8  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version 2
13  * of the License, or (at your option) any later version. The Blender
14  * Foundation also sells licenses for use in proprietary software under
15  * the Blender License.  See http://www.blender.org/BL/ for information
16  * about this.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software Foundation,
25  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
26  *
27  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
28  * All rights reserved.
29  *
30  * The Original Code is: all of this file.
31  *
32  * Contributor(s): none yet.
33  *
34  * ***** END GPL/BL DUAL LICENSE BLOCK *****
35  */
36
37 #ifndef PIXELSHADING_H
38 #define PIXELSHADING_H
39
40 /* ------------------------------------------------------------------------- */
41
42 #include "render.h"
43 #include "vanillaRenderPipe_types.h"
44 /* ------------------------------------------------------------------------- */
45
46 /**
47  * Render the pixel at (x,y) for object ap. Apply the jitter mask. 
48  * Output is given in float collector[4]. The type vector:
49  * t[0] - min. distance
50  * t[1] - face/halo index
51  * t[2] - jitter mask                     
52  * t[3] - type ZB_POLY or ZB_HALO
53  * t[4] - max. distance
54  * @return pointer to the object
55  */
56 void *renderPixel(float x, float y, int *t);
57
58 /**
59  * Spothalos on otherwise empty pixels.
60  */
61 void renderSpotHaloPixel(float x, float y, float* colbuf);
62
63 /**
64  * Set the sky blending to the indicated type.
65  */
66 void setSkyBlendingMode(enum RE_SkyAlphaBlendingType mode);
67
68 /**
69  * Get the sky blending mode.
70  */
71 enum RE_SkyAlphaBlendingType getSkyBlendingMode(void);
72 /**
73  * Render the sky at pixel (x, y).
74  */
75 void renderSkyPixelFloat(float x, float y);
76
77 /* ------------------------------------------------------------------------- */
78 /* All these are supposed to be internal. I should move these to a separate  */
79 /* header.                                                                   */
80
81 /**
82  * Determine colour for pixel at SCS x,y for face <vlaknr>. Result end up in
83  * <collector>
84  * @return pointer to this object's VlakRen
85  */
86 void *renderFacePixel(float x, float y, int vlaknr);
87
88 /**
89  * Render this pixel for halo haloNr. Leave result in <collector>.
90  * @return pointer to this object's HaloRen
91  */
92 void *renderHaloPixel(float x, float y, int haloNr);
93
94 /**
95  * Shade the halo at the given location
96  */
97 void shadeHaloFloat(HaloRen *har, float *col, unsigned int zz, 
98                                         float dist, float xn, float yn, short flarec);
99
100 /**
101  * Shade a sky pixel on a certain line, into collector[4]
102  * The x-coordinate (y as well, actually) are communicated through
103  * R.view[3]
104  */
105 void shadeSkyPixel(float x, float y);
106
107 void shadeSpotHaloPixelFloat(float *col);
108 void spotHaloFloat(struct LampRen *lar, float *view, float *intens);
109 void shadeLampLusFloat(void);
110
111 /* this should be replaced by shadeSpotHaloPixelFloat(), but there's         */
112 /* something completely fucked up here with the arith.                       */
113 /*  void renderspothaloFix(unsigned short *col); */
114 void renderspothaloFix(float *col); 
115
116 /* used by shadeSkyPixel: */
117 void shadeSkyPixelFloat(float y);
118 void fillBackgroundImage(float x, float y);
119
120 /* ------------------------------------------------------------------------- */
121
122 #endif