5a4515c74d131022800ccef208bf92d5e14c990a
[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      0x03
8 #define POLYFILL_TEX_BIT        0x04
9 #define POLYFILL_ZBUF_BIT       0x08
10
11 enum {
12         POLYFILL_WIRE                   = 0,
13         POLYFILL_FLAT,
14         POLYFILL_GOURAUD,
15
16         POLYFILL_TEX_WIRE               = 4,
17         POLYFILL_TEX_FLAT,
18         POLYFILL_TEX_GOURAUD,
19
20         POLYFILL_WIRE_ZBUF                      = 8,
21         POLYFILL_FLAT_ZBUF,
22         POLYFILL_GOURAUD_ZBUF,
23
24         POLYFILL_TEX_WIRE_ZBUF          = 12,
25         POLYFILL_TEX_FLAT_ZBUF,
26         POLYFILL_TEX_GOURAUD_ZBUF
27 };
28
29 /* projected vertices for the rasterizer */
30 struct pvertex {
31         int32_t x, y; /* 24.8 fixed point */
32         int32_t u, v; /* 16.16 fixed point */
33         int32_t l, a;  /* int 0-255 */
34         int32_t z;      /* 0-(2^24-1) */
35 };
36
37 struct pgradient {
38         int32_t dudx, dudy, dvdx, dvdy;
39         int32_t dldx, dldy, dadx, dady;
40         int32_t dzdx, dzdy;
41 };
42
43 struct pimage {
44         g3d_pixel *pixels;
45         int width, height;
46
47         int xshift, yshift;
48         unsigned int xmask, ymask;
49 };
50
51 extern struct pimage pfill_fb;
52 extern struct pimage pfill_tex;
53 extern uint32_t *pfill_zbuf;
54 extern struct pgradient pgrad;
55
56 void polyfill_fbheight(int height);
57
58 void polyfill(int mode, struct pvertex *verts);
59
60 void polyfill_wire(struct pvertex *verts);
61 void polyfill_flat(struct pvertex *verts);
62 void polyfill_gouraud(struct pvertex *verts);
63 void polyfill_tex_wire(struct pvertex *verts);
64 void polyfill_tex_flat(struct pvertex *verts);
65 void polyfill_tex_gouraud(struct pvertex *verts);
66 void polyfill_flat_zbuf(struct pvertex *verts);
67 void polyfill_gouraud_zbuf(struct pvertex *verts);
68 void polyfill_tex_flat_zbuf(struct pvertex *verts);
69 void polyfill_tex_gouraud_zbuf(struct pvertex *verts);
70
71 #endif  /* POLYFILL_H_ */