19092f0ca65f8f451ccb0f28e294562b954e0f4a
[dosdemo] / 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_ALPHA_BIT      0x08
10 #define POLYFILL_ADD_BIT        0x10
11
12 enum {
13         POLYFILL_WIRE                   = 0,
14         POLYFILL_FLAT,
15         POLYFILL_GOURAUD,
16
17         POLYFILL_TEX_WIRE               = 4,
18         POLYFILL_TEX_FLAT,
19         POLYFILL_TEX_GOURAUD,
20
21         POLYFILL_ALPHA_WIRE             = 8,
22         POLYFILL_ALPHA_FLAT,
23         POLYFILL_ALPHA_GOURAUD,
24
25         POLYFILL_ALPHA_TEX_WIRE = 12,
26         POLYFILL_ALPHA_TEX_FLAT,
27         POLYFILL_ALPHA_TEX_GOURAUD,
28
29         POLYFILL_ADD_WIRE               = 16,
30         POLYFILL_ADD_FLAT,
31         POLYFILL_ADD_GOURAUD,
32
33         POLYFILL_ADD_TEX_WIRE   = 20,
34         POLYFILL_ADD_TEX_FLAT,
35         POLYFILL_ADD_TEX_GOURAUD
36 };
37
38 /* projected vertices for the rasterizer */
39 struct pvertex {
40         int32_t x, y; /* 24.8 fixed point */
41         int32_t u, v; /* 16.16 fixed point */
42         int32_t r, g, b, a;  /* int 0-255 */
43 };
44
45 struct pimage {
46         g3d_pixel *pixels;
47         int width, height;
48
49         int xshift, yshift;
50         unsigned int xmask, ymask;
51 };
52
53 extern struct pimage pfill_fb;
54 extern struct pimage pfill_tex;
55
56 void polyfill_fbheight(int height);
57
58 void polyfill(int mode, struct pvertex *verts, int nverts);
59
60 void polyfill_wire(struct pvertex *verts, int nverts);
61 void polyfill_flat(struct pvertex *verts, int nverts);
62 void polyfill_gouraud(struct pvertex *verts, int nverts);
63 void polyfill_tex_wire(struct pvertex *verts, int nverts);
64 void polyfill_tex_flat(struct pvertex *verts, int nverts);
65 void polyfill_tex_gouraud(struct pvertex *verts, int nverts);
66 void polyfill_alpha_wire(struct pvertex *verts, int nverts);
67 void polyfill_alpha_flat(struct pvertex *verts, int nverts);
68 void polyfill_alpha_gouraud(struct pvertex *verts, int nverts);
69 void polyfill_alpha_tex_wire(struct pvertex *verts, int nverts);
70 void polyfill_alpha_tex_flat(struct pvertex *verts, int nverts);
71 void polyfill_alpha_tex_gouraud(struct pvertex *verts, int nverts);
72 void polyfill_add_wire(struct pvertex *verts, int nverts);
73 void polyfill_add_flat(struct pvertex *verts, int nverts);
74 void polyfill_add_gouraud(struct pvertex *verts, int nverts);
75 void polyfill_add_tex_wire(struct pvertex *verts, int nverts);
76 void polyfill_add_tex_flat(struct pvertex *verts, int nverts);
77 void polyfill_add_tex_gouraud(struct pvertex *verts, int nverts);
78
79 #endif  /* POLYFILL_H_ */