]> icculus.org git repositories - divverent/darkplaces.git/blob - gl_poly.h
Too many fixes to mention. (sys_ticrate now controls packet rates, and other stuff)
[divverent/darkplaces.git] / gl_poly.h
1
2 #define TPOLYTYPE_ALPHA 0
3 #define TPOLYTYPE_ADD 1
4
5 extern void transpolyclear();
6 extern void transpolyrender();
7 extern void transpolybegin(int texnum, int glowtexnum, int fogtexnum, int transpolytype);
8 extern void transpolyend();
9
10 extern void wallpolyclear();
11 extern void wallpolyrender();
12
13 extern void skypolyclear();
14 extern void skypolyrender();
15 extern void skypolybegin();
16 extern void skypolyvert(float x, float y, float z);
17 extern void skypolyend();
18
19 #define MAX_TRANSPOLYS 8192
20 #define MAX_TRANSVERTS (MAX_TRANSPOLYS*4)
21 #define MAX_WALLPOLYS 16384
22 #define MAX_WALLVERTS (MAX_WALLPOLYS*4)
23 #define MAX_SKYPOLYS 2048
24 #define MAX_SKYVERTS (MAX_SKYPOLYS*4)
25
26 typedef struct
27 {
28         vec_t s, t;
29         byte r,g,b,a;
30         vec3_t v;
31 } transvert_t;
32
33 typedef struct
34 {
35         vec_t mindistance, maxdistance; // closest and farthest distance along v_forward
36         vec_t distance; // distance to center
37 //      vec3_t n; // normal
38 //      vec_t ndist; // distance from origin along that normal
39         unsigned short texnum;
40         unsigned short glowtexnum;
41         unsigned short fogtexnum;
42         unsigned short firstvert;
43         unsigned short verts;
44         unsigned short transpolytype;
45 } transpoly_t;
46
47 typedef struct
48 {
49         vec3_t vert;
50         vec_t s, t, u, v;
51 } wallvert_t;
52
53 typedef struct
54 {
55         unsigned short texnum, lighttexnum, glowtexnum;
56         unsigned short firstvert;
57         unsigned short verts;
58 } wallpoly_t;
59
60 typedef struct
61 {
62         vec3_t v;
63 } skyvert_t;
64
65 typedef struct
66 {
67         unsigned short firstvert;
68         unsigned short verts;
69 } skypoly_t;
70
71 extern transvert_t *transvert;
72 extern transpoly_t *transpoly;
73 extern unsigned short *transpolyindex;
74 extern wallvert_t *wallvert;
75 extern wallpoly_t *wallpoly;
76 extern skyvert_t *skyvert;
77 extern skypoly_t *skypoly;
78
79 extern unsigned short currenttranspoly;
80 extern unsigned short currenttransvert;
81 extern unsigned short currentwallpoly;
82 extern unsigned short currentwallvert;
83 extern unsigned short currentskypoly;
84 extern unsigned short currentskyvert;
85
86 #define transpolyvert(vx,vy,vz,vs,vt,vr,vg,vb,va) \
87 {\
88         if (currenttranspoly < MAX_TRANSPOLYS && currenttransvert < MAX_TRANSVERTS)\
89         {\
90                 transvert[currenttransvert].s = (vs);\
91                 transvert[currenttransvert].t = (vt);\
92                 transvert[currenttransvert].r = (byte) (bound(0, (int) (vr), 255));\
93                 transvert[currenttransvert].g = (byte) (bound(0, (int) (vg), 255));\
94                 transvert[currenttransvert].b = (byte) (bound(0, (int) (vb), 255));\
95                 transvert[currenttransvert].a = (byte) (bound(0, (int) (va), 255));\
96                 transvert[currenttransvert].v[0] = (vx);\
97                 transvert[currenttransvert].v[1] = (vy);\
98                 transvert[currenttransvert].v[2] = (vz);\
99                 currenttransvert++;\
100                 transpoly[currenttranspoly].verts++;\
101         }\
102 }