mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-23 21:02:50 +00:00
e40f3f4f93
Really, this won't make all that much difference because alias models with more than one skin are quite rare, and those with animated skin groups are even rarer. However, for those models that do have more than one skin, it will allow for reduced allocation overheads, and when supported (glsl, vulkan, maybe gl), loading all the skins into an array texture (since all skins are the same size, though external skins may vary), but that's not implemented yet, this just wraps the old one skin at a time code.
128 lines
4.8 KiB
C
128 lines
4.8 KiB
C
#ifndef __mod_internal_h
|
|
#define __mod_internal_h
|
|
|
|
#include "QF/darray.h"
|
|
#include "QF/iqm.h"
|
|
#include "QF/model.h"
|
|
#include "QF/skin.h"
|
|
#include "QF/plugin/vid_render.h"
|
|
|
|
typedef struct mod_alias_skin_s {
|
|
int skin_num;
|
|
int group_num; // -1 if not in an animated group
|
|
byte *texels;
|
|
maliasskindesc_t *skindesc;
|
|
} mod_alias_skin_t;
|
|
|
|
typedef struct stvertset_s DARRAY_TYPE (stvert_t) stvertset_t;
|
|
typedef struct mtriangleset_s DARRAY_TYPE (mtriangle_t) mtriangleset_t;
|
|
typedef struct trivertxset_s DARRAY_TYPE (trivertx_t *) trivertxset_t;
|
|
typedef struct askinset_s DARRAY_TYPE (mod_alias_skin_t) askinset_t;
|
|
|
|
typedef struct mod_alias_ctx_s {
|
|
aliashdr_t *header;
|
|
model_t *mod;
|
|
stvertset_t stverts;
|
|
mtriangleset_t triangles;
|
|
trivertxset_t poseverts;
|
|
askinset_t skins;
|
|
int aliasbboxmins[3];
|
|
int aliasbboxmaxs[3];
|
|
} mod_alias_ctx_t;
|
|
|
|
typedef struct mod_sprite_ctx_s {
|
|
model_t *mod;
|
|
dsprite_t *dsprite;
|
|
msprite_t *sprite;
|
|
int numframes;
|
|
int *frame_numbers;
|
|
dspriteframe_t **dframes; ///< array of pointers to dframes (in)
|
|
mspriteframe_t ***frames; ///< array of pointers to mframe pointers (out)
|
|
} mod_sprite_ctx_t;
|
|
|
|
int Mod_CalcFullbright (byte *out, const byte *in, size_t pixels);
|
|
int Mod_ClearFullbright (byte *out, const byte *in, size_t pixels);
|
|
void Mod_FloodFillSkin (byte *skin, int skinwidth, int skinheight);
|
|
//FIXME gl specific. rewrite to use above
|
|
int Mod_Fullbright (byte * skin, int width, int height, const char *name);
|
|
|
|
void Mod_LoadBrushModel (model_t *mod, void *buffer);
|
|
void Mod_FindClipDepth (hull_t *hull);
|
|
|
|
model_t *Mod_FindName (const char *name);
|
|
float RadiusFromBounds (const vec3_t mins, const vec3_t maxs) __attribute__((pure));
|
|
|
|
struct vulkan_ctx_s;
|
|
|
|
extern vid_model_funcs_t *m_funcs;
|
|
|
|
void gl_Mod_MakeAliasModelDisplayLists (mod_alias_ctx_t *alias_ctx, void *_m,
|
|
int _s, int extra);
|
|
void gl_Mod_LoadAllSkins (mod_alias_ctx_t *alias_ctx);
|
|
void gl_Mod_FinalizeAliasModel (mod_alias_ctx_t *alias_ctx);
|
|
void gl_Mod_LoadExternalSkins (mod_alias_ctx_t *alias_ctx);
|
|
void gl_Mod_IQMFinish (model_t *mod);
|
|
|
|
void glsl_Mod_MakeAliasModelDisplayLists (mod_alias_ctx_t *alias_ctx,
|
|
void *_m, int _s, int extra);
|
|
void glsl_Mod_LoadAllSkins (mod_alias_ctx_t *alias_ctx);
|
|
void glsl_Mod_FinalizeAliasModel (mod_alias_ctx_t *alias_ctx);
|
|
void glsl_Mod_LoadExternalSkins (mod_alias_ctx_t *alias_ctx);
|
|
void glsl_Mod_IQMFinish (model_t *mod);
|
|
|
|
void sw_Mod_MakeAliasModelDisplayLists (mod_alias_ctx_t *alias_ctx, void *_m,
|
|
int _s, int extra);
|
|
void sw_Mod_LoadAllSkins (mod_alias_ctx_t *alias_ctx);
|
|
void sw_Mod_IQMFinish (model_t *mod);
|
|
|
|
void gl_Mod_LoadLighting (model_t *mod, bsp_t *bsp);
|
|
void gl_Mod_SubdivideSurface (model_t *mod, msurface_t *fa);
|
|
void gl_Mod_ProcessTexture (model_t *mod, texture_t *tx);
|
|
|
|
void glsl_Mod_LoadLighting (model_t *mod, bsp_t *bsp);
|
|
void glsl_Mod_ProcessTexture (model_t *mod, texture_t *tx);
|
|
|
|
void sw_Mod_LoadLighting (model_t *mod, bsp_t *bsp);
|
|
|
|
void Vulkan_Mod_LoadLighting (model_t *mod, bsp_t *bsp,
|
|
struct vulkan_ctx_s *ctx);
|
|
void Vulkan_Mod_SubdivideSurface (model_t *mod, msurface_t *fa,
|
|
struct vulkan_ctx_s *ctx);
|
|
void Vulkan_Mod_ProcessTexture (model_t *mod, texture_t *tx,
|
|
struct vulkan_ctx_s *ctx);
|
|
|
|
void Mod_LoadSpriteFrame (mspriteframe_t *frame, const dspriteframe_t *dframe);
|
|
void gl_Mod_SpriteLoadFrames (mod_sprite_ctx_t *sprite_ctx);
|
|
void glsl_Mod_SpriteLoadFrames (mod_sprite_ctx_t *sprite_ctx);
|
|
void sw_Mod_SpriteLoadFrames (mod_sprite_ctx_t *sprite_ctx);
|
|
|
|
void Mod_LoadIQM (model_t *mod, void *buffer);
|
|
void Mod_FreeIQM (iqm_t *iqm);
|
|
iqmblend_t *Mod_IQMBuildBlendPalette (iqm_t *iqm, int *size);
|
|
void Mod_LoadAliasModel (model_t *mod, void *buffer,
|
|
cache_allocator_t allocator);
|
|
void Mod_LoadSpriteModel (model_t *mod, void *buffer);
|
|
|
|
void Skin_Init (void);
|
|
skin_t *Skin_SetColormap (skin_t *skin, int cmap);
|
|
skin_t *Skin_SetSkin (skin_t *skin, int cmap, const char *skinname);
|
|
void Skin_SetTranslation (int cmap, int top, int bottom);
|
|
int Skin_CalcTopColors (byte *out, const byte *in, size_t pixels);
|
|
int Skin_CalcBottomColors (byte *out, const byte *in, size_t pixels);
|
|
int Skin_ClearTopColors (byte *out, const byte *in, size_t pixels);
|
|
int Skin_ClearBottomColors (byte *out, const byte *in, size_t pixels);
|
|
|
|
void sw_Skin_SetupSkin (skin_t *skin, int cmap);
|
|
void sw_Skin_ProcessTranslation (int cmap, const byte *translation);
|
|
void sw_Skin_InitTranslations (void);
|
|
|
|
void glsl_Skin_SetupSkin (skin_t *skin, int cmap);
|
|
void glsl_Skin_ProcessTranslation (int cmap, const byte *translation);
|
|
void glsl_Skin_InitTranslations (void);
|
|
|
|
void gl_Skin_SetupSkin (skin_t *skin, int cmap);
|
|
void gl_Skin_ProcessTranslation (int cmap, const byte *translation);
|
|
void gl_Skin_InitTranslations (void);
|
|
void gl_Skin_Init_Textures (void);
|
|
void gl_Skin_SetPlayerSkin (int width, int height, const byte *data);
|
|
#endif// __mod_internal_h
|