Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5131 clevermous 1
/*
2
Copyright (C) 1996-1997 Id Software, Inc.
3
 
4
This program is free software; you can redistribute it and/or
5
modify it under the terms of the GNU General Public License
6
as published by the Free Software Foundation; either version 2
7
of the License, or (at your option) any later version.
8
 
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
 
13
See the GNU General Public License for more details.
14
 
15
You should have received a copy of the GNU General Public License
16
along with this program; if not, write to the Free Software
17
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18
 
19
*/
20
// d_iface.h: interface header file for rasterization driver modules
21
 
22
#define WARP_WIDTH		320
23
#define WARP_HEIGHT		200
24
 
25
#define MAX_LBM_HEIGHT	480
26
 
27
typedef struct
28
{
29
	float	u, v;
30
	float	s, t;
31
	float	zi;
32
} emitpoint_t;
33
 
34
typedef enum {
35
	pt_static, pt_grav, pt_slowgrav, pt_fire, pt_explode, pt_explode2, pt_blob, pt_blob2
36
} ptype_t;
37
 
38
// !!! if this is changed, it must be changed in d_ifacea.h too !!!
39
typedef struct particle_s
40
{
41
// driver-usable fields
42
	vec3_t		org;
43
	float		color;
44
// drivers never touch the following fields
45
	struct particle_s	*next;
46
	vec3_t		vel;
47
	float		ramp;
48
	float		die;
49
	ptype_t		type;
50
} particle_t;
51
 
52
#define PARTICLE_Z_CLIP	8.0
53
 
54
typedef struct polyvert_s {
55
	float	u, v, zi, s, t;
56
} polyvert_t;
57
 
58
typedef struct polydesc_s {
59
	int			numverts;
60
	float		nearzi;
61
	msurface_t	*pcurrentface;
62
	polyvert_t	*pverts;
63
} polydesc_t;
64
 
65
// !!! if this is changed, it must be changed in d_ifacea.h too !!!
66
typedef struct finalvert_s {
67
	int		v[6];		// u, v, s, t, l, 1/z
68
	int		flags;
69
	float	reserved;
70
} finalvert_t;
71
 
72
// !!! if this is changed, it must be changed in d_ifacea.h too !!!
73
typedef struct
74
{
75
	void				*pskin;
76
	maliasskindesc_t	*pskindesc;
77
	int					skinwidth;
78
	int					skinheight;
79
	mtriangle_t			*ptriangles;
80
	finalvert_t			*pfinalverts;
81
	int					numtriangles;
82
	int					drawtype;
83
	int					seamfixupX16;
84
} affinetridesc_t;
85
 
86
// !!! if this is changed, it must be changed in d_ifacea.h too !!!
87
typedef struct {
88
	float	u, v, zi, color;
89
} screenpart_t;
90
 
91
typedef struct
92
{
93
	int			nump;
94
	emitpoint_t	*pverts;	// there's room for an extra element at [nump],
95
							//  if the driver wants to duplicate element [0] at
96
							//  element [nump] to avoid dealing with wrapping
97
	mspriteframe_t	*pspriteframe;
98
	vec3_t			vup, vright, vpn;	// in worldspace
99
	float			nearzi;
100
} spritedesc_t;
101
 
102
typedef struct
103
{
104
	int		u, v;
105
	float	zi;
106
	int		color;
107
} zpointdesc_t;
108
 
109
extern cvar_t	r_drawflat;
110
extern int		d_spanpixcount;
111
extern int		r_framecount;		// sequence # of current frame since Quake
112
									//  started
113
extern qboolean	r_drawpolys;		// 1 if driver wants clipped polygons
114
									//  rather than a span list
115
extern qboolean	r_drawculledpolys;	// 1 if driver wants clipped polygons that
116
									//  have been culled by the edge list
117
extern qboolean	r_worldpolysbacktofront;	// 1 if driver wants polygons
118
											//  delivered back to front rather
119
											//  than front to back
120
extern qboolean	r_recursiveaffinetriangles;	// true if a driver wants to use
121
											//  recursive triangular subdivison
122
											//  and vertex drawing via
123
											//  D_PolysetDrawFinalVerts() past
124
											//  a certain distance (normally
125
											//  only used by the software
126
											//  driver)
127
extern float	r_aliasuvscale;		// scale-up factor for screen u and v
128
									//  on Alias vertices passed to driver
129
extern int		r_pixbytes;
130
extern qboolean	r_dowarp;
131
 
132
extern affinetridesc_t	r_affinetridesc;
133
extern spritedesc_t		r_spritedesc;
134
extern zpointdesc_t		r_zpointdesc;
135
extern polydesc_t		r_polydesc;
136
 
137
extern int		d_con_indirect;	// if 0, Quake will draw console directly
138
								//  to vid.buffer; if 1, Quake will
139
								//  draw console via D_DrawRect. Must be
140
								//  defined by driver
141
 
142
extern vec3_t	r_pright, r_pup, r_ppn;
143
 
144
 
145
void D_Aff8Patch (void *pcolormap);
146
void D_BeginDirectRect (int x, int y, byte *pbitmap, int width, int height);
147
void D_DisableBackBufferAccess (void);
148
void D_EndDirectRect (int x, int y, int width, int height);
149
void D_PolysetDraw (void);
150
void D_PolysetDrawFinalVerts (finalvert_t *fv, int numverts);
151
void D_DrawParticle (particle_t *pparticle);
152
void D_DrawPoly (void);
153
void D_DrawSprite (void);
154
void D_DrawSurfaces (void);
155
void D_DrawZPoint (void);
156
void D_EnableBackBufferAccess (void);
157
void D_EndParticles (void);
158
void D_Init (void);
159
void D_ViewChanged (void);
160
void D_SetupFrame (void);
161
void D_StartParticles (void);
162
void D_TurnZOn (void);
163
void D_WarpScreen (void);
164
 
165
void D_FillRect (vrect_t *vrect, int color);
166
void D_DrawRect (void);
167
void D_UpdateRects (vrect_t *prect);
168
 
169
// currently for internal use only, and should be a do-nothing function in
170
// hardware drivers
171
// FIXME: this should go away
172
void D_PolysetUpdateTables (void);
173
 
174
// these are currently for internal use only, and should not be used by drivers
175
extern int				r_skydirect;
176
extern byte				*r_skysource;
177
 
178
// transparency types for D_DrawRect ()
179
#define DR_SOLID		0
180
#define DR_TRANSPARENT	1
181
 
182
// !!! must be kept the same as in quakeasm.h !!!
183
#define TRANSPARENT_COLOR	0xFF
184
 
185
extern void *acolormap;	// FIXME: should go away
186
 
187
//=======================================================================//
188
 
189
// callbacks to Quake
190
 
191
typedef struct
192
{
193
	pixel_t		*surfdat;	// destination for generated surface
194
	int			rowbytes;	// destination logical width in bytes
195
	msurface_t	*surf;		// description for surface to generate
196
	fixed8_t	lightadj[MAXLIGHTMAPS];
197
							// adjust for lightmap levels for dynamic lighting
198
	texture_t	*texture;	// corrected for animating textures
199
	int			surfmip;	// mipmapped ratio of surface texels / world pixels
200
	int			surfwidth;	// in mipmapped texels
201
	int			surfheight;	// in mipmapped texels
202
} drawsurf_t;
203
 
204
extern drawsurf_t	r_drawsurf;
205
 
206
void R_DrawSurface (void);
207
void R_GenTile (msurface_t *psurf, void *pdest);
208
 
209
 
210
// !!! if this is changed, it must be changed in d_ifacea.h too !!!
211
#define TURB_TEX_SIZE	64		// base turbulent texture size
212
 
213
// !!! if this is changed, it must be changed in d_ifacea.h too !!!
214
#define	CYCLE			128		// turbulent cycle size
215
 
216
#define TILE_SIZE		128		// size of textures generated by R_GenTiledSurf
217
 
218
#define SKYSHIFT		7
219
#define	SKYSIZE			(1 << SKYSHIFT)
220
#define SKYMASK			(SKYSIZE - 1)
221
 
222
extern float	skyspeed, skyspeed2;
223
extern float	skytime;
224
 
225
extern int		c_surf;
226
extern vrect_t	scr_vrect;
227
 
228
extern byte		*r_warpbuffer;
229