2010-02-15 23:26:55 +00:00
/*
Copyright ( C ) 1996 - 2001 Id Software , Inc .
Copyright ( C ) 2002 - 2009 John Fitzgibbons and others
2014-09-22 08:55:46 +00:00
Copyright ( C ) 2010 - 2014 QuakeSpasm developers
2010-02-15 23:26:55 +00:00
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 .
*/
bspfile.h, cdaudio.h, client.h, cmd.h, common.h, console.h, crc.h, cvar.h,
d_ifacea.h, draw.h, gl_texmgr.h, glquake.h, image.h, input.h, keys.h, mathlib.h,
menu.h, modelgen.h, net.h, net_dgrm.h, net_loop.h, net_sdlnet.h, net_udp.h,
net_wins.h, platform.h, pr_comp.h, progdefs.h, progs.h, protocol.h, quakedef.h,
render.h, resource.h, sbar.h, screen.h, server.h, sound.h, spritegn.h, sys.h,
vid.h, view.h, wad.h, world.h, zone.h: added include guards to the headers.
git-svn-id: svn://svn.code.sf.net/p/quakespasm/code/trunk/quakespasm@84 af15c1b1-3010-417e-b628-4374ebc0bcbd
2010-02-21 00:01:08 +00:00
# ifndef _QUAKE_RENDER_H
# define _QUAKE_RENDER_H
2010-02-15 23:26:55 +00:00
// refresh.h -- public interface to refresh functions
# define MAXCLIPPLANES 11
# define TOP_RANGE 16 // soldier uniform colors
# define BOTTOM_RANGE 96
//=============================================================================
typedef struct efrag_s
{
struct efrag_s * leafnext ;
struct entity_s * entity ;
} efrag_t ;
//johnfitz -- for lerping
# define LERP_MOVESTEP (1<<0) //this is a MOVETYPE_STEP entity, enable movement lerp
# define LERP_RESETANIM (1<<1) //disable anim lerping until next anim frame
# define LERP_RESETANIM2 (1<<2) //set this and previous flag to disable anim lerping for two anim frames
# define LERP_RESETMOVE (1<<3) //disable movement lerping until next origin/angles change
# define LERP_FINISH (1<<4) //use lerpfinish time from server update instead of assuming interval of 0.1
2020-07-23 19:28:19 +00:00
# define LERP_EXPLICIT (1<<5) //for csqc, using explicit frame1/2+frac+times
2010-02-15 23:26:55 +00:00
//johnfitz
typedef struct entity_s
{
qboolean forcelink ; // model changed
int update_type ;
entity_state_t baseline ; // to fill in defaults in updates
2017-09-17 02:12:53 +00:00
entity_state_t netstate ; // the latest network state
2010-02-15 23:26:55 +00:00
double msgtime ; // time of last update
vec3_t msg_origins [ 2 ] ; // last two updates (0 is newest)
vec3_t origin ;
vec3_t msg_angles [ 2 ] ; // last two updates (0 is newest)
vec3_t angles ;
2012-05-30 08:56:06 +00:00
struct qmodel_s * model ; // NULL = no model
2010-02-15 23:26:55 +00:00
struct efrag_s * efrag ; // linked list of efrags
int frame ;
float syncbase ; // for client-side animations
int effects ; // light, particles, etc
int skinnum ; // for Alias models
int visframe ; // last frame this entity was
// found in an active leaf
int dlightframe ; // dynamic lighting
int dlightbits ;
// FIXME: could turn these into a union
int trivial_accept ;
struct mnode_s * topnode ; // for bmodels, first world node
// that splits bmodel, or NULL if
// not split
2019-01-30 01:53:15 +00:00
byte eflags ; //spike -- mostly a mirror of netstate, but handles tag inheritance (eww!)
2010-02-15 23:26:55 +00:00
byte alpha ; //johnfitz -- alpha
byte lerpflags ; //johnfitz -- lerping
2020-07-23 19:28:19 +00:00
union
{
struct
{ //read-only lerp data for csqc...
int frame2 ;
float lerpfrac ;
float time [ 2 ] ;
} snap ;
struct
{ //updated by the model rendering code.
float lerpstart ; //johnfitz -- animation lerping
float lerptime ; //johnfitz -- animation lerping
short previouspose ; //johnfitz -- animation lerping
short currentpose ; //johnfitz -- animation lerping
} state ;
} lerp ;
2010-02-15 23:26:55 +00:00
float lerpfinish ; //johnfitz -- lerping -- server sent us a more accurate interval, use it instead of 0.1
// short futurepose; //johnfitz -- animation lerping
float movelerpstart ; //johnfitz -- transform lerping
vec3_t previousorigin ; //johnfitz -- transform lerping
vec3_t currentorigin ; //johnfitz -- transform lerping
vec3_t previousangles ; //johnfitz -- transform lerping
vec3_t currentangles ; //johnfitz -- transform lerping
2017-09-17 02:12:53 +00:00
struct trailstate_s * trailstate ; //spike -- managed by the particle system, so we don't loose our position and spawn the wrong number of particles, and we can track beams etc
struct trailstate_s * emitstate ; //spike -- for effects which are not so static.
2010-02-15 23:26:55 +00:00
} entity_t ;
// !!! 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 allways be 0.5
float yOrigin ; // between be around 0.3 to 0.5
vec3_t vieworg ;
vec3_t viewangles ;
float fov_x , fov_y ;
int ambientlight ;
2020-07-02 19:05:51 +00:00
qboolean drawworld ;
2010-02-15 23:26:55 +00:00
} refdef_t ;
//
// refresh
//
extern int reinit_surfcache ;
extern refdef_t r_refdef ;
extern vec3_t r_origin , vpn , vright , vup ;
void R_Init ( void ) ;
void R_InitTextures ( void ) ;
void R_InitEfrags ( void ) ;
void R_RenderView ( void ) ; // must set r_refdef first
void R_ViewChanged ( vrect_t * pvrect , int lineadj , float aspect ) ;
// called whenever r_refdef or vid change
//void R_InitSky (struct texture_s *mt); // called at level load
void R_CheckEfrags ( void ) ; //johnfitz
void R_AddEfrags ( entity_t * ent ) ;
void R_NewMap ( void ) ;
void R_ParseParticleEffect ( void ) ;
void R_RunParticleEffect ( vec3_t org , vec3_t dir , int color , int count ) ;
void R_RocketTrail ( vec3_t start , vec3_t end , int type ) ;
void R_EntityParticles ( entity_t * ent ) ;
void R_BlobExplosion ( vec3_t org ) ;
void R_ParticleExplosion ( vec3_t org ) ;
void R_ParticleExplosion2 ( vec3_t org , int colorStart , int colorLength ) ;
void R_LavaSplash ( vec3_t org ) ;
void R_TeleportSplash ( vec3_t org ) ;
void R_PushDlights ( void ) ;
//
// surface cache related
//
extern int reinit_surfcache ; // if 1, surface cache is currently empty and
int D_SurfaceCacheForRes ( int width , int height ) ;
void D_FlushCaches ( void ) ;
void D_DeleteSurfaceCache ( void ) ;
void D_InitCaches ( void * buffer , int size ) ;
void R_SetVrect ( vrect_t * pvrect , vrect_t * pvrectin , int lineadj ) ;
bspfile.h, cdaudio.h, client.h, cmd.h, common.h, console.h, crc.h, cvar.h,
d_ifacea.h, draw.h, gl_texmgr.h, glquake.h, image.h, input.h, keys.h, mathlib.h,
menu.h, modelgen.h, net.h, net_dgrm.h, net_loop.h, net_sdlnet.h, net_udp.h,
net_wins.h, platform.h, pr_comp.h, progdefs.h, progs.h, protocol.h, quakedef.h,
render.h, resource.h, sbar.h, screen.h, server.h, sound.h, spritegn.h, sys.h,
vid.h, view.h, wad.h, world.h, zone.h: added include guards to the headers.
git-svn-id: svn://svn.code.sf.net/p/quakespasm/code/trunk/quakespasm@84 af15c1b1-3010-417e-b628-4374ebc0bcbd
2010-02-21 00:01:08 +00:00
# endif /* _QUAKE_RENDER_H */