summaryrefslogtreecommitdiff
path: root/source/ref_public.h
blob: f49aa8ed3ec2cd29e5683db01f2d5d8b3f740e08 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
/*
Copyright (C) 1997-2001 Id Software, Inc.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  

See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*/

//
// ref_public.h
//

#ifndef __REF_H
#define __REF_H

#define	MAX_DLIGHTS		32
#define	MAX_ENTITIES	128
#define	MAX_PARTICLES	4096
#define	MAX_LIGHTSTYLES	256

#define POWERSUIT_SCALE		4.0F

#define SHELL_RED_COLOR		0xF2
#define SHELL_GREEN_COLOR	0xD0
#define SHELL_BLUE_COLOR	0xF3

#define SHELL_RG_COLOR		0xDC
//#define SHELL_RB_COLOR		0x86
#define SHELL_RB_COLOR		0x68
#define SHELL_BG_COLOR		0x78

//ROGUE
#define SHELL_DOUBLE_COLOR	0xDF // 223
#define	SHELL_HALF_DAM_COLOR	0x90
#define SHELL_CYAN_COLOR	0x72
//ROGUE

#define SHELL_WHITE_COLOR	0xD7

#define RF_LEFTHAND			0x80000000

typedef struct entity_s {
	qhandle_t			model;			// opaque type outside refresh
	vec3_t				angles;

	/*
	** most recent data
	*/
	vec3_t				origin;		// also used as RF_BEAM's "from"
	int					frame;			// also used as RF_BEAM's diameter

	/*
	** previous data for lerping
	*/
	vec3_t				oldorigin;	// also used as RF_BEAM's "to"
	int					oldframe;

	/*
	** misc
	*/
	float	backlerp;				// 0.0 = current, 1.0 = old
	int		skinnum;				// also used as RF_BEAM's palette index

	int		lightstyle;				// for flashing entities
	float	alpha;					// ignore if RF_TRANSLUCENT isn't set

	qhandle_t	skin;			// NULL for inline skin
	int			flags;
} entity_t;

#define ENTITY_FLAGS  68

typedef struct dlight_s {
	vec3_t	origin;
	vec3_t	color;
	float	intensity;
} dlight_t;

typedef struct particle_s {
	vec3_t	origin;
	int		color;
	float	alpha;
	color_t		rgb;
} particle_t;

typedef struct lightstyle_s {
	float			white;			// highest of RGB
	vec3_t			rgb;			// 0.0 - 2.0
} lightstyle_t;

typedef struct refdef_s {
	int			x, y, width, height;// in virtual screen coordinates
	float		fov_x, fov_y;
	vec3_t		vieworg;
	vec3_t		viewangles;
	vec4_t		blend;			// rgba 0-1 full screen blend
	float		time;				// time is uesed to auto animate
	int			rdflags;			// RDF_UNDERWATER, etc

	byte		*areabits;			// if not NULL, only areas with set bits will be drawn

	lightstyle_t	*lightstyles;	// [MAX_LIGHTSTYLES]

	int			num_entities;
	entity_t	*entities;

	int			num_dlights;
	dlight_t	*dlights;

	int			num_particles;
	particle_t	*particles;
} refdef_t;

typedef enum glHardware_e {
	GL_RENDERER_OTHER,
	GL_RENDERER_SOFTWARE,
	GL_RENDERER_MCD,
	GL_RENDERER_VOODOO,
	GL_RENDERER_VOODOO_RUSH,
	GL_RENDERER_POWERVR,
	GL_RENDERER_GLINT,
	GL_RENDERER_PERMEDIA2,
	GL_RENDERER_INTERGRAPH,
	GL_RENDERER_RENDITION,
    GL_RENDERER_MESADRI
} glHardware_t;

typedef enum {
	QVF_MINIDRIVER		= ( 1 << 0 ),
	QVF_ACCELERATED		= ( 1 << 1 ),
	QVF_GAMMARAMP		= ( 1 << 2 ),
	QVF_FULLSCREEN		= ( 1 << 3 )
} vidFlags_t;

typedef struct glconfig_s {
	glHardware_t	renderer;
	const char *rendererString;
	const char *vendorString;
	const char *versionString;
	const char *extensionsString;

	int		vidWidth;
	int		vidHeight;

    int         flags;
	float		maxAnisotropy;
} glconfig_t;

#define	DRAW_COLOR_CLEAR	0
#define	DRAW_COLOR_RGB		0x00000001
#define	DRAW_COLOR_ALPHA	0x00000002
#define	DRAW_COLOR_RGBA	    0x00000003
#define	DRAW_COLOR_INDEXED	0x00000004
#define	DRAW_COLOR_MASK		0x00000007


#define	DRAW_CLIP_DISABLED	0
#define DRAW_CLIP_LEFT		0x00000004
#define DRAW_CLIP_RIGHT		0x00000008
#define DRAW_CLIP_TOP		0x00000010
#define DRAW_CLIP_BOTTOM	0x00000020
#define DRAW_CLIP_MASK		0x0000003C

typedef struct {
	int left, right, top, bottom;
} clipRect_t;

// called when the library is loaded
qboolean	R_Init( qboolean total );

// called before the library is unloaded
void	    R_Shutdown( qboolean total );

// All data that will be used in a level should be
// registered before rendering any frames to prevent disk hits,
// but they can still be registered at a later time
// if necessary.
//
// EndRegistration will free any remaining data that wasn't registered.
// Any model_s or skin_s pointers from before the BeginRegistration
// are no longer valid after EndRegistration.
//
// Skins and images need to be differentiated, because skins
// are flood filled to eliminate mip map edge errors, and pics have
// an implicit "pics/" prepended to the name. (a pic name that starts with a
// slash will not use the "pics/" prefix or the ".pcx" postfix)
void	R_BeginRegistration( const char *map );
qhandle_t R_RegisterModel( const char *name );
qhandle_t R_RegisterSkin( const char *name );
qhandle_t R_RegisterPic( const char *name );
qhandle_t R_RegisterFont( const char *name );
void	R_SetSky( const char *name, float rotate, vec3_t axis );
void	R_EndRegistration( void );

void    R_RenderFrame( refdef_t *fd );
void	R_LightPoint( vec3_t origin, vec3_t light );

void	R_SetColor( int flags, const color_t color );
void	R_SetClipRect( int flags, const clipRect_t *clip );
void	R_SetScale( float *scale );
void    R_DrawChar( int x, int y, int flags, int ch, qhandle_t font );
int 	R_DrawString( int x, int y, int flags, size_t maxChars,
                      const char *string, qhandle_t font ); // returns advanced x coord
qboolean R_GetPicSize( int *w, int *h, qhandle_t pic ); // returns transparency bit
void	R_DrawPic( int x, int y, qhandle_t pic );
void	R_DrawStretchPic( int x, int y, int w, int h, qhandle_t pic );
void	R_DrawStretchPicST( int x, int y, int w, int h,
        float s1, float t1, float s2, float t2, qhandle_t pic );
void	R_TileClear( int x, int y, int w, int h, qhandle_t pic );
void	R_DrawFill( int x, int y, int w, int h, int c );
void	R_DrawFillEx( int x, int y, int w, int h, const color_t color );

// video mode and refresh state management entry points
void	R_BeginFrame( void );
void	R_EndFrame( void );
void    R_ModeChanged( int width, int height, int flags, int rowbytes, void *pixels );
void	R_GetConfig( glconfig_t *dest );

#endif // __REF_H