summaryrefslogtreecommitdiff
path: root/source/ref_public.h
blob: 2484a9293c497a2c45cd90a451d934e13b742d3a (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
232
233
234
235
236
237
238
239
240
241
242
/*
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 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;

//
// these are the functions exported by the refresh module
//
typedef struct refAPI_s {
	// called when the library is loaded
	qboolean	(*Init)( qboolean total );

	// called before the library is unloaded
	void	(*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	(*BeginRegistration)( const char *map );
	qhandle_t (*RegisterModel)( const char *name );
	qhandle_t (*RegisterSkin)( const char *name );
	qhandle_t (*RegisterPic)( const char *name );
	qhandle_t (*RegisterFont)( const char *name );
	void	(*SetSky)( const char *name, float rotate, vec3_t axis );
	void	(*EndRegistration)( void );
	void	(*GetModelSize)( qhandle_t hModel, vec3_t mins, vec3_t maxs );

	void	(*RenderFrame)( refdef_t *fd );
	void	(*LightPoint)( vec3_t origin, vec3_t light );

	void	(*SetColor)( int flags, const color_t color );
	void	(*SetClipRect)( int flags, const clipRect_t *clip );
	void	(*SetScale)( float *scale );
    void    (*DrawChar)( int x, int y, int flags, int ch, qhandle_t hFont );
	int 	(*DrawString)( int x, int y, int flags, size_t maxChars,
            const char *string, qhandle_t hFont ); // returns advanced x coord
    // will return 0 0 if not found
	void	(*DrawGetPicSize)( int *w, int *h, qhandle_t hPic );	
	void	(*DrawGetFontSize)( int *w, int *h, qhandle_t hFont );	
	void	(*DrawPic)( int x, int y, qhandle_t hPic );
	void	(*DrawStretchPic)( int x, int y, int w, int h, qhandle_t hPic );
	void	(*DrawStretchPicST)( int x, int y, int w, int h,
            float s1, float t1, float s2, float t2, qhandle_t hPic );
	void	(*DrawTileClear)( int x, int y, int w, int h, qhandle_t hPic );
	void	(*DrawFill)( int x, int y, int w, int h, int c );
	void	(*DrawFillEx)( int x, int y, int w, int h, const color_t color );

	// Draw images for cinematic rendering (which can have a different palette).
	void	(*DrawStretchRaw)( int x, int y, int w, int h, int cols, int rows, const byte *data );

	/*
	** video mode and refresh state management entry points
	*/
	void	(*CinematicSetPalette)( const byte *palette );	// NULL = game palette
	void	(*BeginFrame)( void );
	void	(*EndFrame)( void );
    void    (*ModeChanged)( int width, int height, int flags,
        int rowbytes, void *pixels );

	void	(*GetConfig)( glconfig_t *dest );
} refAPI_t;

extern refAPI_t		ref;

#endif // __REF_H