]> icculus.org git repositories - divverent/darkplaces.git/blob - gl_poly.h
added -lz to the non-ALSA compile line, switched to non-ALSA compile by default ...
[divverent/darkplaces.git] / gl_poly.h
1
2 extern cvar_t r_skyquality;
3
4 #define TPOLYTYPE_ALPHA 0
5 #define TPOLYTYPE_ADD 1
6
7 extern void transpolyclear(void);
8 extern void transpolyrender(void);
9 extern void transpolybegin(int texnum, int glowtexnum, int fogtexnum, int transpolytype);
10 extern void transpolyend(void);
11
12 extern void wallpolyclear(void);
13 extern void wallpolyrender(void);
14
15 extern void skypolyclear(void);
16 extern void skypolyrender(void);
17 extern void skypolybegin(void);
18 extern void skypolyvert(float x, float y, float z);
19 extern void skypolyend(void);
20
21 #define MAX_TRANSPOLYS 65536
22 #define MAX_TRANSVERTS (MAX_TRANSPOLYS*4)
23 #define MAX_WALLPOLYS 65536
24 #define MAX_WALLVERTS (MAX_WALLPOLYS*3)
25 #define MAX_SKYPOLYS 2048
26 #define MAX_SKYVERTS (MAX_SKYPOLYS*4)
27
28 typedef struct
29 {
30         vec_t s, t;
31         byte r,g,b,a;
32         vec3_t v;
33 }
34 transvert_t;
35
36 typedef struct
37 {
38 //      vec_t mindistance, maxdistance; // closest and farthest distance along v_forward
39 //      vec_t distance; // distance to center
40 //      vec3_t n; // normal
41 //      vec_t ndist; // distance from origin along that normal
42         unsigned short texnum;
43         unsigned short glowtexnum;
44         unsigned short fogtexnum;
45         unsigned short firstvert;
46         unsigned short verts;
47         unsigned short transpolytype;
48 }
49 transpoly_t;
50
51 // note: must match format of glpoly_t vertices due to a memcpy used in RSurf_DrawWall
52 typedef struct
53 {
54         vec_t vert[VERTEXSIZE]; // xyz st uv
55 }
56 wallvert_t;
57
58 typedef struct
59 {
60         byte r,g,b,a;
61 }
62 wallvertcolor_t;
63
64 typedef struct
65 {
66         unsigned short texnum, lighttexnum, glowtexnum;
67         unsigned short firstvert;
68         unsigned short numverts;
69         unsigned short lit; // doesn't need to be an unsigned short, but to keep the structure consistent...
70 }
71 wallpoly_t;
72
73 typedef struct
74 {
75         float tex[2];
76         float v[4]; // 4th item is only for padding
77 }
78 skyvert_t;
79
80 typedef struct
81 {
82         unsigned short firstvert;
83         unsigned short verts;
84 }
85 skypoly_t;
86
87 extern transvert_t *transvert;
88 extern transpoly_t *transpoly;
89 extern unsigned short *transpolyindex;
90 extern wallvert_t *wallvert;
91 extern wallvertcolor_t *wallvertcolor;
92 extern wallpoly_t *wallpoly;
93 extern skyvert_t *skyvert;
94 extern skypoly_t *skypoly;
95
96 extern int currenttranspoly;
97 extern int currenttransvert;
98 extern int currentwallpoly;
99 extern int currentwallvert;
100 extern int currentskypoly;
101 extern int currentskyvert;
102
103 #define transpolybegin(ttexnum, tglowtexnum, tfogtexnum, ttranspolytype)\
104 {\
105         if (currenttranspoly < MAX_TRANSPOLYS && currenttransvert < MAX_TRANSVERTS)\
106         {\
107                 transpoly[currenttranspoly].texnum = (unsigned short) (ttexnum);\
108                 transpoly[currenttranspoly].glowtexnum = (unsigned short) (tglowtexnum);\
109                 transpoly[currenttranspoly].fogtexnum = (unsigned short) (tfogtexnum);\
110                 transpoly[currenttranspoly].transpolytype = (unsigned short) (ttranspolytype);\
111                 transpoly[currenttranspoly].firstvert = currenttransvert;\
112                 transpoly[currenttranspoly].verts = 0;\
113         }\
114 }
115
116 #define transpolyvert(vx,vy,vz,vs,vt,vr,vg,vb,va) \
117 {\
118         if (currenttranspoly < MAX_TRANSPOLYS && currenttransvert < MAX_TRANSVERTS)\
119         {\
120                 transvert[currenttransvert].s = (vs);\
121                 transvert[currenttransvert].t = (vt);\
122                 if (lighthalf)\
123                 {\
124                         transvert[currenttransvert].r = (byte) (bound(0, (int) (vr) >> 1, 255));\
125                         transvert[currenttransvert].g = (byte) (bound(0, (int) (vg) >> 1, 255));\
126                         transvert[currenttransvert].b = (byte) (bound(0, (int) (vb) >> 1, 255));\
127                 }\
128                 else\
129                 {\
130                         transvert[currenttransvert].r = (byte) (bound(0, (int) (vr), 255));\
131                         transvert[currenttransvert].g = (byte) (bound(0, (int) (vg), 255));\
132                         transvert[currenttransvert].b = (byte) (bound(0, (int) (vb), 255));\
133                 }\
134                 transvert[currenttransvert].a = (byte) (bound(0, (int) (va), 255));\
135                 transvert[currenttransvert].v[0] = (vx);\
136                 transvert[currenttransvert].v[1] = (vy);\
137                 transvert[currenttransvert].v[2] = (vz);\
138                 currenttransvert++;\
139                 transpoly[currenttranspoly].verts++;\
140         }\
141 }
142
143 #define transpolyvertub(vx,vy,vz,vs,vt,vr,vg,vb,va) \
144 {\
145         if (currenttranspoly < MAX_TRANSPOLYS && currenttransvert < MAX_TRANSVERTS)\
146         {\
147                 transvert[currenttransvert].s = (vs);\
148                 transvert[currenttransvert].t = (vt);\
149                 if (lighthalf)\
150                 {\
151                         transvert[currenttransvert].r = (vr) >> 1;\
152                         transvert[currenttransvert].g = (vg) >> 1;\
153                         transvert[currenttransvert].b = (vb) >> 1;\
154                 }\
155                 else\
156                 {\
157                         transvert[currenttransvert].r = (vr);\
158                         transvert[currenttransvert].g = (vg);\
159                         transvert[currenttransvert].b = (vb);\
160                 }\
161                 transvert[currenttransvert].a = (va);\
162                 transvert[currenttransvert].v[0] = (vx);\
163                 transvert[currenttransvert].v[1] = (vy);\
164                 transvert[currenttransvert].v[2] = (vz);\
165                 currenttransvert++;\
166                 transpoly[currenttranspoly].verts++;\
167         }\
168 }