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
#ifndef GLQUAKE
21
// r_shared.h: general refresh-related stuff shared between the refresh and the
22
// driver
23
 
24
// FIXME: clean up and move into d_iface.h
25
 
26
#ifndef _R_SHARED_H_
27
#define _R_SHARED_H_
28
 
29
#define	MAXVERTS	16					// max points in a surface polygon
30
#define MAXWORKINGVERTS	(MAXVERTS+4)	// max points in an intermediate
31
										//  polygon (while processing)
32
// !!! if this is changed, it must be changed in d_ifacea.h too !!!
33
#define	MAXHEIGHT		1024
34
#define	MAXWIDTH		1280
35
#define MAXDIMENSION	((MAXHEIGHT > MAXWIDTH) ? MAXHEIGHT : MAXWIDTH)
36
 
37
#define SIN_BUFFER_SIZE	(MAXDIMENSION+CYCLE)
38
 
39
#define INFINITE_DISTANCE	0x10000		// distance that's always guaranteed to
40
										//  be farther away than anything in
41
										//  the scene
42
 
43
//===================================================================
44
 
45
extern void	R_DrawLine (polyvert_t *polyvert0, polyvert_t *polyvert1);
46
 
47
extern int		cachewidth;
48
extern pixel_t	*cacheblock;
49
extern int		screenwidth;
50
 
51
extern	float	pixelAspect;
52
 
53
extern int		r_drawnpolycount;
54
 
55
extern cvar_t	r_clearcolor;
56
 
57
extern int	sintable[SIN_BUFFER_SIZE];
58
extern int	intsintable[SIN_BUFFER_SIZE];
59
 
60
extern	vec3_t	vup, base_vup;
61
extern	vec3_t	vpn, base_vpn;
62
extern	vec3_t	vright, base_vright;
63
extern	entity_t		*currententity;
64
 
65
#define NUMSTACKEDGES		2400
66
#define	MINEDGES			NUMSTACKEDGES
67
#define NUMSTACKSURFACES	800
68
#define MINSURFACES			NUMSTACKSURFACES
69
#define	MAXSPANS			3000
70
 
71
// !!! if this is changed, it must be changed in asm_draw.h too !!!
72
typedef struct espan_s
73
{
74
	int				u, v, count;
75
	struct espan_s	*pnext;
76
} espan_t;
77
 
78
// FIXME: compress, make a union if that will help
79
// insubmodel is only 1, flags is fewer than 32, spanstate could be a byte
80
typedef struct surf_s
81
{
82
	struct surf_s	*next;			// active surface stack in r_edge.c
83
	struct surf_s	*prev;			// used in r_edge.c for active surf stack
84
	struct espan_s	*spans;			// pointer to linked list of spans to draw
85
	int			key;				// sorting key (BSP order)
86
	int			last_u;				// set during tracing
87
	int			spanstate;			// 0 = not in span
88
									// 1 = in span
89
									// -1 = in inverted span (end before
90
									//  start)
91
	int			flags;				// currentface flags
92
	void		*data;				// associated data like msurface_t
93
	entity_t	*entity;
94
	float		nearzi;				// nearest 1/z on surface, for mipmapping
95
	qboolean	insubmodel;
96
	float		d_ziorigin, d_zistepu, d_zistepv;
97
 
98
	int			pad[2];				// to 64 bytes
99
} surf_t;
100
 
101
extern	surf_t	*surfaces, *surface_p, *surf_max;
102
 
103
// surfaces are generated in back to front order by the bsp, so if a surf
104
// pointer is greater than another one, it should be drawn in front
105
// surfaces[1] is the background, and is used as the active surface stack.
106
// surfaces[0] is a dummy, because index 0 is used to indicate no surface
107
//  attached to an edge_t
108
 
109
//===================================================================
110
 
111
extern vec3_t	sxformaxis[4];	// s axis transformed into viewspace
112
extern vec3_t	txformaxis[4];	// t axis transformed into viewspac
113
 
114
extern vec3_t	modelorg, base_modelorg;
115
 
116
extern	float	xcenter, ycenter;
117
extern	float	xscale, yscale;
118
extern	float	xscaleinv, yscaleinv;
119
extern	float	xscaleshrink, yscaleshrink;
120
 
121
extern	int d_lightstylevalue[256]; // 8.8 frac of base light value
122
 
123
extern void TransformVector (vec3_t in, vec3_t out);
124
extern void SetUpForLineScan(fixed8_t startvertu, fixed8_t startvertv,
125
	fixed8_t endvertu, fixed8_t endvertv);
126
 
127
extern int	r_skymade;
128
extern void R_MakeSky (void);
129
 
130
extern int	ubasestep, errorterm, erroradjustup, erroradjustdown;
131
 
132
// flags in finalvert_t.flags
133
#define ALIAS_LEFT_CLIP				0x0001
134
#define ALIAS_TOP_CLIP				0x0002
135
#define ALIAS_RIGHT_CLIP			0x0004
136
#define ALIAS_BOTTOM_CLIP			0x0008
137
#define ALIAS_Z_CLIP				0x0010
138
// !!! if this is changed, it must be changed in d_ifacea.h too !!!
139
#define ALIAS_ONSEAM				0x0020	// also defined in modelgen.h;
140
											//  must be kept in sync
141
#define ALIAS_XY_CLIP_MASK			0x000F
142
 
143
// !!! if this is changed, it must be changed in asm_draw.h too !!!
144
typedef struct edge_s
145
{
146
	fixed16_t		u;
147
	fixed16_t		u_step;
148
	struct edge_s	*prev, *next;
149
	unsigned short	surfs[2];
150
	struct edge_s	*nextremove;
151
	float			nearzi;
152
	medge_t			*owner;
153
} edge_t;
154
 
155
#endif	// _R_SHARED_H_
156
 
157
#endif	// GLQUAKE