123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461 |
- /*
- 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.
- */
- // disable data conversion warnings
- #if 0
- #pragma warning(disable : 4244) // MIPS
- #pragma warning(disable : 4136) // X86
- #pragma warning(disable : 4051) // ALPHA
- #endif
- #ifdef _WIN32
- # include <windows.h>
- #endif
- #include <stdio.h>
- #include <GL/gl.h>
- #include <GL/glu.h>
- #include <math.h>
- #ifndef GL_COLOR_INDEX8_EXT
- #define GL_COLOR_INDEX8_EXT GL_COLOR_INDEX
- #endif
- #include "../client/ref.h"
- #include "qgl.h"
- #define REF_VERSION "GL 0.01"
- // up / down
- #define PITCH 0
- // left / right
- #define YAW 1
- // fall over
- #define ROLL 2
- typedef struct
- {
- unsigned width, height; // coordinates from main game
- } viddef_t;
- extern viddef_t vid;
- /*
- skins will be outline flood filled and mip mapped
- pics and sprites with alpha will be outline flood filled
- pic won't be mip mapped
- model skin
- sprite frame
- wall texture
- pic
- */
- typedef enum
- {
- it_skin,
- it_sprite,
- it_wall,
- it_pic,
- it_sky
- } imagetype_t;
- typedef struct image_s
- {
- char name[MAX_QPATH]; // game path, including extension
- imagetype_t type;
- int width, height; // source image
- int upload_width, upload_height; // after power of two and picmip
- int registration_sequence; // 0 = free
- struct msurface_s *texturechain; // for sort-by-texture world drawing
- int texnum; // gl texture binding
- float sl, tl, sh, th; // 0,0 - 1,1 unless part of the scrap
- qboolean scrap;
- qboolean has_alpha;
- qboolean paletted;
- } image_t;
- #define TEXNUM_LIGHTMAPS 1024
- #define TEXNUM_SCRAPS 1152
- #define TEXNUM_IMAGES 1153
- #define MAX_GLTEXTURES 1024
- //===================================================================
- typedef enum
- {
- rserr_ok,
- rserr_invalid_fullscreen,
- rserr_invalid_mode,
- rserr_unknown
- } rserr_t;
- #include "gl_model.h"
- void GL_BeginRendering (int *x, int *y, int *width, int *height);
- void GL_EndRendering (void);
- void GL_SetDefaultState( void );
- void GL_UpdateSwapInterval( void );
- extern float gldepthmin, gldepthmax;
- typedef struct
- {
- float x, y, z;
- float s, t;
- float r, g, b;
- } glvert_t;
- #define MAX_LBM_HEIGHT 480
- #define BACKFACE_EPSILON 0.01
- //====================================================
- extern image_t gltextures[MAX_GLTEXTURES];
- extern int numgltextures;
- extern image_t *r_notexture;
- extern image_t *r_particletexture;
- extern entity_t *currententity;
- extern model_t *currentmodel;
- extern int r_visframecount;
- extern int r_framecount;
- extern cplane_t frustum[4];
- extern int c_brush_polys, c_alias_polys;
- extern int gl_filter_min, gl_filter_max;
- //
- // view origin
- //
- extern vec3_t vup;
- extern vec3_t vpn;
- extern vec3_t vright;
- extern vec3_t r_origin;
- //
- // screen size info
- //
- extern refdef_t r_newrefdef;
- extern int r_viewcluster, r_viewcluster2, r_oldviewcluster, r_oldviewcluster2;
- extern cvar_t *r_norefresh;
- extern cvar_t *r_lefthand;
- extern cvar_t *r_drawentities;
- extern cvar_t *r_drawworld;
- extern cvar_t *r_speeds;
- extern cvar_t *r_fullbright;
- extern cvar_t *r_novis;
- extern cvar_t *r_nocull;
- extern cvar_t *r_lerpmodels;
- extern cvar_t *r_lightlevel; // FIXME: This is a HACK to get the client's light level
- extern cvar_t *gl_vertex_arrays;
- extern cvar_t *gl_ext_swapinterval;
- extern cvar_t *gl_ext_palettedtexture;
- extern cvar_t *gl_ext_multitexture;
- extern cvar_t *gl_ext_pointparameters;
- extern cvar_t *gl_ext_compiled_vertex_array;
- extern cvar_t *gl_particle_min_size;
- extern cvar_t *gl_particle_max_size;
- extern cvar_t *gl_particle_size;
- extern cvar_t *gl_particle_att_a;
- extern cvar_t *gl_particle_att_b;
- extern cvar_t *gl_particle_att_c;
- extern cvar_t *gl_nosubimage;
- extern cvar_t *gl_bitdepth;
- extern cvar_t *gl_mode;
- extern cvar_t *gl_log;
- extern cvar_t *gl_lightmap;
- extern cvar_t *gl_shadows;
- extern cvar_t *gl_dynamic;
- extern cvar_t *gl_monolightmap;
- extern cvar_t *gl_nobind;
- extern cvar_t *gl_round_down;
- extern cvar_t *gl_picmip;
- extern cvar_t *gl_skymip;
- extern cvar_t *gl_showtris;
- extern cvar_t *gl_finish;
- extern cvar_t *gl_ztrick;
- extern cvar_t *gl_clear;
- extern cvar_t *gl_cull;
- extern cvar_t *gl_poly;
- extern cvar_t *gl_texsort;
- extern cvar_t *gl_polyblend;
- extern cvar_t *gl_flashblend;
- extern cvar_t *gl_lightmaptype;
- extern cvar_t *gl_modulate;
- extern cvar_t *gl_playermip;
- extern cvar_t *gl_drawbuffer;
- extern cvar_t *gl_3dlabs_broken;
- extern cvar_t *gl_driver;
- extern cvar_t *gl_swapinterval;
- extern cvar_t *gl_texturemode;
- extern cvar_t *gl_texturealphamode;
- extern cvar_t *gl_texturesolidmode;
- extern cvar_t *gl_saturatelighting;
- extern cvar_t *gl_lockpvs;
- extern cvar_t *vid_fullscreen;
- extern cvar_t *vid_gamma;
- extern cvar_t *intensity;
- extern int gl_lightmap_format;
- extern int gl_solid_format;
- extern int gl_alpha_format;
- extern int gl_tex_solid_format;
- extern int gl_tex_alpha_format;
- extern int c_visible_lightmaps;
- extern int c_visible_textures;
- extern float r_world_matrix[16];
- void R_TranslatePlayerSkin (int playernum);
- void GL_Bind (int texnum);
- void GL_MBind( GLenum target, int texnum );
- void GL_TexEnv( GLenum value );
- void GL_EnableMultitexture( qboolean enable );
- void GL_SelectTexture( GLenum );
- void R_LightPoint (vec3_t p, vec3_t color);
- void R_PushDlights (void);
- //====================================================================
- extern model_t *r_worldmodel;
- extern unsigned d_8to24table[256];
- extern int registration_sequence;
- void V_AddBlend (float r, float g, float b, float a, float *v_blend);
- int R_Init( void *hinstance, void *hWnd );
- void R_Shutdown( void );
- void R_RenderView (refdef_t *fd);
- void GL_ScreenShot_f (void);
- void R_DrawAliasModel (entity_t *e);
- void R_DrawBrushModel (entity_t *e);
- void R_DrawSpriteModel (entity_t *e);
- void R_DrawBeam( entity_t *e );
- void R_DrawWorld (void);
- void R_RenderDlights (void);
- void R_DrawAlphaSurfaces (void);
- void R_RenderBrushPoly (msurface_t *fa);
- void R_InitParticleTexture (void);
- void Draw_InitLocal (void);
- void GL_SubdivideSurface (msurface_t *fa);
- qboolean R_CullBox (vec3_t mins, vec3_t maxs);
- void R_RotateForEntity (entity_t *e);
- void R_MarkLeaves (void);
- glpoly_t *WaterWarpPolyVerts (glpoly_t *p);
- void EmitWaterPolys (msurface_t *fa);
- void R_AddSkySurface (msurface_t *fa);
- void R_ClearSkyBox (void);
- void R_DrawSkyBox (void);
- void R_MarkLights (dlight_t *light, int bit, mnode_t *node);
- #if 0
- short LittleShort (short l);
- short BigShort (short l);
- int LittleLong (int l);
- float LittleFloat (float f);
- char *va(char *format, ...);
- // does a varargs printf into a temp buffer
- #endif
- void COM_StripExtension (char *in, char *out);
- void Draw_GetPicSize (int *w, int *h, char *name);
- void Draw_Pic (int x, int y, char *name);
- void Draw_StretchPic (int x, int y, int w, int h, char *name);
- void Draw_Char (int x, int y, int c);
- void Draw_TileClear (int x, int y, int w, int h, char *name);
- void Draw_Fill (int x, int y, int w, int h, int c);
- void Draw_FadeScreen (void);
- void Draw_StretchRaw (int x, int y, int w, int h, int cols, int rows, byte *data);
- void R_BeginFrame( float camera_separation );
- void R_SwapBuffers( int );
- void R_SetPalette ( const unsigned char *palette);
- int Draw_GetPalette (void);
- void GL_ResampleTexture (unsigned *in, int inwidth, int inheight, unsigned *out, int outwidth, int outheight);
- struct image_s *R_RegisterSkin (char *name);
- void LoadPCX (char *filename, byte **pic, byte **palette, int *width, int *height);
- image_t *GL_LoadPic (char *name, byte *pic, int width, int height, imagetype_t type, int bits);
- image_t *GL_FindImage (char *name, imagetype_t type);
- void GL_TextureMode( char *string );
- void GL_ImageList_f (void);
- void GL_SetTexturePalette( unsigned palette[256] );
- void GL_InitImages (void);
- void GL_ShutdownImages (void);
- void GL_FreeUnusedImages (void);
- void GL_TextureAlphaMode( char *string );
- void GL_TextureSolidMode( char *string );
- /*
- ** GL extension emulation functions
- */
- void GL_DrawParticles( int n, const particle_t particles[], const unsigned colortable[768] );
- /*
- ** GL config stuff
- */
- #define GL_RENDERER_VOODOO 0x00000001
- #define GL_RENDERER_VOODOO2 0x00000002
- #define GL_RENDERER_VOODOO_RUSH 0x00000004
- #define GL_RENDERER_BANSHEE 0x00000008
- #define GL_RENDERER_3DFX 0x0000000F
- #define GL_RENDERER_PCX1 0x00000010
- #define GL_RENDERER_PCX2 0x00000020
- #define GL_RENDERER_PMX 0x00000040
- #define GL_RENDERER_POWERVR 0x00000070
- #define GL_RENDERER_PERMEDIA2 0x00000100
- #define GL_RENDERER_GLINT_MX 0x00000200
- #define GL_RENDERER_GLINT_TX 0x00000400
- #define GL_RENDERER_3DLABS_MISC 0x00000800
- #define GL_RENDERER_3DLABS 0x00000F00
- #define GL_RENDERER_REALIZM 0x00001000
- #define GL_RENDERER_REALIZM2 0x00002000
- #define GL_RENDERER_INTERGRAPH 0x00003000
- #define GL_RENDERER_3DPRO 0x00004000
- #define GL_RENDERER_REAL3D 0x00008000
- #define GL_RENDERER_RIVA128 0x00010000
- #define GL_RENDERER_DYPIC 0x00020000
- #define GL_RENDERER_V1000 0x00040000
- #define GL_RENDERER_V2100 0x00080000
- #define GL_RENDERER_V2200 0x00100000
- #define GL_RENDERER_RENDITION 0x001C0000
- #define GL_RENDERER_O2 0x00100000
- #define GL_RENDERER_IMPACT 0x00200000
- #define GL_RENDERER_RE 0x00400000
- #define GL_RENDERER_IR 0x00800000
- #define GL_RENDERER_SGI 0x00F00000
- #define GL_RENDERER_MCD 0x01000000
- #define GL_RENDERER_OTHER 0x80000000
- typedef struct
- {
- int renderer;
- const char *renderer_string;
- const char *vendor_string;
- const char *version_string;
- const char *extensions_string;
- qboolean allow_cds;
- } glconfig_t;
- typedef struct
- {
- float inverse_intensity;
- qboolean fullscreen;
- int prev_mode;
- unsigned char *d_16to8table;
- int lightmap_textures;
- int currenttextures[2];
- int currenttmu;
- float camera_separation;
- qboolean stereo_enabled;
- unsigned char originalRedGammaTable[256];
- unsigned char originalGreenGammaTable[256];
- unsigned char originalBlueGammaTable[256];
- } glstate_t;
- extern glconfig_t gl_config;
- extern glstate_t gl_state;
- /*
- ====================================================================
- IMPORTED FUNCTIONS
- ====================================================================
- */
- extern refimport_t ri;
- /*
- ====================================================================
- IMPLEMENTATION SPECIFIC FUNCTIONS
- ====================================================================
- */
- void GLimp_BeginFrame( float camera_separation );
- void GLimp_EndFrame( void );
- int GLimp_Init( void *hinstance, void *hWnd );
- void GLimp_Shutdown( void );
- int GLimp_SetMode( int *pwidth, int *pheight, int mode, qboolean fullscreen );
- void GLimp_AppActivate( qboolean active );
- void GLimp_EnableLogging( qboolean enable );
- void GLimp_LogNewFrame( void );
|