You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
849 lines
24 KiB
849 lines
24 KiB
/* |
|
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. |
|
|
|
*/ |
|
|
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <string.h> |
|
#include <math.h> |
|
#include <stdarg.h> |
|
|
|
#include "../quake2/client/ref.h" |
|
|
|
#define REF_VERSION "SOFT 0.01" |
|
|
|
// up / down |
|
#define PITCH 0 |
|
|
|
// left / right |
|
#define YAW 1 |
|
|
|
// fall over |
|
#define ROLL 2 |
|
|
|
|
|
/* |
|
|
|
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; |
|
qboolean transparent; // true if any 255 pixels in image |
|
int registration_sequence; // 0 = free |
|
byte *pixels[4]; // mip levels |
|
} image_t; |
|
|
|
|
|
//=================================================================== |
|
|
|
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 |
|
int width; |
|
int height; |
|
} viddef_t; |
|
|
|
typedef enum |
|
{ |
|
rserr_ok, |
|
|
|
rserr_invalid_fullscreen, |
|
rserr_invalid_mode, |
|
|
|
rserr_unknown |
|
} rserr_t; |
|
|
|
extern viddef_t vid; |
|
|
|
// !!! if this is changed, it must be changed in asm_draw.h too !!! |
|
typedef struct |
|
{ |
|
vrect_t vrect; // subwindow in video for refresh |
|
// FIXME: not need vrect next field here? |
|
vrect_t aliasvrect; // scaled Alias version |
|
int vrectright, vrectbottom; // right & bottom screen coords |
|
int aliasvrectright, aliasvrectbottom; // scaled Alias versions |
|
float vrectrightedge; // rightmost right edge we care about, |
|
// for use in edge list |
|
float fvrectx, fvrecty; // for floating-point compares |
|
float fvrectx_adj, fvrecty_adj; // left and top edges, for clamping |
|
int vrect_x_adj_shift20; // (vrect.x + 0.5 - epsilon) << 20 |
|
int vrectright_adj_shift20; // (vrectright + 0.5 - epsilon) << 20 |
|
float fvrectright_adj, fvrectbottom_adj; |
|
// right and bottom edges, for clamping |
|
float fvrectright; // rightmost edge, for Alias clamping |
|
float fvrectbottom; // bottommost edge, for Alias clamping |
|
float horizontalFieldOfView; // at Z = 1.0, this many X is visible |
|
// 2.0 = 90 degrees |
|
float xOrigin; // should probably always be 0.5 |
|
float yOrigin; // between be around 0.3 to 0.5 |
|
|
|
vec3_t vieworg; |
|
vec3_t viewangles; |
|
|
|
int ambientlight; |
|
} oldrefdef_t; |
|
|
|
extern oldrefdef_t r_refdef; |
|
|
|
#include "r_model.h" |
|
|
|
#define CACHE_SIZE 32 |
|
|
|
/* |
|
==================================================== |
|
|
|
CONSTANTS |
|
|
|
==================================================== |
|
*/ |
|
|
|
#define VID_CBITS 6 |
|
#define VID_GRADES (1 << VID_CBITS) |
|
|
|
|
|
// r_shared.h: general refresh-related stuff shared between the refresh and the |
|
// driver |
|
|
|
|
|
#define MAXVERTS 64 // max points in a surface polygon |
|
#define MAXWORKINGVERTS (MAXVERTS+4) // max points in an intermediate |
|
// polygon (while processing) |
|
// !!! if this is changed, it must be changed in d_ifacea.h too !!! |
|
#define MAXHEIGHT 1200 |
|
#define MAXWIDTH 1600 |
|
|
|
#define INFINITE_DISTANCE 0x10000 // distance that's always guaranteed to |
|
// be farther away than anything in |
|
// the scene |
|
|
|
|
|
// d_iface.h: interface header file for rasterization driver modules |
|
|
|
#define WARP_WIDTH 320 |
|
#define WARP_HEIGHT 240 |
|
|
|
#define MAX_LBM_HEIGHT 480 |
|
|
|
|
|
#define PARTICLE_Z_CLIP 8.0 |
|
|
|
// !!! must be kept the same as in quakeasm.h !!! |
|
#define TRANSPARENT_COLOR 0xFF |
|
|
|
|
|
// !!! if this is changed, it must be changed in d_ifacea.h too !!! |
|
#define TURB_TEX_SIZE 64 // base turbulent texture size |
|
|
|
// !!! if this is changed, it must be changed in d_ifacea.h too !!! |
|
#define CYCLE 128 // turbulent cycle size |
|
|
|
#define SCANBUFFERPAD 0x1000 |
|
|
|
#define DS_SPAN_LIST_END -128 |
|
|
|
#define NUMSTACKEDGES 2000 |
|
#define MINEDGES NUMSTACKEDGES |
|
#define NUMSTACKSURFACES 1000 |
|
#define MINSURFACES NUMSTACKSURFACES |
|
#define MAXSPANS 3000 |
|
|
|
// flags in finalvert_t.flags |
|
#define ALIAS_LEFT_CLIP 0x0001 |
|
#define ALIAS_TOP_CLIP 0x0002 |
|
#define ALIAS_RIGHT_CLIP 0x0004 |
|
#define ALIAS_BOTTOM_CLIP 0x0008 |
|
#define ALIAS_Z_CLIP 0x0010 |
|
#define ALIAS_XY_CLIP_MASK 0x000F |
|
|
|
#define SURFCACHE_SIZE_AT_320X240 1024*768 |
|
|
|
#define BMODEL_FULLY_CLIPPED 0x10 // value returned by R_BmodelCheckBBox () |
|
// if bbox is trivially rejected |
|
|
|
#define XCENTERING (1.0 / 2.0) |
|
#define YCENTERING (1.0 / 2.0) |
|
|
|
#define CLIP_EPSILON 0.001 |
|
|
|
#define BACKFACE_EPSILON 0.01 |
|
|
|
// !!! if this is changed, it must be changed in asm_draw.h too !!! |
|
#define NEAR_CLIP 0.01 |
|
|
|
|
|
#define MAXALIASVERTS 2000 // TODO: tune this |
|
#define ALIAS_Z_CLIP_PLANE 4 |
|
|
|
// turbulence stuff |
|
|
|
#define AMP 8*0x10000 |
|
#define AMP2 3 |
|
#define SPEED 20 |
|
|
|
|
|
/* |
|
==================================================== |
|
|
|
TYPES |
|
|
|
==================================================== |
|
*/ |
|
|
|
typedef struct |
|
{ |
|
float u, v; |
|
float s, t; |
|
float zi; |
|
} emitpoint_t; |
|
|
|
/* |
|
** if you change this structure be sure to change the #defines |
|
** listed after it! |
|
*/ |
|
#define SMALL_FINALVERT 0 |
|
|
|
#if SMALL_FINALVERT |
|
|
|
typedef struct finalvert_s { |
|
short u, v, s, t; |
|
int l; |
|
int zi; |
|
int flags; |
|
float xyz[3]; // eye space |
|
} finalvert_t; |
|
|
|
#define FINALVERT_V0 0 |
|
#define FINALVERT_V1 2 |
|
#define FINALVERT_V2 4 |
|
#define FINALVERT_V3 6 |
|
#define FINALVERT_V4 8 |
|
#define FINALVERT_V5 12 |
|
#define FINALVERT_FLAGS 16 |
|
#define FINALVERT_X 20 |
|
#define FINALVERT_Y 24 |
|
#define FINALVERT_Z 28 |
|
#define FINALVERT_SIZE 32 |
|
|
|
#else |
|
|
|
typedef struct finalvert_s { |
|
int u, v, s, t; |
|
int l; |
|
int zi; |
|
int flags; |
|
float xyz[3]; // eye space |
|
} finalvert_t; |
|
|
|
#define FINALVERT_V0 0 |
|
#define FINALVERT_V1 4 |
|
#define FINALVERT_V2 8 |
|
#define FINALVERT_V3 12 |
|
#define FINALVERT_V4 16 |
|
#define FINALVERT_V5 20 |
|
#define FINALVERT_FLAGS 24 |
|
#define FINALVERT_X 28 |
|
#define FINALVERT_Y 32 |
|
#define FINALVERT_Z 36 |
|
#define FINALVERT_SIZE 40 |
|
|
|
#endif |
|
|
|
typedef struct |
|
{ |
|
void *pskin; |
|
int pskindesc; |
|
int skinwidth; |
|
int skinheight; |
|
dtriangle_t *ptriangles; |
|
finalvert_t *pfinalverts; |
|
int numtriangles; |
|
int drawtype; |
|
int seamfixupX16; |
|
qboolean do_vis_thresh; |
|
int vis_thresh; |
|
} affinetridesc_t; |
|
|
|
typedef struct |
|
{ |
|
byte *surfdat; // destination for generated surface |
|
int rowbytes; // destination logical width in bytes |
|
msurface_t *surf; // description for surface to generate |
|
fixed8_t lightadj[MAXLIGHTMAPS]; |
|
// adjust for lightmap levels for dynamic lighting |
|
image_t *image; |
|
int surfmip; // mipmapped ratio of surface texels / world pixels |
|
int surfwidth; // in mipmapped texels |
|
int surfheight; // in mipmapped texels |
|
} drawsurf_t; |
|
|
|
|
|
|
|
typedef struct { |
|
int ambientlight; |
|
int shadelight; |
|
float *plightvec; |
|
} alight_t; |
|
|
|
// clipped bmodel edges |
|
|
|
typedef struct bedge_s |
|
{ |
|
mvertex_t *v[2]; |
|
struct bedge_s *pnext; |
|
} bedge_t; |
|
|
|
|
|
// !!! if this is changed, it must be changed in asm_draw.h too !!! |
|
typedef struct clipplane_s |
|
{ |
|
vec3_t normal; |
|
float dist; |
|
struct clipplane_s *next; |
|
byte leftedge; |
|
byte rightedge; |
|
byte reserved[2]; |
|
} clipplane_t; |
|
|
|
|
|
typedef struct surfcache_s |
|
{ |
|
struct surfcache_s *next; |
|
struct surfcache_s **owner; // NULL is an empty chunk of memory |
|
int lightadj[MAXLIGHTMAPS]; // checked for strobe flush |
|
int dlight; |
|
int size; // including header |
|
unsigned width; |
|
unsigned height; // DEBUG only needed for debug |
|
float mipscale; |
|
image_t *image; |
|
byte data[4]; // width*height elements |
|
} surfcache_t; |
|
|
|
// !!! if this is changed, it must be changed in asm_draw.h too !!! |
|
typedef struct espan_s |
|
{ |
|
int u, v, count; |
|
struct espan_s *pnext; |
|
} espan_t; |
|
|
|
// used by the polygon drawer (R_POLY.C) and sprite setup code (R_SPRITE.C) |
|
typedef struct |
|
{ |
|
int nump; |
|
emitpoint_t *pverts; |
|
byte *pixels; // image |
|
int pixel_width; // image width |
|
int pixel_height; // image height |
|
vec3_t vup, vright, vpn; // in worldspace, for plane eq |
|
float dist; |
|
float s_offset, t_offset; |
|
float viewer_position[3]; |
|
void (*drawspanlet)( void ); |
|
int stipple_parity; |
|
} polydesc_t; |
|
|
|
// FIXME: compress, make a union if that will help |
|
// insubmodel is only 1, flags is fewer than 32, spanstate could be a byte |
|
typedef struct surf_s |
|
{ |
|
struct surf_s *next; // active surface stack in r_edge.c |
|
struct surf_s *prev; // used in r_edge.c for active surf stack |
|
struct espan_s *spans; // pointer to linked list of spans to draw |
|
int key; // sorting key (BSP order) |
|
int last_u; // set during tracing |
|
int spanstate; // 0 = not in span |
|
// 1 = in span |
|
// -1 = in inverted span (end before |
|
// start) |
|
int flags; // currentface flags |
|
msurface_t *msurf; |
|
entity_t *entity; |
|
float nearzi; // nearest 1/z on surface, for mipmapping |
|
qboolean insubmodel; |
|
float d_ziorigin, d_zistepu, d_zistepv; |
|
|
|
int pad[2]; // to 64 bytes |
|
} surf_t; |
|
|
|
// !!! if this is changed, it must be changed in asm_draw.h too !!! |
|
typedef struct edge_s |
|
{ |
|
fixed16_t u; |
|
fixed16_t u_step; |
|
struct edge_s *prev, *next; |
|
unsigned short surfs[2]; |
|
struct edge_s *nextremove; |
|
float nearzi; |
|
medge_t *owner; |
|
} edge_t; |
|
|
|
|
|
/* |
|
==================================================== |
|
|
|
VARS |
|
|
|
==================================================== |
|
*/ |
|
|
|
extern int d_spanpixcount; |
|
extern int r_framecount; // sequence # of current frame since Quake |
|
// started |
|
extern float r_aliasuvscale; // scale-up factor for screen u and v |
|
// on Alias vertices passed to driver |
|
extern qboolean r_dowarp; |
|
|
|
extern affinetridesc_t r_affinetridesc; |
|
|
|
extern vec3_t r_pright, r_pup, r_ppn; |
|
|
|
void D_DrawSurfaces (void); |
|
void R_DrawParticle( void ); |
|
void D_ViewChanged (void); |
|
void D_WarpScreen (void); |
|
void R_PolysetUpdateTables (void); |
|
|
|
extern void *acolormap; // FIXME: should go away |
|
|
|
//=======================================================================// |
|
|
|
// callbacks to Quake |
|
|
|
extern drawsurf_t r_drawsurf; |
|
|
|
void R_DrawSurface (void); |
|
|
|
extern int c_surf; |
|
|
|
extern byte r_warpbuffer[WARP_WIDTH * WARP_HEIGHT]; |
|
|
|
|
|
|
|
|
|
extern float scale_for_mip; |
|
|
|
extern qboolean d_roverwrapped; |
|
extern surfcache_t *sc_rover; |
|
extern surfcache_t *d_initial_rover; |
|
|
|
extern float d_sdivzstepu, d_tdivzstepu, d_zistepu; |
|
extern float d_sdivzstepv, d_tdivzstepv, d_zistepv; |
|
extern float d_sdivzorigin, d_tdivzorigin, d_ziorigin; |
|
|
|
extern fixed16_t sadjust, tadjust; |
|
extern fixed16_t bbextents, bbextentt; |
|
|
|
|
|
void D_DrawSpans16 (espan_t *pspans); |
|
void D_DrawZSpans (espan_t *pspans); |
|
void Turbulent8 (espan_t *pspan); |
|
void NonTurbulent8 (espan_t *pspan); //PGM |
|
|
|
surfcache_t *D_CacheSurface (msurface_t *surface, int miplevel); |
|
|
|
extern int d_vrectx, d_vrecty, d_vrectright_particle, d_vrectbottom_particle; |
|
|
|
extern int d_pix_min, d_pix_max, d_pix_shift; |
|
|
|
extern pixel_t *d_viewbuffer; |
|
extern short *d_pzbuffer; |
|
extern unsigned int d_zrowbytes, d_zwidth; |
|
extern short *zspantable[MAXHEIGHT]; |
|
extern int d_scantable[MAXHEIGHT]; |
|
|
|
extern int d_minmip; |
|
extern float d_scalemip[3]; |
|
|
|
//=================================================================== |
|
|
|
extern int cachewidth; |
|
extern pixel_t *cacheblock; |
|
extern int r_screenwidth; |
|
|
|
extern int r_drawnpolycount; |
|
|
|
extern int sintable[1280]; |
|
extern int intsintable[1280]; |
|
extern int blanktable[1280]; // PGM |
|
|
|
extern vec3_t vup, base_vup; |
|
extern vec3_t vpn, base_vpn; |
|
extern vec3_t vright, base_vright; |
|
|
|
extern surf_t *surfaces, *surface_p, *surf_max; |
|
|
|
// surfaces are generated in back to front order by the bsp, so if a surf |
|
// pointer is greater than another one, it should be drawn in front |
|
// surfaces[1] is the background, and is used as the active surface stack. |
|
// surfaces[0] is a dummy, because index 0 is used to indicate no surface |
|
// attached to an edge_t |
|
|
|
//=================================================================== |
|
|
|
extern vec3_t sxformaxis[4]; // s axis transformed into viewspace |
|
extern vec3_t txformaxis[4]; // t axis transformed into viewspac |
|
|
|
extern float xcenter, ycenter; |
|
extern float xscale, yscale; |
|
extern float xscaleinv, yscaleinv; |
|
extern float xscaleshrink, yscaleshrink; |
|
|
|
extern void TransformVector (vec3_t in, vec3_t out); |
|
extern void SetUpForLineScan(fixed8_t startvertu, fixed8_t startvertv, |
|
fixed8_t endvertu, fixed8_t endvertv); |
|
|
|
extern int ubasestep, errorterm, erroradjustup, erroradjustdown; |
|
|
|
//=========================================================================== |
|
|
|
extern cvar_t *sw_aliasstats; |
|
extern cvar_t *sw_clearcolor; |
|
extern cvar_t *sw_drawflat; |
|
extern cvar_t *sw_draworder; |
|
extern cvar_t *sw_maxedges; |
|
extern cvar_t *sw_maxsurfs; |
|
extern cvar_t *sw_mipcap; |
|
extern cvar_t *sw_mipscale; |
|
extern cvar_t *sw_mode; |
|
extern cvar_t *sw_reportsurfout; |
|
extern cvar_t *sw_reportedgeout; |
|
extern cvar_t *sw_stipplealpha; |
|
extern cvar_t *sw_surfcacheoverride; |
|
extern cvar_t *sw_waterwarp; |
|
|
|
extern cvar_t *r_fullbright; |
|
extern cvar_t *r_lefthand; |
|
extern cvar_t *r_drawentities; |
|
extern cvar_t *r_drawworld; |
|
extern cvar_t *r_dspeeds; |
|
extern cvar_t *r_lerpmodels; |
|
|
|
extern cvar_t *r_speeds; |
|
|
|
extern cvar_t *r_lightlevel; //FIXME HACK |
|
|
|
extern cvar_t *vid_fullscreen; |
|
extern cvar_t *vid_gamma; |
|
|
|
|
|
extern clipplane_t view_clipplanes[4]; |
|
extern int *pfrustum_indexes[4]; |
|
|
|
|
|
//============================================================================= |
|
|
|
void R_RenderWorld (void); |
|
|
|
//============================================================================= |
|
|
|
extern mplane_t screenedge[4]; |
|
|
|
extern vec3_t r_origin; |
|
|
|
extern entity_t r_worldentity; |
|
extern model_t *currentmodel; |
|
extern entity_t *currententity; |
|
extern vec3_t modelorg; |
|
extern vec3_t r_entorigin; |
|
|
|
extern float verticalFieldOfView; |
|
extern float xOrigin, yOrigin; |
|
|
|
extern int r_visframecount; |
|
|
|
extern msurface_t *r_alpha_surfaces; |
|
|
|
//============================================================================= |
|
|
|
void R_ClearPolyList (void); |
|
void R_DrawPolyList (void); |
|
|
|
// |
|
// current entity info |
|
// |
|
extern qboolean insubmodel; |
|
|
|
void R_DrawAlphaSurfaces( void ); |
|
|
|
void R_DrawSprite (void); |
|
void R_DrawBeam( entity_t *e ); |
|
|
|
void R_RenderFace (msurface_t *fa, int clipflags); |
|
void R_RenderBmodelFace (bedge_t *pedges, msurface_t *psurf); |
|
void R_TransformPlane (mplane_t *p, float *normal, float *dist); |
|
void R_TransformFrustum (void); |
|
void R_DrawSurfaceBlock16 (void); |
|
void R_DrawSurfaceBlock8 (void); |
|
|
|
#if id386 |
|
|
|
void R_DrawSurfaceBlock8_mip0 (void); |
|
void R_DrawSurfaceBlock8_mip1 (void); |
|
void R_DrawSurfaceBlock8_mip2 (void); |
|
void R_DrawSurfaceBlock8_mip3 (void); |
|
|
|
#endif |
|
|
|
void R_GenSkyTile (void *pdest); |
|
void R_GenSkyTile16 (void *pdest); |
|
void R_Surf8Patch (void); |
|
void R_Surf16Patch (void); |
|
void R_DrawSubmodelPolygons (model_t *pmodel, int clipflags, mnode_t *topnode); |
|
void R_DrawSolidClippedSubmodelPolygons (model_t *pmodel, mnode_t *topnode); |
|
|
|
void R_AddPolygonEdges (emitpoint_t *pverts, int numverts, int miplevel); |
|
surf_t *R_GetSurf (void); |
|
void R_AliasDrawModel (void); |
|
void R_BeginEdgeFrame (void); |
|
void R_ScanEdges (void); |
|
void D_DrawSurfaces (void); |
|
void R_InsertNewEdges (edge_t *edgestoadd, edge_t *edgelist); |
|
void R_StepActiveU (edge_t *pedge); |
|
void R_RemoveEdges (edge_t *pedge); |
|
void R_PushDlights (model_t *model); |
|
|
|
extern void R_Surf8Start (void); |
|
extern void R_Surf8End (void); |
|
extern void R_Surf16Start (void); |
|
extern void R_Surf16End (void); |
|
extern void R_EdgeCodeStart (void); |
|
extern void R_EdgeCodeEnd (void); |
|
|
|
extern void R_RotateBmodel (void); |
|
|
|
extern int c_faceclip; |
|
extern int r_polycount; |
|
extern int r_wholepolycount; |
|
|
|
extern int ubasestep, errorterm, erroradjustup, erroradjustdown; |
|
|
|
extern fixed16_t sadjust, tadjust; |
|
extern fixed16_t bbextents, bbextentt; |
|
|
|
extern mvertex_t *r_ptverts, *r_ptvertsmax; |
|
|
|
extern float entity_rotation[3][3]; |
|
|
|
extern int r_currentkey; |
|
extern int r_currentbkey; |
|
|
|
void R_InitTurb (void); |
|
|
|
void R_DrawParticles (void); |
|
void R_SurfacePatch (void); |
|
|
|
extern int r_amodels_drawn; |
|
extern edge_t *auxedges; |
|
extern int r_numallocatededges; |
|
extern edge_t *r_edges, *edge_p, *edge_max; |
|
|
|
extern edge_t *newedges[MAXHEIGHT]; |
|
extern edge_t *removeedges[MAXHEIGHT]; |
|
|
|
// FIXME: make stack vars when debugging done |
|
extern edge_t edge_head; |
|
extern edge_t edge_tail; |
|
extern edge_t edge_aftertail; |
|
|
|
extern int r_aliasblendcolor; |
|
|
|
extern float aliasxscale, aliasyscale, aliasxcenter, aliasycenter; |
|
|
|
extern int r_outofsurfaces; |
|
extern int r_outofedges; |
|
|
|
extern mvertex_t *r_pcurrentvertbase; |
|
extern int r_maxvalidedgeoffset; |
|
|
|
typedef struct |
|
{ |
|
finalvert_t *a, *b, *c; |
|
} aliastriangleparms_t; |
|
|
|
extern aliastriangleparms_t aliastriangleparms; |
|
|
|
void R_DrawTriangle( void ); |
|
//void R_DrawTriangle (finalvert_t *index0, finalvert_t *index1, finalvert_t *index2); |
|
void R_AliasClipTriangle (finalvert_t *index0, finalvert_t *index1, finalvert_t *index2); |
|
|
|
|
|
extern float r_time1; |
|
extern float da_time1, da_time2; |
|
extern float dp_time1, dp_time2, db_time1, db_time2, rw_time1, rw_time2; |
|
extern float se_time1, se_time2, de_time1, de_time2, dv_time1, dv_time2; |
|
extern int r_frustum_indexes[4*6]; |
|
extern int r_maxsurfsseen, r_maxedgesseen, r_cnumsurfs; |
|
extern qboolean r_surfsonstack; |
|
|
|
extern mleaf_t *r_viewleaf; |
|
extern int r_viewcluster, r_oldviewcluster; |
|
|
|
extern int r_clipflags; |
|
extern int r_dlightframecount; |
|
extern qboolean r_fov_greater_than_90; |
|
|
|
extern image_t *r_notexture_mip; |
|
extern model_t *r_worldmodel; |
|
|
|
void R_PrintAliasStats (void); |
|
void R_PrintTimes (void); |
|
void R_PrintDSpeeds (void); |
|
void R_AnimateLight (void); |
|
void R_LightPoint (vec3_t p, vec3_t color); |
|
void R_SetupFrame (void); |
|
void R_cshift_f (void); |
|
void R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1); |
|
void R_ClipEdge (mvertex_t *pv0, mvertex_t *pv1, clipplane_t *clip); |
|
void R_SplitEntityOnNode2 (mnode_t *node); |
|
|
|
extern refdef_t r_newrefdef; |
|
|
|
extern surfcache_t *sc_rover, *sc_base; |
|
|
|
extern void *colormap; |
|
|
|
//==================================================================== |
|
|
|
float R_DLightPoint (vec3_t p); |
|
|
|
void R_NewMap (void); |
|
void R_Register (void); |
|
void R_UnRegister (void); |
|
void Draw_InitLocal (void); |
|
qboolean R_Init( void *hInstance, void *wndProc ); |
|
void R_Shutdown (void); |
|
void R_InitCaches (void); |
|
void D_FlushCaches (void); |
|
|
|
void R_ScreenShot_f( void ); |
|
void R_BeginRegistration (char *map); |
|
struct model_s *R_RegisterModel (char *name); |
|
void R_EndRegistration (void); |
|
|
|
void R_RenderFrame (refdef_t *fd); |
|
|
|
struct image_s *Draw_FindPic (char *name); |
|
|
|
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_StretchRaw (int x, int y, int w, int h, int cols, int rows, byte *data); |
|
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_GetPalette (void); |
|
|
|
void R_BeginFrame( float camera_separation ); |
|
|
|
void R_CinematicSetPalette( const unsigned char *palette ); |
|
|
|
extern unsigned d_8to24table[256]; // base |
|
|
|
void Sys_MakeCodeWriteable (unsigned long startaddr, unsigned long length); |
|
void Sys_SetFPCW (void); |
|
|
|
void LoadPCX (char *filename, byte **pic, byte **palette, int *width, int *height); |
|
|
|
void R_InitImages (void); |
|
void R_ShutdownImages (void); |
|
image_t *R_FindImage (char *name, imagetype_t type); |
|
void R_FreeUnusedImages (void); |
|
|
|
void R_GammaCorrectAndSetPalette( const unsigned char *pal ); |
|
|
|
extern mtexinfo_t *sky_texinfo[6]; |
|
|
|
void R_InitSkyBox (void); |
|
|
|
typedef struct swstate_s |
|
{ |
|
qboolean fullscreen; |
|
int prev_mode; // last valid SW mode |
|
|
|
byte gammatable[256]; |
|
byte currentpalette[1024]; |
|
|
|
} swstate_t; |
|
|
|
void R_IMFlatShadedQuad( vec3_t a, vec3_t b, vec3_t c, vec3_t d, int color, float alpha ); |
|
|
|
extern swstate_t sw_state; |
|
|
|
/* |
|
==================================================================== |
|
|
|
IMPORTED FUNCTIONS |
|
|
|
==================================================================== |
|
*/ |
|
|
|
extern refimport_t ri; |
|
|
|
/* |
|
==================================================================== |
|
|
|
IMPLEMENTATION FUNCTIONS |
|
|
|
==================================================================== |
|
*/ |
|
|
|
void SWimp_BeginFrame( float camera_separation ); |
|
void SWimp_EndFrame (void); |
|
int SWimp_Init( void *hInstance, void *wndProc ); |
|
void SWimp_SetPalette( const unsigned char *palette); |
|
void SWimp_Shutdown( void ); |
|
rserr_t SWimp_SetMode( int *pwidth, int *pheight, int mode, qboolean fullscreen ); |
|
void SWimp_AppActivate( qboolean active ); |
|
|
|
|