1 /* 2 * Copyright(c) 1997-2001 Id Software, Inc. 3 * Copyright(c) 2002 The Quakeforge Project. 4 * Copyright(c) 2006 Quetoo. 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 2 9 * of the License, or(at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 14 * 15 * See the GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 20 */ 21 22 #ifndef __VIDEO_H__ 23 #define __VIDEO_H__ 24 25 #include <stdio.h> 26 #include <math.h> 27 28 #include "qgl.h" 29 30 #define PITCH 0 31 #define YAW 1 32 #define ROLL 2 33 34 typedef unsigned char pixel_t; 35 36 typedef struct vrect_s { 37 int x, y, width, height; 38 struct vrect_s *pnext; 39 } vrect_t; 40 41 typedef struct { 42 pixel_t *buffer; // invisible buffer 43 pixel_t *colormap; // 256 * VID_GRADES size 44 pixel_t *alphamap; // 256 * 256 translucency map 45 int rowbytes; // may be > width if displayed in a window 46 // can be negative for stupid dibs 47 unsigned int width, height; 48 } viddef_t; 49 50 extern viddef_t viddef; 51 52 #define MAX_ENTITIES 128 53 #define MAX_PARTICLES 4096 54 55 #define POWERSUIT_SCALE 4.0F 56 57 #define SHELL_RED_COLOR 0xF2 58 #define SHELL_GREEN_COLOR 0xD0 59 #define SHELL_BLUE_COLOR 0xF3 60 61 #define SHELL_RG_COLOR 0xDC 62 #define SHELL_RB_COLOR 0x68 63 #define SHELL_BG_COLOR 0x78 64 #define SHELL_WHITE_COLOR 0xD7 65 66 typedef struct entity_s { 67 struct model_s *model; // opaque type outside view 68 float angles[3]; 69 70 // most recent data 71 float origin[3]; // also used as RF_BEAM's "from" 72 int frame; // also used as RF_BEAM's diameter 73 74 // previous data for lerping 75 float oldorigin[3]; // also used as RF_BEAM's "to" 76 int oldframe; 77 78 // misc 79 float backlerp; // 0.0 = current, 1.0 = old 80 int skinnum; // also used as RF_BEAM's palette index 81 82 int lightstyle; // for flashing entities 83 float alpha; // ignore if RF_TRANSLUCENT isn't set 84 85 struct image_s *skin; // NULL for inline skin 86 int flags; 87 } entity_t; 88 89 #define ENTITY_FLAGS 68 90 91 typedef struct { 92 vec3_t origin; 93 int color; 94 float alpha; 95 } particle_t; 96 97 typedef struct { 98 int x, y, width, height; // in virtual screen coordinates 99 float fov_x, fov_y; 100 float vieworg[3]; 101 float viewangles[3]; 102 float time; // time is uesed to auto animate 103 int rdflags; // RDF_UNDERWATER, etc 104 105 byte *areabits; // if not NULL, only areas with set bits will be drawn 106 107 int num_entities; 108 entity_t *entities; 109 110 int num_particles; 111 particle_t *particles; 112 } viewdef_t; 113 114 extern byte color_white[4]; 115 extern byte color_black[4]; 116 117 typedef struct { 118 void *OpenGLLib; // instance of opengl library 119 FILE *log_fp; 120 } glwstate_t; 121 122 extern glwstate_t glw_state; 123 124 /* 125 skins will be outline flood filled and mip mapped 126 pics and sprites with alpha will be outline flood filled 127 pic won't be mip mapped 128 129 model skin 130 sprite frame 131 wall texture 132 pic 133 */ 134 135 typedef enum { 136 it_skin, 137 it_sprite, 138 it_wall, 139 it_pic, 140 it_sky 141 } imagetype_t; 142 143 typedef struct image_s { 144 char name[MAX_QPATH]; // game path, including extension 145 imagetype_t type; 146 int width, height; // source image 147 int upload_width, upload_height; // after power of two and picmip 148 int registration_sequence; // 0 = free 149 struct msurface_s *texturechain; // for sort-by-texture world drawing 150 GLuint texnum; // gl texture binding 151 float sl, tl, sh, th; // 0,0 - 1,1 unless part of the scrap 152 qboolean scrap; 153 qboolean has_alpha; 154 } image_t; 155 156 #define TEXNUM_LIGHTMAPS 1024 157 #define TEXNUM_SCRAPS 1152 158 #define TEXNUM_IMAGES 1153 159 160 #define MAX_GLTEXTURES 1024 161 162 #include "gl_model.h" 163 164 void GL_BeginRendering(int *x, int *y, int *width, int *height); 165 void GL_EndRendering(void); 166 167 void GL_SetDefaultState(void); 168 void GL_UpdateSwapInterval(void); 169 170 extern float gldepthmin, gldepthmax; 171 172 typedef struct { 173 float x, y, z; 174 float s, t; 175 float r, g, b; 176 } glvert_t; 177 178 179 #define MAX_LBM_HEIGHT 480 180 181 #define BACKFACE_EPSILON 0.01 182 183 184 extern image_t gltextures[MAX_GLTEXTURES]; 185 extern int numgltextures; 186 187 extern image_t *r_notexture; 188 extern image_t *r_particletexture; 189 extern entity_t *currententity; 190 extern model_t *currentmodel; 191 extern int r_visframecount; 192 extern int r_framecount; 193 extern cplane_t frustum[4]; 194 extern int c_brush_polys, c_alias_polys; 195 extern int gl_filter_min, gl_filter_max; 196 197 // view origin 198 extern vec3_t vup; 199 extern vec3_t vpn; 200 extern vec3_t vright; 201 extern vec3_t r_origin; 202 203 // screen size info 204 extern viewdef_t r_viewdef; 205 extern int r_viewcluster, r_viewcluster2, r_oldviewcluster, r_oldviewcluster2; 206 207 extern cvar_t *r_drawentities; 208 extern cvar_t *r_speeds; 209 extern cvar_t *r_fullbright; 210 extern cvar_t *r_novis; 211 extern cvar_t *r_nocull; 212 extern cvar_t *r_lerpmodels; 213 214 extern cvar_t *gl_vertex_arrays; 215 extern cvar_t *gl_ext_multitexture; 216 extern cvar_t *gl_ext_compiled_vertex_array; 217 218 extern cvar_t *gl_log; 219 extern cvar_t *gl_lightmap; 220 extern cvar_t *gl_monolightmap; 221 extern cvar_t *gl_rounddown; 222 extern cvar_t *gl_picmip; 223 extern cvar_t *gl_skymip; 224 extern cvar_t *gl_wireframe; 225 extern cvar_t *gl_finish; 226 extern cvar_t *gl_ztrick; 227 extern cvar_t *gl_clear; 228 extern cvar_t *gl_cull; 229 extern cvar_t *gl_modulate; 230 extern cvar_t *gl_intensity; 231 extern cvar_t *gl_playermip; 232 extern cvar_t *gl_drawbuffer; 233 extern cvar_t *gl_driver; 234 extern cvar_t *gl_texturemode; 235 extern cvar_t *gl_texturealphamode; 236 extern cvar_t *gl_texturesolidmode; 237 extern cvar_t *gl_lockpvs; 238 239 extern cvar_t *vid_width; 240 extern cvar_t *vid_height; 241 extern cvar_t *vid_fullscreen; 242 extern cvar_t *vid_gamma; 243 244 extern cvar_t *intensity; 245 246 extern int gl_lightmap_format; 247 extern int gl_solid_format; 248 extern int gl_alpha_format; 249 extern int gl_tex_solid_format; 250 extern int gl_tex_alpha_format; 251 252 extern int c_visible_lightmaps; 253 extern int c_visible_textures; 254 255 extern cvar_t *skydistance; /* skybox size change */ 256 257 extern float r_world_matrix[16]; 258 259 void GL_TranslatePlayerSkin(int playernum); 260 void GL_Bind(int texnum); 261 void GL_MBind(GLenum target, int texnum); 262 void GL_TexEnv(GLenum value); 263 void GL_EnableMultitexture(qboolean enable); 264 void GL_SelectTexture(GLenum); 265 266 void GL_LightPoint(vec3_t p, vec3_t color); 267 268 extern model_t *r_worldmodel; 269 270 extern unsigned d_8to24table[256]; 271 272 extern int registration_sequence; 273 274 void GL_Init(void); 275 void GL_Shutdown(void); 276 void GL_Register(void); 277 void GL_BeginRegistration(char *model); 278 void GL_EndRegistration(void); 279 void GL_RenderFrame(viewdef_t *fd); 280 void GL_BeginFrame(void); 281 void GL_EndFrame(void); 282 void GL_Clear(void); 283 void GL_SetGL2D(void); 284 qboolean GL_SetMode(void); 285 qboolean GL_InitGraphics(int width, int height, qboolean fullscreen); 286 void GL_ShutdownGraphics(void); 287 void GL_EnableLogging(qboolean enable); 288 void GL_LogNewFrame(void); 289 void GL_Screenshot_f(void); 290 void GL_DrawAliasModel(entity_t *e); 291 void GL_DrawBrushModel(entity_t *e); 292 void GL_DrawSpriteModel(entity_t *e); 293 void GL_DrawBeam(entity_t *e); 294 void GL_DrawWorld(void); 295 void GL_DrawAlphaSurfaces(void); 296 void GL_RenderBrushPoly(msurface_t *fa); 297 void GL_InitParticleTexture(void); 298 void GL_InitNoTexture(void); 299 void Draw_InitLocal(void); 300 void GL_SubdivideSurface(msurface_t *fa); 301 qboolean GL_CullBox(vec3_t mins, vec3_t maxs); 302 void GL_RotateForEntity(entity_t *e); 303 void GL_MarkLeafs(void); 304 305 void VID_Restart_f(void); 306 307 glpoly_t *WaterWarpPolyVerts(glpoly_t *p); 308 void EmitWaterPolys(msurface_t *fa); 309 void GL_AddSkySurface(msurface_t *fa); 310 void GL_ClearSkyBox(void); 311 void GL_DrawSkyBox(void); 312 void GL_SetSky(char *name); 313 314 void COM_StripExtension(char *in, char *out); 315 316 image_t *Draw_FindPic(char *name); 317 void Draw_GetPicSize(int *w, int *h, char *name); 318 void Draw_Pic(int x, int y, char *name); 319 void Draw_Char(int x, int y, int c); 320 void Draw_Fill(int x, int y, int w, int h, int c); 321 322 void GL_BeginFrame(void); 323 void GL_SwapBuffers(int); 324 325 int Draw_GetPalette(void); 326 327 void GL_ResampleTexture(unsigned *in, int inwidth, int inheight, unsigned *out, int outwidth, int outheight); 328 329 struct image_s *GL_RegisterSkin(char *name); 330 struct model_s *GL_RegisterModel(char *name); 331 332 image_t *GL_LoadPic(char *name, byte *pic, int width, int height, imagetype_t type, int bits); 333 image_t *GL_FindImage(char *name, imagetype_t type); 334 void GL_TextureMode(char *string); 335 void GL_ImageList_f(void); 336 337 void GL_InitImages(void); 338 void GL_ShutdownImages(void); 339 340 void GL_FreeUnusedImages(void); 341 342 void GL_TextureAlphaMode(char *string); 343 void GL_TextureSolidMode(char *string); 344 345 /* 346 GL config stuff 347 */ 348 349 typedef struct { 350 const char *renderer_string; 351 const char *vendor_string; 352 const char *version_string; 353 const char *extensions_string; 354 } glconfig_t; 355 356 typedef struct { 357 float inverse_intensity; 358 qboolean fullscreen; 359 360 int prev_width; 361 int prev_height; 362 363 int lightmap_textures; 364 365 int currenttextures[2]; 366 int currenttmu; 367 } glstate_t; 368 369 extern glconfig_t gl_config; 370 extern glstate_t gl_state; 371 372 #endif /*__VIDEO_H__*/ 373