/* * Copyright(c) 1997-2001 Id Software, Inc. * Copyright(c) 2002 The Quakeforge Project. * Copyright(c) 2006 Quetoo. * * 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. */ #ifndef __VIDEO_H__ #define __VIDEO_H__ #include #include #include "qgl.h" #define PITCH 0 #define YAW 1 #define ROLL 2 typedef unsigned char pixel_t; typedef struct vrect_s { int x, y, width, height; struct vrect_s *pnext; } vrect_t; typedef struct { pixel_t *buffer; // invisible buffer pixel_t *colormap; // 256 * VID_GRADES size pixel_t *alphamap; // 256 * 256 translucency map int rowbytes; // may be > width if displayed in a window // can be negative for stupid dibs unsigned int width, height; } viddef_t; extern viddef_t viddef; #define MAX_ENTITIES 128 #define MAX_PARTICLES 4096 #define POWERSUIT_SCALE 4.0F #define SHELL_RED_COLOR 0xF2 #define SHELL_GREEN_COLOR 0xD0 #define SHELL_BLUE_COLOR 0xF3 #define SHELL_RG_COLOR 0xDC #define SHELL_RB_COLOR 0x68 #define SHELL_BG_COLOR 0x78 #define SHELL_WHITE_COLOR 0xD7 typedef struct entity_s { struct model_s *model; // opaque type outside view float angles[3]; // most recent data float origin[3]; // also used as RF_BEAM's "from" int frame; // also used as RF_BEAM's diameter // previous data for lerping float oldorigin[3]; // 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 int lightstyle; // for flashing entities float alpha; // ignore if RF_TRANSLUCENT isn't set struct image_s *skin; // NULL for inline skin int flags; } entity_t; #define ENTITY_FLAGS 68 typedef struct { vec3_t origin; int color; float alpha; } particle_t; typedef struct { int x, y, width, height; // in virtual screen coordinates float fov_x, fov_y; float vieworg[3]; float viewangles[3]; 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 int num_entities; entity_t *entities; int num_particles; particle_t *particles; } viewdef_t; extern byte color_white[4]; extern byte color_black[4]; typedef struct { void *OpenGLLib; // instance of opengl library FILE *log_fp; } glwstate_t; extern glwstate_t glw_state; /* 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 GLuint texnum; // gl texture binding float sl, tl, sh, th; // 0,0 - 1,1 unless part of the scrap qboolean scrap; qboolean has_alpha; } image_t; #define TEXNUM_LIGHTMAPS 1024 #define TEXNUM_SCRAPS 1152 #define TEXNUM_IMAGES 1153 #define MAX_GLTEXTURES 1024 #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 viewdef_t r_viewdef; extern int r_viewcluster, r_viewcluster2, r_oldviewcluster, r_oldviewcluster2; extern cvar_t *r_drawentities; 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 *gl_vertex_arrays; extern cvar_t *gl_ext_multitexture; extern cvar_t *gl_ext_compiled_vertex_array; extern cvar_t *gl_log; extern cvar_t *gl_lightmap; extern cvar_t *gl_monolightmap; extern cvar_t *gl_rounddown; extern cvar_t *gl_picmip; extern cvar_t *gl_skymip; extern cvar_t *gl_wireframe; extern cvar_t *gl_finish; extern cvar_t *gl_ztrick; extern cvar_t *gl_clear; extern cvar_t *gl_cull; extern cvar_t *gl_modulate; extern cvar_t *gl_intensity; extern cvar_t *gl_playermip; extern cvar_t *gl_drawbuffer; extern cvar_t *gl_driver; extern cvar_t *gl_texturemode; extern cvar_t *gl_texturealphamode; extern cvar_t *gl_texturesolidmode; extern cvar_t *gl_lockpvs; extern cvar_t *vid_width; extern cvar_t *vid_height; 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 cvar_t *skydistance; /* skybox size change */ extern float r_world_matrix[16]; void GL_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 GL_LightPoint(vec3_t p, vec3_t color); extern model_t *r_worldmodel; extern unsigned d_8to24table[256]; extern int registration_sequence; void GL_Init(void); void GL_Shutdown(void); void GL_Register(void); void GL_BeginRegistration(char *model); void GL_EndRegistration(void); void GL_RenderFrame(viewdef_t *fd); void GL_BeginFrame(void); void GL_EndFrame(void); void GL_Clear(void); void GL_SetGL2D(void); qboolean GL_SetMode(void); qboolean GL_InitGraphics(int width, int height, qboolean fullscreen); void GL_ShutdownGraphics(void); void GL_EnableLogging(qboolean enable); void GL_LogNewFrame(void); void GL_Screenshot_f(void); void GL_DrawAliasModel(entity_t *e); void GL_DrawBrushModel(entity_t *e); void GL_DrawSpriteModel(entity_t *e); void GL_DrawBeam(entity_t *e); void GL_DrawWorld(void); void GL_DrawAlphaSurfaces(void); void GL_RenderBrushPoly(msurface_t *fa); void GL_InitParticleTexture(void); void GL_InitNoTexture(void); void Draw_InitLocal(void); void GL_SubdivideSurface(msurface_t *fa); qboolean GL_CullBox(vec3_t mins, vec3_t maxs); void GL_RotateForEntity(entity_t *e); void GL_MarkLeafs(void); void VID_Restart_f(void); glpoly_t *WaterWarpPolyVerts(glpoly_t *p); void EmitWaterPolys(msurface_t *fa); void GL_AddSkySurface(msurface_t *fa); void GL_ClearSkyBox(void); void GL_DrawSkyBox(void); void GL_SetSky(char *name); void COM_StripExtension(char *in, char *out); image_t *Draw_FindPic(char *name); void Draw_GetPicSize(int *w, int *h, char *name); void Draw_Pic(int x, int y, char *name); void Draw_Char(int x, int y, int c); void Draw_Fill(int x, int y, int w, int h, int c); void GL_BeginFrame(void); void GL_SwapBuffers(int); int Draw_GetPalette(void); void GL_ResampleTexture(unsigned *in, int inwidth, int inheight, unsigned *out, int outwidth, int outheight); struct image_s *GL_RegisterSkin(char *name); struct model_s *GL_RegisterModel(char *name); 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_InitImages(void); void GL_ShutdownImages(void); void GL_FreeUnusedImages(void); void GL_TextureAlphaMode(char *string); void GL_TextureSolidMode(char *string); /* GL config stuff */ typedef struct { const char *renderer_string; const char *vendor_string; const char *version_string; const char *extensions_string; } glconfig_t; typedef struct { float inverse_intensity; qboolean fullscreen; int prev_width; int prev_height; int lightmap_textures; int currenttextures[2]; int currenttmu; } glstate_t; extern glconfig_t gl_config; extern glstate_t gl_state; #endif /*__VIDEO_H__*/