1 /* 2 Copyright (C) 1997-2001 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 21 #if defined WIN32_VARIANT 22 # include <windows.h> 23 #endif 24 25 #include <stdio.h> 26 27 #include <GL/gl.h> 28 #include <math.h> 29 #include "glext.h" 30 31 #ifndef GL_COLOR_INDEX8_EXT 32 #define GL_COLOR_INDEX8_EXT GL_COLOR_INDEX 33 #endif 34 35 #include "client/ref.h" 36 #include "client/vid.h" 37 38 #include "qgl.h" 39 #include "r_math.h" 40 41 #if !defined min 42 #define min(a,b) (((a)<(b)) ? (a) : (b)) 43 #endif 44 45 // up / down 46 #define PITCH 0 47 48 // left / right 49 #define YAW 1 50 51 // fall over 52 #define ROLL 2 53 54 #define DLIGHT_CUTOFF 64 55 56 extern viddef_t vid; 57 58 #include "r_image.h" 59 60 //=================================================================== 61 62 typedef enum 63 { 64 rserr_ok, 65 66 rserr_invalid_fullscreen, 67 rserr_invalid_mode, 68 69 rserr_unknown 70 } rserr_t; 71 72 #include "r_model.h" 73 74 extern float r_frametime; 75 76 void GL_BeginRendering (int *x, int *y, int *width, int *height); 77 void GL_EndRendering (void); 78 79 void GL_SetDefaultState( void ); 80 void GL_UpdateSwapInterval( void ); 81 82 extern float gldepthmin, gldepthmax; 83 84 #define MAX_LBM_HEIGHT 1024 85 86 #define BACKFACE_EPSILON 0.01 87 88 extern entity_t *currententity; 89 extern model_t *currentmodel; 90 extern int r_visframecount; 91 extern int r_framecount; 92 extern int r_shadowmapcount; 93 extern cplane_t frustum[4]; 94 extern int c_brush_polys, c_alias_polys; 95 extern int c_flares; 96 extern int c_grasses; 97 extern int c_beams; 98 99 extern int gl_filter_min, gl_filter_max; 100 101 // 102 // screen size info 103 // 104 extern refdef_t r_newrefdef; 105 extern int r_viewcluster, r_viewcluster2, r_oldviewcluster, r_oldviewcluster2; 106 mleaf_t *r_viewleaf, *r_viewleaf2; 107 108 extern cvar_t *r_norefresh; 109 extern cvar_t *r_lefthand; 110 extern cvar_t *r_drawentities; 111 extern cvar_t *r_drawworld; 112 extern cvar_t *r_fullbright; 113 extern cvar_t *r_novis; 114 extern cvar_t *r_nocull; 115 extern cvar_t *r_lerpmodels; 116 117 extern cvar_t *r_lightlevel; // FIXME: This is a HACK to get the client's light level 118 extern cvar_t *r_wave; //water waves 119 120 extern cvar_t *gl_ext_swapinterval; 121 extern cvar_t *gl_ext_pointparameters; 122 extern cvar_t *gl_ext_compiled_vertex_array; 123 124 extern cvar_t *gl_particle_min_size; 125 extern cvar_t *gl_particle_max_size; 126 extern cvar_t *gl_particle_size; 127 extern cvar_t *gl_particle_att_a; 128 extern cvar_t *gl_particle_att_b; 129 extern cvar_t *gl_particle_att_c; 130 131 extern cvar_t *gl_bitdepth; 132 extern cvar_t *gl_mode; 133 extern cvar_t *gl_log; 134 extern cvar_t *gl_lightmap; 135 extern cvar_t *gl_dynamic; 136 extern cvar_t *gl_nobind; 137 extern cvar_t *gl_picmip; 138 extern cvar_t *gl_skymip; 139 extern cvar_t *gl_showtris; 140 extern cvar_t *gl_showpolys; 141 extern cvar_t *gl_finish; 142 extern cvar_t *gl_clear; 143 extern cvar_t *gl_cull; 144 extern cvar_t *gl_poly; 145 extern cvar_t *gl_polyblend; 146 extern cvar_t *gl_modulate; 147 extern cvar_t *gl_drawbuffer; 148 extern cvar_t *gl_driver; 149 extern cvar_t *gl_swapinterval; 150 extern cvar_t *gl_texturemode; 151 extern cvar_t *gl_texturealphamode; 152 extern cvar_t *gl_texturesolidmode; 153 extern cvar_t *gl_lockpvs; 154 extern cvar_t *gl_vlights; 155 extern cvar_t *gl_usevbo; 156 157 extern cvar_t *vid_fullscreen; 158 extern cvar_t *vid_gamma; 159 extern cvar_t *vid_contrast; 160 161 extern cvar_t *r_anisotropic; 162 extern cvar_t *r_alphamasked_anisotropic; 163 extern cvar_t *r_ext_max_anisotropy; 164 165 extern cvar_t *r_overbrightbits; 166 167 extern cvar_t *gl_normalmaps; 168 extern cvar_t *gl_bspnormalmaps; 169 extern cvar_t *gl_shadowmaps; 170 extern cvar_t *gl_fog; 171 172 extern cvar_t *r_shaders; 173 extern cvar_t *r_bloom; 174 extern cvar_t *r_lensflare; 175 extern cvar_t *r_lensflare_intens; 176 extern cvar_t *r_drawsun; 177 extern cvar_t *r_godrays; 178 extern cvar_t *r_godray_intensity; 179 extern cvar_t *r_optimize; 180 181 extern cvar_t *r_lightmapfiles; 182 183 extern cvar_t *r_ragdolls; 184 extern cvar_t *r_ragdoll_debug; 185 186 extern qboolean map_fog; 187 #if defined WIN32_VARIANT 188 extern char map_music[MAX_PATH]; 189 #else 190 extern char map_music[MAX_OSPATH]; 191 #endif 192 extern unsigned r_weather; 193 extern unsigned r_nosun; 194 extern float r_sunX; 195 extern float r_sunY; 196 extern float r_sunZ; 197 198 extern cvar_t *r_minimap; 199 extern cvar_t *r_minimap_size; 200 extern cvar_t *r_minimap_zoom; 201 extern cvar_t *r_minimap_style; 202 203 extern cvar_t *gl_mirror; 204 205 extern cvar_t *gl_arb_fragment_program; 206 extern cvar_t *gl_glsl_shaders; 207 208 extern cvar_t *sys_affinity; 209 extern cvar_t *sys_priority; 210 211 extern cvar_t *gl_screenshot_type; 212 extern cvar_t *gl_screenshot_jpeg_quality; 213 214 extern cvar_t *r_test; 215 216 extern int gl_lightmap_format; 217 extern int gl_solid_format; 218 extern int gl_alpha_format; 219 extern int gl_tex_solid_format; 220 extern int gl_tex_alpha_format; 221 222 extern int c_visible_lightmaps; 223 extern int c_visible_textures; 224 225 extern float r_world_matrix[16]; 226 extern float r_project_matrix[16]; 227 extern int r_viewport[4]; 228 extern float r_farclip, r_farclip_min, r_farclip_bias; 229 230 extern int r_origin_leafnum; 231 232 //Image 233 void R_InitImageSubsystem(void); 234 void GL_Bind (int texnum); 235 void GL_MBind( GLenum target, int texnum ); 236 void GL_TexEnv( GLenum value ); 237 void GL_EnableMultitexture( qboolean enable ); 238 void GL_SelectTexture( GLenum ); 239 void RefreshFont (void); 240 241 extern void vectoangles (vec3_t value1, vec3_t angles); 242 243 // dynamic lights 244 void R_StaticLightPoint (vec3_t p, vec3_t color); 245 void R_DynamicLightPoint (vec3_t p, vec3_t color); 246 void R_LightPoint (vec3_t p, vec3_t color, qboolean addDynamic); 247 void R_PushDlights (void); 248 void R_PushDlightsForBModel (entity_t *e); 249 void SetVertexOverbrights (qboolean toggle); 250 251 //==================================================================== 252 extern model_t *r_worldmodel; 253 254 extern unsigned d_8to24table[256]; 255 256 extern int registration_sequence; 257 258 extern void V_AddBlend (float r, float g, float b, float a, float *v_blend); 259 260 //Renderer main loop 261 extern int R_Init( void *hinstance, void *hWnd ); 262 extern void R_Shutdown( void ); 263 264 extern void R_SetupViewport (void); 265 extern void R_RenderView (refdef_t *fd); 266 extern void GL_ScreenShot_f (void); 267 extern void R_DrawAliasModel (void); 268 extern void R_DrawBrushModel (void); 269 extern void R_DrawWorldSurfs (void); 270 extern void R_RenderDlights (void); 271 extern void R_DrawAlphaSurfaces (void); 272 extern void R_InitParticleTexture (void); 273 extern void R_DrawParticles (void); 274 extern void R_DrawRadar(void); 275 extern void R_DrawVehicleHUD (void); 276 extern void R_ClearSkyBox (void); 277 extern void R_DrawSkyBox (void); 278 extern void Draw_InitLocal (void); 279 280 //Renderer utils 281 extern void R_SubdivideSurface (msurface_t *fa, int firstedge, int numedges); 282 extern qboolean R_CullBox (vec3_t mins, vec3_t maxs); 283 extern qboolean R_CullOrigin(vec3_t origin); 284 extern qboolean R_CullSphere( const vec3_t centre, const float radius, const int clipflags ); 285 extern void R_RotateForEntity (entity_t *e); 286 extern void R_MarkWorldSurfs (void); 287 extern void R_AddSkySurface (msurface_t *fa); 288 extern void R_RenderWaterPolys (msurface_t *fa, int texnum, float scaleX, float scaleY); 289 extern void R_ReadFogScript(char config_file[128]); 290 extern void R_ReadMusicScript(char config_file[128]); 291 292 //Lights 293 extern dlight_t *dynLight; 294 extern vec3_t lightspot; 295 extern void R_MarkLights (dlight_t *light, int bit, mnode_t *node); 296 extern void VLight_Init (void); 297 extern float VLight_GetLightValue ( vec3_t normal, vec3_t dir, float apitch, float ayaw ); 298 299 //BSP 300 extern GLuint normalisationCubeMap; 301 extern image_t *r_droplets; 302 extern image_t *r_droplets_nm; 303 extern image_t *r_blooddroplets; 304 extern image_t *r_blooddroplets_nm; 305 extern void BSP_DrawTexturelessPoly (msurface_t *fa); 306 extern void BSP_DrawTexturelessBrushModel (entity_t *e); 307 308 //Postprocess 309 void R_GLSLPostProcess(void); 310 void R_FB_InitTextures(void); 311 312 //VBO 313 extern qboolean use_vbo; 314 extern GLuint vboId; 315 extern GLuint eboId; 316 extern int totalVBOsize; 317 extern int vboPosition; 318 extern void R_LoadVBOSubsystem(void); 319 extern void R_VCShutdown(void); 320 extern void VB_VCInit(void); 321 extern void VB_BuildVBOBufferSize(msurface_t *surf); 322 extern void VB_BuildWorldVBO(void); 323 void GL_SetupWorldVBO (void); 324 void GL_BindVBO(vertCache_t *cache); 325 void GL_BindIBO(vertCache_t *cache); 326 vertCache_t *R_VCFindCache(vertStoreMode_t store, model_t *mod); 327 vertCache_t *R_VCLoadData(vertCacheMode_t mode, int size, void *buffer, vertStoreMode_t store, model_t *mod); 328 329 //Light Bloom 330 extern void R_BloomBlend( refdef_t *fd ); 331 extern void R_InitBloomTextures( void ); 332 333 //Flares and Sun 334 int r_numflares; 335 extern int c_flares; 336 flare_t r_flares[MAX_FLARES]; 337 extern void Mod_AddFlareSurface (msurface_t *surf, int type ); 338 extern void R_RenderFlares (void); 339 extern void R_ClearFlares(void); 340 341 vec3_t sun_origin; 342 qboolean spacebox; 343 qboolean draw_sun; 344 float sun_x; 345 float sun_y; 346 float sun_size; 347 extern void R_InitSun(); 348 extern void R_RenderSun(); 349 350 //Vegetation 351 int r_numgrasses; 352 extern int c_grasses; 353 grass_t r_grasses[MAX_GRASSES]; 354 qboolean r_hasleaves; 355 extern void Mod_AddVegetationSurface (msurface_t *surf, int texnum, vec3_t color, float size, char name[MAX_QPATH], int type); 356 extern void R_DrawVegetationSurface (void); 357 extern void R_ClearGrasses(void); 358 extern void R_FinalizeGrass(model_t *mod); 359 360 //Simple Items 361 extern void R_SI_InitTextures( void ); 362 extern void R_DrawSimpleItems( void ); 363 void R_SetSimpleTexnum (model_t *loadmodel, const char *pathname); 364 365 //Light beams/volumes 366 int r_numbeams; 367 extern int c_beams; 368 beam_t r_beams[MAX_BEAMS]; 369 extern void Mod_AddBeamSurface (msurface_t *surf, int texnum, vec3_t color, float size, char name[MAX_QPATH], int type, float xang, float yang, 370 qboolean rotating); 371 extern void R_DrawBeamSurface ( void ); 372 extern void R_ClearBeams(void); 373 374 //Player icons 375 extern float scr_playericonalpha; 376 377 //Team colors 378 int r_teamColor; 379 qboolean r_gotFlag; 380 qboolean r_lostFlag; 381 382 extern void Draw_GetPicSize (int *w, int *h, const char *name); 383 extern void Draw_Pic (float x, float y, const char *name); 384 extern void Draw_ScaledPic (float x, float y, float scale, const char *pic); 385 extern void Draw_StretchPic (float x, float y, float w, float h, const char *name); 386 extern void Draw_FadeScreen (void); 387 388 extern void R_BeginFrame( float camera_separation ); 389 extern void R_SwapBuffers( int ); 390 extern void R_SetPalette ( const unsigned char *palette); 391 extern int Draw_GetPalette (void); 392 393 image_t *R_RegisterSkin (char *name); 394 image_t *R_RegisterParticlePic(const char *name); 395 image_t *R_RegisterParticleNormal(const char *name); 396 image_t *R_RegisterGfxPic(const char *name); 397 398 extern void LoadPCX (char *filename, byte **pic, byte **palette, int *width, int *height); 399 extern image_t *GL_FindFreeImage (char *name, int width, int height, imagetype_t type); 400 extern image_t *GL_LoadPic (char *name, byte *pic, int width, int height, imagetype_t type, int bits); 401 extern image_t *GL_GetImage( const char * name ); 402 extern image_t *GL_FindImage (char *name, imagetype_t type); 403 extern void GL_FreeImage( image_t * image ); 404 extern void GL_TextureMode( char *string ); 405 extern void GL_ImageList_f (void); 406 407 extern void GL_InitImages (void); 408 extern void GL_ShutdownImages (void); 409 410 extern void GL_FreeUnusedImages (void); 411 412 extern void GL_TextureAlphaMode( char *string ); 413 extern void GL_TextureSolidMode( char *string ); 414 415 /* 416 ** GL config stuff 417 */ 418 #define GL_RENDERER_VOODOO 0x00000001 419 #define GL_RENDERER_VOODOO2 0x00000002 420 #define GL_RENDERER_VOODOO_RUSH 0x00000004 421 #define GL_RENDERER_BANSHEE 0x00000008 422 #define GL_RENDERER_3DFX 0x0000000F 423 424 #define GL_RENDERER_PCX1 0x00000010 425 #define GL_RENDERER_PCX2 0x00000020 426 #define GL_RENDERER_PMX 0x00000040 427 #define GL_RENDERER_POWERVR 0x00000070 428 429 #define GL_RENDERER_PERMEDIA2 0x00000100 430 #define GL_RENDERER_GLINT_MX 0x00000200 431 #define GL_RENDERER_GLINT_TX 0x00000400 432 #define GL_RENDERER_3DLABS_MISC 0x00000800 433 #define GL_RENDERER_3DLABS 0x00000F00 434 435 #define GL_RENDERER_REALIZM 0x00001000 436 #define GL_RENDERER_REALIZM2 0x00002000 437 #define GL_RENDERER_INTERGRAPH 0x00003000 438 439 #define GL_RENDERER_3DPRO 0x00004000 440 #define GL_RENDERER_REAL3D 0x00008000 441 #define GL_RENDERER_RIVA128 0x00010000 442 #define GL_RENDERER_DYPIC 0x00020000 443 444 #define GL_RENDERER_V1000 0x00040000 445 #define GL_RENDERER_V2100 0x00080000 446 #define GL_RENDERER_V2200 0x00100000 447 #define GL_RENDERER_RENDITION 0x001C0000 448 449 #define GL_RENDERER_O2 0x00100000 450 #define GL_RENDERER_IMPACT 0x00200000 451 #define GL_RENDERER_RE 0x00400000 452 #define GL_RENDERER_IR 0x00800000 453 #define GL_RENDERER_SGI 0x00F00000 454 455 #define GL_RENDERER_MCD 0x01000000 456 #define GL_RENDERER_OTHER 0x80000000 457 458 #define GLSTATE_DISABLE_ALPHATEST if (gl_state.alpha_test) { qglDisable(GL_ALPHA_TEST); gl_state.alpha_test=false; } 459 #define GLSTATE_ENABLE_ALPHATEST if (!gl_state.alpha_test) { qglEnable(GL_ALPHA_TEST); gl_state.alpha_test=true; } 460 461 #define GLSTATE_DISABLE_BLEND if (gl_state.blend) { qglDisable(GL_BLEND); gl_state.blend=false; } 462 #define GLSTATE_ENABLE_BLEND if (!gl_state.blend) { qglEnable(GL_BLEND); gl_state.blend=true; } 463 464 #define GLSTATE_DISABLE_TEXGEN if (gl_state.texgen) { qglDisable(GL_TEXTURE_GEN_S); qglDisable(GL_TEXTURE_GEN_T); qglDisable(GL_TEXTURE_GEN_R); gl_state.texgen=false; } 465 #define GLSTATE_ENABLE_TEXGEN if (!gl_state.texgen) { qglEnable(GL_TEXTURE_GEN_S); qglEnable(GL_TEXTURE_GEN_T); qglEnable(GL_TEXTURE_GEN_R); gl_state.texgen=true; } 466 467 #define GL_COMBINE 0x8570 468 #define GL_DOT3_RGB 0x86AE 469 470 typedef struct 471 { 472 int renderer; 473 const char *renderer_string; 474 const char *vendor_string; 475 const char *version_string; 476 const char *extensions_string; 477 qboolean allow_cds; 478 qboolean mtexcombine; 479 } glconfig_t; 480 481 typedef struct 482 { 483 float inverse_intensity; 484 qboolean fullscreen; 485 486 int prev_mode; 487 488 unsigned char *d_16to8table; 489 490 int lightmap_textures; 491 492 int currenttextures[3]; 493 int currenttmu; 494 495 float camera_separation; 496 qboolean stereo_enabled; 497 498 qboolean alpha_test; 499 qboolean blend; 500 qboolean texgen; 501 qboolean fragment_program; 502 qboolean glsl_shaders; 503 qboolean separateStencil; 504 qboolean stencil_wrap; 505 qboolean vbo; 506 qboolean fbo; 507 qboolean hasFBOblit; 508 509 qboolean ati; 510 511 } glstate_t; 512 513 extern glconfig_t gl_config; 514 extern glstate_t gl_state; 515 516 // vertex arrays 517 extern int KillFlags; 518 519 #define MAX_ARRAY (MAX_PARTICLES*4) 520 521 #define VA_SetElem2(v,a,b) ((v)[0]=(a),(v)[1]=(b)) 522 #define VA_SetElem3(v,a,b,c) ((v)[0]=(a),(v)[1]=(b),(v)[2]=(c)) 523 #define VA_SetElem4(v,a,b,c,d) ((v)[0]=(a),(v)[1]=(b),(v)[2]=(c),(v)[3]=(d)) 524 525 extern float tex_array[MAX_ARRAY][2]; 526 extern float vert_array[MAX_ARRAY][3]; 527 extern float norm_array[MAX_ARRAY][3]; 528 extern float tan_array[MAX_ARRAY][4]; 529 extern float col_array[MAX_ARRAY][4]; 530 531 #define MAX_VARRAY_VERTS (MAX_VERTS + 2) 532 #define MAX_VARRAY_VERTEX_SIZE 11 533 534 #define MAX_VERTICES 16384 535 #define MAX_INDICES (MAX_VERTICES * 4) 536 #define MAX_SHADOW_VERTS 16384 537 538 extern float VArrayVerts[MAX_VARRAY_VERTS * MAX_VARRAY_VERTEX_SIZE]; 539 extern int VertexSizes[]; 540 extern float *VArray; 541 extern vec3_t ShadowArray[MAX_SHADOW_VERTS]; 542 543 // define our vertex types 544 #define VERT_SINGLE_TEXTURED 0 // verts and st for 1 tmu 545 #define VERT_BUMPMAPPED 1 // verts and st for 1 tmu, but with 2 texcoord pointers 546 #define VERT_MULTI_TEXTURED 2 // verts and st for 2 tmus 547 #define VERT_COLOURED_UNTEXTURED 3 // verts and colour 548 #define VERT_COLOURED_TEXTURED 4 // verts, st for 1 tmu and colour 549 #define VERT_COLOURED_MULTI_TEXTURED 5 // verts, st for 2 tmus and colour 550 #define VERT_DUAL_TEXTURED 6 // verts, st for 2 tmus both with same st 551 #define VERT_NO_TEXTURE 7 // verts only, no textures 552 #define VERT_BUMPMAPPED_COLOURED 8 // verts and st for 1 tmu, 2 texoord pointers and colour 553 #define VERT_NORMAL_COLOURED_TEXTURED 9 // verts and st for 1tmu and color, with normals 554 555 // looks like these should be bit flags (2010-08) 556 // apparently not - this was not working as bit flags, works fine as ints 557 #define KILL_TMU0_POINTER 1 558 #define KILL_TMU1_POINTER 2 559 #define KILL_TMU2_POINTER 3 560 #define KILL_TMU3_POINTER 4 561 #define KILL_TMU4_POINTER 5 562 #define KILL_TMU5_POINTER 6 563 #define KILL_RGBA_POINTER 7 564 #define KILL_NORMAL_POINTER 8 565 566 // vertex array subsystem 567 void R_InitVArrays (int varraytype); 568 void R_KillVArrays (void); 569 void R_DrawVarrays(GLenum mode, GLint first, GLsizei count); 570 void R_InitQuadVarrays(void); 571 void R_AddSurfToVArray (msurface_t *surf); 572 void R_AddShadowSurfToVArray (msurface_t *surf, vec3_t origin); 573 void R_AddTexturedSurfToVArray (msurface_t *surf, float scroll); 574 void R_AddLightMappedSurfToVArray (msurface_t *surf, float scroll); 575 void R_AddGLSLShadedWarpSurfToVArray (msurface_t *surf, float scroll); 576 void R_KillNormalTMUs(void); 577 578 //shadows 579 extern void R_InitShadowSubsystem(void); 580 extern void R_CastShadow(void); 581 extern cvar_t *r_shadowmapscale; 582 extern int r_lightgroups; 583 extern image_t *r_depthtexture; 584 extern image_t *r_depthtexture2; 585 extern image_t *r_colorbuffer; 586 extern GLuint fboId[3]; 587 extern GLuint rboId; 588 extern vec3_t r_worldLightVec; 589 typedef struct LightGroup 590 { 591 vec3_t group_origin; 592 vec3_t accum_origin; 593 float avg_intensity; 594 float dist; 595 } LightGroup_t; 596 extern LightGroup_t LightGroups[MAX_LIGHTS]; 597 598 extern void R_CheckFBOExtensions (void); 599 extern void R_GenerateShadowFBO(void); 600 extern void MD2_DrawCaster (void); 601 extern void IQM_DrawCaster (void); 602 extern void IQM_DrawRagDollCaster (int); 603 extern void R_DrawDynamicCaster(void); 604 extern void R_DrawVegetationCaster(void); 605 extern void R_DrawEntityCaster(entity_t *ent); 606 extern void R_GenerateEntityShadow( void ); 607 extern void R_GenerateRagdollShadow( int RagDollID ); 608 extern void BSP_DrawShadowPoly (msurface_t *fa, vec3_t origin); 609 extern void R_DrawShadowMapWorld(qboolean forEnt, vec3_t origin); 610 int FB_texture_width, FB_texture_height; 611 float fadeShadow; 612 cvar_t *r_shadowcutoff; 613 614 //shader programs 615 extern void R_LoadARBPrograms(void); 616 extern void R_LoadGLSLPrograms(void); 617 618 //arb fragment 619 extern unsigned int g_water_program_id; 620 621 //glsl 622 extern GLhandleARB g_programObj; 623 extern GLhandleARB g_shadowprogramObj; 624 extern GLhandleARB g_waterprogramObj; 625 extern GLhandleARB g_meshprogramObj; 626 extern GLhandleARB g_glassprogramObj; 627 extern GLhandleARB g_blankmeshprogramObj; 628 extern GLhandleARB g_fbprogramObj; 629 extern GLhandleARB g_blurprogramObj; 630 extern GLhandleARB g_rblurprogramObj; 631 extern GLhandleARB g_dropletsprogramObj; 632 extern GLhandleARB g_godraysprogramObj; 633 634 extern GLhandleARB g_vertexShader; 635 extern GLhandleARB g_fragmentShader; 636 637 //standard bsp surfaces 638 extern GLuint g_location_surfTexture; 639 extern GLuint g_location_eyePos; 640 extern GLuint g_tangentSpaceTransform; 641 extern GLuint g_location_heightTexture; 642 extern GLuint g_location_lmTexture; 643 extern GLuint g_location_normalTexture; 644 extern GLuint g_location_bspShadowmapTexture; 645 extern GLuint g_location_bspShadowmapTexture2; 646 extern GLuint g_location_bspShadowmapNum; 647 extern GLuint g_location_fog; 648 extern GLuint g_location_parallax; 649 extern GLuint g_location_dynamic; 650 extern GLuint g_location_shadowmap; 651 extern GLuint g_Location_statshadow; 652 extern GLuint g_location_xOffs; 653 extern GLuint g_location_yOffs; 654 extern GLuint g_location_lightPosition; 655 extern GLuint g_location_staticLightPosition; 656 extern GLuint g_location_lightColour; 657 extern GLuint g_location_lightCutoffSquared; 658 extern GLuint g_location_liquid; 659 extern GLuint g_location_shiny; 660 extern GLuint g_location_rsTime; 661 extern GLuint g_location_liquidTexture; 662 extern GLuint g_location_liquidNormTex; 663 extern GLuint g_location_chromeTex; 664 665 //shadows on white bsp surface 666 extern GLuint g_location_entShadow; 667 extern GLuint g_location_fadeShadow; 668 extern GLuint g_location_xOffset; 669 extern GLuint g_location_yOffset; 670 671 //water 672 extern GLuint g_location_baseTexture; 673 extern GLuint g_location_normTexture; 674 extern GLuint g_location_refTexture; 675 extern GLuint g_location_waterEyePos; 676 extern GLuint g_location_tangentSpaceTransform; 677 extern GLuint g_location_time; 678 extern GLuint g_location_lightPos; 679 extern GLuint g_location_reflect; 680 extern GLuint g_location_trans; 681 extern GLuint g_location_fogamount; 682 683 //mesh 684 extern GLuint g_location_meshlightPosition; 685 extern GLuint g_location_baseTex; 686 extern GLuint g_location_normTex; 687 extern GLuint g_location_fxTex; 688 extern GLuint g_location_fx2Tex; 689 extern GLuint g_location_color; 690 extern GLuint g_location_meshNormal; 691 extern GLuint g_location_meshTime; 692 extern GLuint g_location_meshFog; 693 extern GLuint g_location_useFX; 694 extern GLuint g_location_useGlow; 695 extern GLuint g_location_useShell; 696 extern GLuint g_location_useCube; 697 extern GLuint g_location_useGPUanim; 698 extern GLuint g_location_outframe; 699 extern GLuint g_location_fromView; 700 701 //glass 702 extern GLuint g_location_gmirTexture; 703 extern GLuint g_location_grefTexture; 704 extern GLuint g_location_gLightPos; 705 extern GLuint g_location_gFog; 706 extern GLuint g_location_gOutframe; 707 708 //blank mesh 709 extern GLuint g_location_bmOutframe; 710 711 //fullscreen distortion effects 712 extern GLuint g_location_framebuffTex; 713 extern GLuint g_location_distortTex; 714 extern GLuint g_location_dParams; 715 extern GLuint g_location_fxPos; 716 717 //gaussian blur 718 extern GLuint g_location_scale; 719 extern GLuint g_location_source; 720 721 //radial blur 722 extern GLuint g_location_rscale; 723 extern GLuint g_location_rsource; 724 extern GLuint g_location_rparams; 725 726 //water droplets 727 extern GLuint g_location_drSource; 728 extern GLuint g_location_drTex; 729 extern GLuint g_location_drTime; 730 extern GLuint g_location_drParams; 731 732 //god rays 733 extern GLuint g_location_lightPositionOnScreen; 734 extern GLuint g_location_sunTex; 735 extern GLuint g_location_godrayScreenAspect; 736 extern GLuint g_location_sunRadius; 737 738 //MD2 739 extern void Mod_LoadMD2Model (model_t *mod, void *buffer); 740 741 //Shared mesh items 742 extern vec3_t shadelight; 743 extern vec3_t shadevector; 744 extern int model_dlights_num; 745 extern m_dlight_t model_dlights[128]; 746 extern image_t *r_mirrortexture; 747 extern cvar_t *cl_gun; 748 vec3_t lightPosition; 749 vec3_t statLightPosition; 750 float statLightIntensity; 751 float dynFactor; 752 extern void R_GetLightVals(vec3_t origin, qboolean RagDoll); 753 extern void R_ModelViewTransform(const vec3_t in, vec3_t out); 754 extern void GL_BlendFunction (GLenum sfactor, GLenum dfactor); 755 756 //iqm 757 #define pi 3.14159265 758 extern float modelpitch; 759 extern double degreeToRadian(double degree); 760 extern qboolean Mod_INTERQUAKEMODEL_Load(model_t *mod, void *buffer); 761 extern qboolean IQM_ReadSkinFile(char skin_file[MAX_OSPATH], char *skinpath); 762 extern void R_DrawINTERQUAKEMODEL(void); 763 extern void IQM_AnimateFrame(float curframe, int nextframe); 764 extern qboolean IQM_InAnimGroup(int frame, int oldframe); 765 extern int IQM_NextFrame(int frame); 766 extern void IQM_AnimateRagdoll(int RagDollID, int shellEffect); 767 extern void IQM_DrawFrame(int skinnum, qboolean ragdoll, float shellAlpha); 768 extern void IQM_DrawShadow(vec3_t origin); 769 770 //Ragdoll 771 int r_DrawingRagDoll; 772 int r_SurfaceCount; 773 774 #define TURBSCALE2 (256.0 / (2 * M_PI)) 775 776 // reduce runtime calcs 777 #define TURBSCALE 40.743665431525205956834243423364 778 779 extern float r_turbsin[]; 780 /* 781 ==================================================================== 782 783 IMPLEMENTATION SPECIFIC FUNCTIONS 784 785 ==================================================================== 786 */ 787 788 extern void GLimp_BeginFrame( float camera_separation ); 789 extern void GLimp_EndFrame( void ); 790 extern qboolean GLimp_Init( void *hinstance, void *hWnd ); 791 extern void GLimp_Shutdown( void ); 792 extern rserr_t GLimp_SetMode( unsigned *pwidth, unsigned *pheight, int mode, qboolean fullscreen ); 793 extern void GLimp_AppActivate( qboolean active ); 794 extern void GLimp_EnableLogging( qboolean enable ); 795 extern void GLimp_LogNewFrame( void ); 796 797 /* 798 ==================================================================== 799 800 IMPORTED FUNCTIONS 801 802 ==================================================================== 803 */ 804 805 #include "r_script.h" 806