6e3f69f504
fte particle scripts are disabled (classic works). I'll fix these in the new year. Redid framestate stuff again. Slightly better now, but this is the bulk of the changes here. Reworked the renderqueue to provide batches of items instead of individual items. This cleans up the particle rendering code significantly, and is a step towards multiple concurrent particle systems. fte's scripted particles are broken as I'm trying to find a way to rework them to batch types together, rather than having to restart each batch after each particle when you have two particles in a trail. I'll fix it some time. Reworked some alias model code regarding skeletal models. Added some conceptual skeletal bone control builtins available to csqc. Currently it can query the bone names and save off animation states, but can't animate - its just not complete. Added more info to glsl custom shaders. Updated surface sorting on halflife maps to properly cope with alphaed entities, rather than just texture-based blends (q2-style). git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@3095 fc73d0e0-1445-4013-8a0c-d673dee63da5
242 lines
9.9 KiB
C
242 lines
9.9 KiB
C
//These are defined later in the source tree. This file should probably be moved to a later spot.
|
|
struct progfuncs_s;
|
|
struct globalvars_s;
|
|
struct texture_s;
|
|
|
|
|
|
|
|
#ifdef HALFLIFEMODELS
|
|
#define MAX_BONE_CONTROLLERS 5
|
|
#endif
|
|
|
|
#define FST_BASE 0 //base frames
|
|
#define FS_REG 1 //regular frames
|
|
#define FS_COUNT 2 //regular frames
|
|
typedef struct {
|
|
struct {
|
|
int frame[2];
|
|
float frametime[2];
|
|
float lerpfrac;
|
|
|
|
#ifdef HALFLIFEMODELS
|
|
float subblendfrac; //hl models are weird
|
|
#endif
|
|
|
|
int endbone;
|
|
} g[2];
|
|
|
|
float *bonestate;
|
|
int bonecount;
|
|
|
|
#ifdef HALFLIFEMODELS
|
|
float bonecontrols[MAX_BONE_CONTROLLERS]; //hl special bone controllers
|
|
#endif
|
|
} framestate_t;
|
|
|
|
|
|
|
|
|
|
//function prototypes
|
|
|
|
#if defined(SERVERONLY)
|
|
#define qrenderer QR_NONE
|
|
#define FNC(n) (n) //FNC is defined as 'pointer if client build, direct if dedicated server'
|
|
#else
|
|
#define FNC(n) (*n)
|
|
extern r_qrenderer_t qrenderer;
|
|
extern char *q_renderername;
|
|
|
|
extern mpic_t *(*Draw_SafePicFromWad) (char *name);
|
|
extern mpic_t *(*Draw_CachePic) (char *path);
|
|
extern mpic_t *(*Draw_SafeCachePic) (char *path);
|
|
extern void (*Draw_Init) (void);
|
|
extern void (*Draw_ReInit) (void);
|
|
extern void (*Draw_Character) (int x, int y, unsigned int num);
|
|
extern void (*Draw_TinyCharacter) (int x, int y, unsigned int num);
|
|
extern void (*Draw_ColouredCharacter) (int x, int y, unsigned int num);
|
|
extern void (*Draw_String) (int x, int y, const qbyte *str);
|
|
extern void (*Draw_Alt_String) (int x, int y, const qbyte *str);
|
|
extern void (*Draw_Crosshair) (void);
|
|
extern void (*Draw_DebugChar) (qbyte num);
|
|
extern void (*Draw_Pic) (int x, int y, mpic_t *pic);
|
|
extern void (*Draw_ScalePic) (int x, int y, int width, int height, mpic_t *pic);
|
|
extern void (*Draw_SubPic) (int x, int y, mpic_t *pic, int srcx, int srcy, int width, int height);
|
|
extern void (*Draw_TransPic) (int x, int y, mpic_t *pic);
|
|
extern void (*Draw_TransPicTranslate) (int x, int y, int width, int height, qbyte *image, qbyte *translation);
|
|
extern void (*Draw_ConsoleBackground) (int lines);
|
|
extern void (*Draw_EditorBackground) (int lines);
|
|
extern void (*Draw_TileClear) (int x, int y, int w, int h);
|
|
extern void (*Draw_Fill) (int x, int y, int w, int h, unsigned int c);
|
|
extern void (*Draw_FillRGB) (int x, int y, int w, int h, float r, float g, float b);
|
|
extern void (*Draw_FadeScreen) (void);
|
|
extern void (*Draw_BeginDisc) (void);
|
|
extern void (*Draw_EndDisc) (void);
|
|
extern qboolean (*Draw_IsCached) (char *picname); //can be null
|
|
|
|
extern void (*Draw_Image) (float x, float y, float w, float h, float s1, float t1, float s2, float t2, mpic_t *pic); //gl-style scaled/coloured/subpic
|
|
extern void (*Draw_ImageColours) (float r, float g, float b, float a);
|
|
|
|
extern void (*R_Init) (void);
|
|
extern void (*R_DeInit) (void);
|
|
extern void (*R_ReInit) (void);
|
|
extern void (*R_RenderView) (void); // must set r_refdef first
|
|
|
|
extern qboolean (*R_CheckSky) (void);
|
|
extern void (*R_SetSky) (char *name, float rotate, vec3_t axis);
|
|
|
|
extern void (*R_NewMap) (void);
|
|
extern void (*R_PreNewMap) (void);
|
|
extern int (*R_LightPoint) (vec3_t point);
|
|
|
|
extern void (*R_PushDlights) (void);
|
|
extern void (*R_AddStain) (vec3_t org, float red, float green, float blue, float radius);
|
|
extern void (*R_LessenStains) (void);
|
|
extern void (*R_DrawWaterSurfaces) (void);
|
|
|
|
extern void (*Media_ShowFrameBGR_24_Flip) (qbyte *framedata, int inwidth, int inheight); //input is bottom up...
|
|
extern void (*Media_ShowFrameRGBA_32) (qbyte *framedata, int inwidth, int inheight); //top down
|
|
extern void (*Media_ShowFrame8bit) (qbyte *framedata, int inwidth, int inheight, qbyte *palette); //paletted topdown (framedata is 8bit indexes into palette)
|
|
|
|
extern qboolean (*VID_Init) (rendererstate_t *info, unsigned char *palette);
|
|
extern void (*VID_DeInit) (void);
|
|
extern void (*VID_LockBuffer) (void);
|
|
extern void (*VID_UnlockBuffer) (void);
|
|
extern void (*D_BeginDirectRect) (int x, int y, qbyte *pbitmap, int width, int height);
|
|
extern void (*D_EndDirectRect) (int x, int y, int width, int height);
|
|
extern void (*VID_ForceLockState) (int lk);
|
|
extern int (*VID_ForceUnlockedAndReturnState) (void);
|
|
extern void (*VID_SetPalette) (unsigned char *palette);
|
|
extern void (*VID_ShiftPalette) (unsigned char *palette);
|
|
extern char *(*VID_GetRGBInfo) (int prepad, int *truevidwidth, int *truevidheight);
|
|
extern void (*VID_SetWindowCaption) (char *msg);
|
|
|
|
extern void SCR_Init (void);
|
|
extern void SCR_DeInit (void);
|
|
extern void (*SCR_UpdateScreen) (void);
|
|
extern void SCR_BeginLoadingPlaque (void);
|
|
extern void SCR_EndLoadingPlaque (void);
|
|
extern void SCR_DrawConsole (qboolean noback);
|
|
extern void SCR_SetUpToDrawConsole (void);
|
|
extern void SCR_EraseCenterString (void);
|
|
extern void SCR_CenterPrint (int pnum, char *str, qboolean fromgamecode);
|
|
|
|
#endif
|
|
|
|
extern void FNC(Mod_Init) (void);
|
|
extern void FNC(Mod_ClearAll) (void);
|
|
extern struct model_s *FNC(Mod_ForName) (char *name, qboolean crash);
|
|
extern struct model_s *FNC(Mod_FindName) (char *name);
|
|
extern void *FNC(Mod_Extradata) (struct model_s *mod); // handles caching
|
|
extern void FNC(Mod_TouchModel) (char *name);
|
|
|
|
extern void FNC(Mod_NowLoadExternal) (void);
|
|
|
|
extern void FNC(Mod_Think) (void);
|
|
extern int FNC(Mod_SkinForName) (struct model_s *model, char *name);
|
|
|
|
#undef FNC
|
|
|
|
extern qboolean Mod_GetTag (struct model_s *model, int tagnum, framestate_t *framestate, float *transforms);
|
|
extern int Mod_TagNumForName (struct model_s *model, char *name);
|
|
|
|
int Mod_GetNumBones(struct model_s *model, qboolean allowtags);
|
|
int Mod_GetBoneRelations(struct model_s *model, int numbones, framestate_t *fstate, float *result);
|
|
int Mod_GetBoneParent(struct model_s *model, int bonenum);
|
|
char *Mod_GetBoneName(struct model_s *model, int bonenum);
|
|
|
|
void Draw_FunString(int x, int y, unsigned char *str);
|
|
void Draw_FunStringLen(int x, int y, unsigned char *str, int len);
|
|
|
|
|
|
#ifdef SERVERONLY
|
|
#define Mod_Q1LeafPVS Mod_LeafPVS
|
|
// qbyte *Mod_LeafPVS (struct mleaf_s *leaf, struct model_s *model, qbyte *buffer);
|
|
#endif
|
|
|
|
|
|
|
|
typedef struct {
|
|
char *description;
|
|
char *name[4];
|
|
r_qrenderer_t rtype;
|
|
|
|
mpic_t *(*Draw_SafePicFromWad) (char *name);
|
|
mpic_t *(*Draw_CachePic) (char *path);
|
|
mpic_t *(*Draw_SafeCachePic) (char *path);
|
|
void (*Draw_Init) (void);
|
|
void (*Draw_ReInit) (void);
|
|
void (*Draw_Character) (int x, int y, unsigned int num);
|
|
void (*Draw_ColouredCharacter) (int x, int y, unsigned int num);
|
|
void (*Draw_TinyCharacter) (int x, int y, unsigned int num);
|
|
void (*Draw_String) (int x, int y, const qbyte *str);
|
|
void (*Draw_Alt_String) (int x, int y, const qbyte *str);
|
|
void (*Draw_Crosshair) (void);
|
|
void (*Draw_DebugChar) (qbyte num);
|
|
void (*Draw_Pic) (int x, int y, mpic_t *pic);
|
|
void (*Draw_ScalePic) (int x, int y, int width, int height, mpic_t *pic);
|
|
void (*Draw_SubPic) (int x, int y, mpic_t *pic, int srcx, int srcy, int width, int height);
|
|
void (*Draw_TransPic) (int x, int y, mpic_t *pic);
|
|
void (*Draw_TransPicTranslate) (int x, int y, int w, int h, qbyte *pic, qbyte *translation);
|
|
void (*Draw_ConsoleBackground) (int lines);
|
|
void (*Draw_EditorBackground) (int lines);
|
|
void (*Draw_TileClear) (int x, int y, int w, int h);
|
|
void (*Draw_Fill) (int x, int y, int w, int h, unsigned int c);
|
|
void (*Draw_FillRGB) (int x, int y, int w, int h, float r, float g, float b);
|
|
void (*Draw_FadeScreen) (void);
|
|
void (*Draw_BeginDisc) (void);
|
|
void (*Draw_EndDisc) (void);
|
|
|
|
void (*Draw_Image) (float x, float y, float w, float h, float s1, float t1, float s2, float t2, mpic_t *pic); //gl-style scaled/coloured/subpic
|
|
void (*Draw_ImageColours) (float r, float g, float b, float a);
|
|
|
|
void (*R_Init) (void);
|
|
void (*R_DeInit) (void);
|
|
void (*R_ReInit) (void);
|
|
void (*R_RenderView) (void); // must set r_refdef first
|
|
|
|
qboolean (*R_CheckSky) (void);
|
|
void (*R_SetSky) (char *name, float rotate, vec3_t axis);
|
|
|
|
void (*R_NewMap) (void);
|
|
void (*R_PreNewMap) (void);
|
|
int (*R_LightPoint) (vec3_t point);
|
|
|
|
void (*R_PushDlights) (void);
|
|
void (*R_AddStain) (vec3_t org, float red, float green, float blue, float radius);
|
|
void (*R_LessenStains) (void);
|
|
|
|
void (*Media_ShowFrameBGR_24_Flip) (qbyte *framedata, int inwidth, int inheight); //input is bottom up...
|
|
void (*Media_ShowFrameRGBA_32) (qbyte *framedata, int inwidth, int inheight); //top down
|
|
void (*Media_ShowFrame8bit) (qbyte *framedata, int inwidth, int inheight, qbyte *palette); //paletted topdown (framedata is 8bit indexes into palette)
|
|
|
|
void (*Mod_Init) (void);
|
|
void (*Mod_ClearAll) (void);
|
|
struct model_s *(*Mod_ForName) (char *name, qboolean crash);
|
|
struct model_s *(*Mod_FindName) (char *name);
|
|
void *(*Mod_Extradata) (struct model_s *mod); // handles caching
|
|
void (*Mod_TouchModel) (char *name);
|
|
|
|
void (*Mod_NowLoadExternal) (void);
|
|
void (*Mod_Think) (void);
|
|
qboolean (*Mod_GetTag) (struct model_s *model, int tagnum, framestate_t *fstate, float *result);
|
|
int (*Mod_TagNumForName) (struct model_s *model, char *name);
|
|
int (*Mod_SkinForName) (struct model_s *model, char *name);
|
|
|
|
|
|
qboolean (*VID_Init) (rendererstate_t *info, unsigned char *palette);
|
|
void (*VID_DeInit) (void);
|
|
void (*VID_LockBuffer) (void);
|
|
void (*VID_UnlockBuffer) (void);
|
|
void (*D_BeginDirectRect) (int x, int y, qbyte *pbitmap, int width, int height);
|
|
void (*D_EndDirectRect) (int x, int y, int width, int height);
|
|
void (*VID_ForceLockState) (int lk);
|
|
int (*VID_ForceUnlockedAndReturnState) (void);
|
|
void (*VID_SetPalette) (unsigned char *palette);
|
|
void (*VID_ShiftPalette) (unsigned char *palette);
|
|
char *(*VID_GetRGBInfo) (int prepad, int *truevidwidth, int *truevidheight);
|
|
void (*VID_SetWindowCaption) (char *msg);
|
|
|
|
void (*SCR_UpdateScreen) (void);
|
|
|
|
char *alignment;
|
|
} rendererinfo_t;
|