crude metaballs
[metatoy] / src / 3dgfx / polyfill.h
1 #ifndef POLYFILL_H_
2 #define POLYFILL_H_
3
4 #include "inttypes.h"
5 #include "3dgfx.h"
6
7 #define POLYFILL_MODE_MASK      0x01
8 #define POLYFILL_TEX_BIT        0x02
9 #define POLYFILL_ZBUF_BIT       0x04
10
11 enum {
12         POLYFILL_FLAT,
13         POLYFILL_GOURAUD,
14         POLYFILL_TEX_FLAT,
15         POLYFILL_TEX_GOURAUD,
16         POLYFILL_FLAT_ZBUF,
17         POLYFILL_GOURAUD_ZBUF,
18         POLYFILL_TEX_FLAT_ZBUF,
19         POLYFILL_TEX_GOURAUD_ZBUF
20 };
21
22 /* projected vertices for the rasterizer */
23 struct pvertex {
24         int32_t x, y; /* 24.8 fixed point */
25         int32_t u, v; /* 16.16 fixed point */
26         int32_t l, a;  /* int 0-255 */
27         int32_t z;      /* 0-(2^24-1) */
28 };
29
30 struct pgradient {
31         int32_t dudx, dudy, dvdx, dvdy;
32         int32_t dldx, dldy, dadx, dady;
33         int32_t dzdx, dzdy;
34 };
35
36 struct pimage {
37         g3d_pixel *pixels;
38         int width, height;
39
40         int xshift, yshift;
41         unsigned int xmask, ymask;
42 };
43
44 extern struct pimage pfill_fb;
45 extern struct pimage pfill_tex;
46 extern uint32_t *pfill_zbuf;
47 extern struct pgradient pgrad;
48
49 void polyfill_fbheight(int height);
50
51 void polyfill(int mode, struct pvertex *verts);
52
53 void polyfill_flat(struct pvertex *verts);
54 void polyfill_gouraud(struct pvertex *verts);
55 void polyfill_tex_flat(struct pvertex *verts);
56 void polyfill_tex_gouraud(struct pvertex *verts);
57 void polyfill_flat_zbuf(struct pvertex *verts);
58 void polyfill_gouraud_zbuf(struct pvertex *verts);
59 void polyfill_tex_flat_zbuf(struct pvertex *verts);
60 void polyfill_tex_gouraud_zbuf(struct pvertex *verts);
61
62 #endif  /* POLYFILL_H_ */