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
|
/*
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef REFRESH_H
#define REFRESH_H
#include "common/error.h"
#define MAX_DLIGHTS 32
#define MAX_ENTITIES 256 // == MAX_PACKET_ENTITIES * 2
#define MAX_PARTICLES 4096
#define MAX_LIGHTSTYLES 256
#define POWERSUIT_SCALE 4.0f
#define WEAPONSHELL_SCALE 0.5f
#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
#define RF_SHELL_MASK (RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE | \
RF_SHELL_DOUBLE | RF_SHELL_HALF_DAM)
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,
// -1 => use rgba
int lightstyle; // for flashing entities
float alpha; // ignore if RF_TRANSLUCENT isn't set
color_t rgba;
qhandle_t skin; // NULL for inline skin
int flags;
} entity_t;
typedef struct dlight_s {
vec3_t origin;
#if USE_REF == REF_GL
vec3_t transformed;
#endif
vec3_t color;
float intensity;
} dlight_t;
typedef struct particle_s {
vec3_t origin;
int color; // -1 => use rgba
float alpha;
color_t rgba;
} 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 {
QVF_ACCELERATED = (1 << 0),
QVF_GAMMARAMP = (1 << 1),
QVF_FULLSCREEN = (1 << 2),
QVF_VIDEOSYNC = (1 << 3)
} vidFlags_t;
typedef struct {
int width;
int height;
vidFlags_t flags;
} refcfg_t;
extern refcfg_t r_config;
typedef struct {
int left, right, top, bottom;
} clipRect_t;
typedef enum {
IF_NONE = 0,
IF_PERMANENT = (1 << 0),
IF_TRANSPARENT = (1 << 1),
IF_PALETTED = (1 << 2),
IF_SCRAP = (1 << 3),
IF_TURBULENT = (1 << 4)
} imageflags_t;
typedef enum {
IT_PIC,
IT_FONT,
IT_SKIN,
IT_SPRITE,
IT_WALL,
IT_SKY,
IT_MAX
} imagetype_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_RegisterImage(const char *name, imagetype_t type,
imageflags_t flags, qerror_t *err_p);
void R_SetSky(const char *name, float rotate, vec3_t axis);
void R_EndRegistration(void);
#define R_RegisterPic(name) R_RegisterImage(name, IT_PIC, IF_PERMANENT, NULL)
#define R_RegisterPic2(name) R_RegisterImage(name, IT_PIC, IF_NONE, NULL)
#define R_RegisterFont(name) R_RegisterImage(name, IT_FONT, IF_PERMANENT, NULL)
#define R_RegisterSkin(name) R_RegisterImage(name, IT_SKIN, IF_NONE, NULL)
void R_RenderFrame(refdef_t *fd);
void R_LightPoint(vec3_t origin, vec3_t light);
void R_ClearColor(void);
void R_SetAlpha(float clpha);
void R_SetColor(uint32_t color);
void R_SetClipRect(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_TileClear(int x, int y, int w, int h, qhandle_t pic);
void R_DrawFill8(int x, int y, int w, int h, int c);
void R_DrawFill32(int x, int y, int w, int h, uint32_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);
#endif // REFRESH_H
|