glquake.h revision 9fd67c44777b350dc56f3e70c88963b0d966ffc7
1/* 2Copyright (C) 1996-1997 Id Software, Inc. 3 4This program is free software; you can redistribute it and/or 5modify it under the terms of the GNU General Public License 6as published by the Free Software Foundation; either version 2 7of the License, or (at your option) any later version. 8 9This program is distributed in the hope that it will be useful, 10but WITHOUT ANY WARRANTY; without even the implied warranty of 11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 13See the GNU General Public License for more details. 14 15You should have received a copy of the GNU General Public License 16along with this program; if not, write to the Free Software 17Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 19*/ 20// disable data conversion warnings 21 22#pragma warning(disable : 4244) // MIPS 23#pragma warning(disable : 4136) // X86 24#pragma warning(disable : 4051) // ALPHA 25 26#ifdef _WIN32 27#include <windows.h> 28#endif 29 30#include <GL/gl.h> 31#include <GL/glu.h> 32 33void GL_BeginRendering (int *x, int *y, int *width, int *height); 34void GL_EndRendering (void); 35 36 37#ifdef _WIN32 38// Function prototypes for the Texture Object Extension routines 39typedef GLboolean (APIENTRY *ARETEXRESFUNCPTR)(GLsizei, const GLuint *, 40 const GLboolean *); 41typedef void (APIENTRY *BINDTEXFUNCPTR)(GLenum, GLuint); 42typedef void (APIENTRY *DELTEXFUNCPTR)(GLsizei, const GLuint *); 43typedef void (APIENTRY *GENTEXFUNCPTR)(GLsizei, GLuint *); 44typedef GLboolean (APIENTRY *ISTEXFUNCPTR)(GLuint); 45typedef void (APIENTRY *PRIORTEXFUNCPTR)(GLsizei, const GLuint *, 46 const GLclampf *); 47typedef void (APIENTRY *TEXSUBIMAGEPTR)(int, int, int, int, int, int, int, int, void *); 48 49extern BINDTEXFUNCPTR bindTexFunc; 50extern DELTEXFUNCPTR delTexFunc; 51extern TEXSUBIMAGEPTR TexSubImage2DFunc; 52#endif 53 54extern int texture_extension_number; 55extern int texture_mode; 56 57extern float gldepthmin, gldepthmax; 58 59void GL_Upload32 (unsigned *data, int width, int height, qboolean mipmap, qboolean alpha); 60void GL_Upload8 (byte *data, int width, int height, qboolean mipmap, qboolean alpha); 61int GL_LoadTexture (char *identifier, int width, int height, byte *data, qboolean mipmap, qboolean alpha); 62int GL_FindTexture (char *identifier); 63 64typedef struct 65{ 66 float x, y, z; 67 float s, t; 68 float r, g, b; 69} glvert_t; 70 71extern glvert_t glv; 72 73extern int glx, gly, glwidth, glheight; 74 75#ifdef _WIN32 76extern PROC glArrayElementEXT; 77extern PROC glColorPointerEXT; 78extern PROC glTexturePointerEXT; 79extern PROC glVertexPointerEXT; 80#endif 81 82// r_local.h -- private refresh defs 83 84#define ALIAS_BASE_SIZE_RATIO (1.0 / 11.0) 85 // normalizing factor so player model works out to about 86 // 1 pixel per triangle 87#define MAX_LBM_HEIGHT 480 88 89#define TILE_SIZE 128 // size of textures generated by R_GenTiledSurf 90 91#define SKYSHIFT 7 92#define SKYSIZE (1 << SKYSHIFT) 93#define SKYMASK (SKYSIZE - 1) 94 95#define BACKFACE_EPSILON 0.01 96 97 98void R_TimeRefresh_f (void); 99void R_ReadPointFile_f (void); 100texture_t *R_TextureAnimation (texture_t *base); 101 102typedef struct surfcache_s 103{ 104 struct surfcache_s *next; 105 struct surfcache_s **owner; // NULL is an empty chunk of memory 106 int lightadj[MAXLIGHTMAPS]; // checked for strobe flush 107 int dlight; 108 int size; // including header 109 unsigned width; 110 unsigned height; // DEBUG only needed for debug 111 float mipscale; 112 struct texture_s *texture; // checked for animating textures 113 byte data[4]; // width*height elements 114} surfcache_t; 115 116 117typedef struct 118{ 119 pixel_t *surfdat; // destination for generated surface 120 int rowbytes; // destination logical width in bytes 121 msurface_t *surf; // description for surface to generate 122 fixed8_t lightadj[MAXLIGHTMAPS]; 123 // adjust for lightmap levels for dynamic lighting 124 texture_t *texture; // corrected for animating textures 125 int surfmip; // mipmapped ratio of surface texels / world pixels 126 int surfwidth; // in mipmapped texels 127 int surfheight; // in mipmapped texels 128} drawsurf_t; 129 130 131typedef enum { 132 pt_static, pt_grav, pt_slowgrav, pt_fire, pt_explode, pt_explode2, pt_blob, pt_blob2 133} ptype_t; 134 135// !!! if this is changed, it must be changed in d_ifacea.h too !!! 136typedef struct particle_s 137{ 138// driver-usable fields 139 vec3_t org; 140 float color; 141// drivers never touch the following fields 142 struct particle_s *next; 143 vec3_t vel; 144 float ramp; 145 float die; 146 ptype_t type; 147} particle_t; 148 149 150//==================================================== 151 152 153extern entity_t r_worldentity; 154extern qboolean r_cache_thrash; // compatability 155extern vec3_t modelorg, r_entorigin; 156extern entity_t *currententity; 157extern int r_visframecount; // ??? what difs? 158extern int r_framecount; 159extern mplane_t frustum[4]; 160extern int c_brush_polys, c_alias_polys; 161 162 163// 164// view origin 165// 166extern vec3_t vup; 167extern vec3_t vpn; 168extern vec3_t vright; 169extern vec3_t r_origin; 170 171// 172// screen size info 173// 174extern refdef_t r_refdef; 175extern mleaf_t *r_viewleaf, *r_oldviewleaf; 176extern texture_t *r_notexture_mip; 177extern int d_lightstylevalue[256]; // 8.8 fraction of base light value 178 179extern qboolean envmap; 180extern int currenttexture; 181extern int cnttextures[2]; 182extern int particletexture; 183extern int playertextures; 184 185extern int skytexturenum; // index in cl.loadmodel, not gl texture object 186 187extern cvar_t r_norefresh; 188extern cvar_t r_drawentities; 189extern cvar_t r_drawworld; 190extern cvar_t r_drawviewmodel; 191extern cvar_t r_speeds; 192extern cvar_t r_waterwarp; 193extern cvar_t r_fullbright; 194extern cvar_t r_lightmap; 195extern cvar_t r_shadows; 196extern cvar_t r_mirroralpha; 197extern cvar_t r_wateralpha; 198extern cvar_t r_dynamic; 199extern cvar_t r_novis; 200 201extern cvar_t gl_clear; 202extern cvar_t gl_cull; 203extern cvar_t gl_poly; 204extern cvar_t gl_texsort; 205extern cvar_t gl_smoothmodels; 206extern cvar_t gl_affinemodels; 207extern cvar_t gl_polyblend; 208extern cvar_t gl_keeptjunctions; 209extern cvar_t gl_reporttjunctions; 210extern cvar_t gl_flashblend; 211extern cvar_t gl_nocolors; 212extern cvar_t gl_doubleeyes; 213 214extern int gl_lightmap_format; 215extern int gl_solid_format; 216extern int gl_alpha_format; 217 218extern cvar_t gl_max_size; 219extern cvar_t gl_playermip; 220 221extern int mirrortexturenum; // quake texturenum, not gltexturenum 222extern qboolean mirror; 223extern mplane_t *mirror_plane; 224 225extern float r_world_matrix[16]; 226 227extern const char *gl_vendor; 228extern const char *gl_renderer; 229extern const char *gl_version; 230extern const char *gl_extensions; 231 232void R_TranslatePlayerSkin (int playernum); 233void GL_Bind (int texnum); 234 235// Multitexture 236#define TEXTURE0_SGIS 0x835E 237#define TEXTURE1_SGIS 0x835F 238 239#ifndef _WIN32 240#define APIENTRY /* */ 241#endif 242 243typedef void (APIENTRY *lpMTexFUNC) (GLenum, GLfloat, GLfloat); 244typedef void (APIENTRY *lpSelTexFUNC) (GLenum); 245extern lpMTexFUNC qglMTexCoord2fSGIS; 246extern lpSelTexFUNC qglSelectTextureSGIS; 247 248extern qboolean gl_mtexable; 249 250void GL_DisableMultitexture(void); 251void GL_EnableMultitexture(void); 252