Skip to content

Commit

Permalink
Separated out the model skin management from the model code itself in…
Browse files Browse the repository at this point in the history
… preparation for wrapping with material_t.

The engine-internal data pointers in the shared state_t have been removed (they are supposed to have no meaning outside the engine anyway) and instead we now manage a series of parallel LUTs for state > modef, state > ded_ptcgen_t and state > ded_light_t. As a side benefit, we should be less prone to cache misses.
And as always, yet more cleanup and style updates.
  • Loading branch information
danij committed Mar 21, 2008
1 parent 3910e68 commit b885f80
Show file tree
Hide file tree
Showing 22 changed files with 687 additions and 615 deletions.
2 changes: 1 addition & 1 deletion doomsday/engine/portable/include/dd_def.h
Expand Up @@ -95,7 +95,7 @@ extern game_import_t __gi;
#define gx __gx
#define gi __gi

extern byte gammatable[256];
extern byte gammaTable[256];
extern float texGamma;

// tab_tables.c
Expand Down
2 changes: 2 additions & 0 deletions doomsday/engine/portable/include/def_main.h
Expand Up @@ -58,6 +58,8 @@ typedef struct sfxinfo_s {
extern ded_t defs; // The main definitions database.
extern sprname_t *sprNames; // Sprite name list.
extern state_t *states; // State list.
extern ded_light_t **stateLights;
extern ded_ptcgen_t **statePtcGens;
extern mobjinfo_t *mobjInfo; // Map object info database.
extern sfxinfo_t *sounds; // Sound effect list.
extern ddtext_t *texts; // Text list.
Expand Down
3 changes: 0 additions & 3 deletions doomsday/engine/portable/include/def_share.h
Expand Up @@ -49,9 +49,6 @@ typedef struct state_s {
acfnptr_t action;
int nextState;
int misc[NUM_STATE_MISC];
void *model;
void *light;
void *pTrigger;
} state_t;

typedef struct {
Expand Down
10 changes: 4 additions & 6 deletions doomsday/engine/portable/include/gl_texmanager.h
Expand Up @@ -71,8 +71,8 @@ extern byte loadExtAlways;
extern int texMagMode;
extern int upscaleAndSharpenPatches;

extern unsigned int curtex;
extern int pallump;
extern unsigned int curTex;
extern int palLump;

void GL_TexRegister(void);
void GL_EarlyInitTextureManager(void);
Expand All @@ -86,7 +86,6 @@ void GL_DoTexReset(cvar_t *unused);
void GL_DoUpdateTexGamma(cvar_t *unused);
void GL_DoUpdateTexParams(cvar_t *unused);
int GL_InitPalettedTexture(void);
void GL_DestroySkinNames(void);
void GL_ResetLumpTexData(void);

void GL_BindTexture(DGLuint texname);
Expand Down Expand Up @@ -158,15 +157,14 @@ void GL_UpdateTexParams(int mipmode);
void GL_UpdateRawScreenParams(int smoothing);
void GL_DeleteRawImages(void);
void GL_DeleteHUDSprite(int spritelump);
int GL_GetSkinTexIndex(const char *skin);

boolean GL_IsColorKeyed(const char *path);
void GL_GetSkyTopColor(int texidx, float *rgb);
void GL_GetSpriteColorf(int pnum, float *rgb);

// Load the skin texture and prepare it for rendering.
unsigned int GL_PrepareSkin(model_t *mdl, int skin);
unsigned int GL_PrepareShinySkin(modeldef_t *md, int sub);
unsigned int GL_PrepareSkin(skintex_t *stp, boolean allowTexComp);
unsigned int GL_PrepareShinySkin(skintex_t *stp);

// Loads the shiny texture and the mask texture, if they aren't yet loaded.
boolean GL_LoadReflectionMap(ded_reflection_t *ref);
Expand Down
12 changes: 12 additions & 0 deletions doomsday/engine/portable/include/r_data.h
Expand Up @@ -271,6 +271,12 @@ typedef struct {
rgbcol_t color; // Average color, for lighting.
} spritetex_t;

// Model skin.
typedef struct {
char path[256];
DGLuint tex;
} skintex_t;

// a patch is a lumppatch that has been prepared for render.
typedef struct patch_s {
lumpnum_t lump;
Expand Down Expand Up @@ -410,6 +416,12 @@ void R_AnimateAnimGroups(void);
void R_InitSpriteTextures(void);
int R_NewSpriteTexture(lumpnum_t lump, material_t **mat);

int R_GetSkinTexIndex(const char *skin);
skintex_t *R_GetSkinTexByIndex(int id);
int R_RegisterSkin(char *skin, const char *modelfn, char *fullpath);
void R_DeleteSkinTextures(void);
void R_DestroySkins(void); // Called at shutdown.

patch_t *R_FindPatch(lumpnum_t lump); // May return NULL.
patch_t *R_GetPatch(lumpnum_t lump); // Creates new entries.
patch_t **R_CollectPatches(int *count);
Expand Down
2 changes: 1 addition & 1 deletion doomsday/engine/portable/include/r_draw.h
Expand Up @@ -29,7 +29,7 @@
#ifndef __DOOMSDAY_REFRESH_DRAW_H__
#define __DOOMSDAY_REFRESH_DRAW_H__

extern byte *translationtables;
extern byte *translationTables;

void R_InitTranslationTables(void);
void R_UpdateTranslationTables(void);
Expand Down
36 changes: 17 additions & 19 deletions doomsday/engine/portable/include/r_model.h
Expand Up @@ -34,22 +34,22 @@
#define MAX_FRAME_MODELS DED_MAX_SUB_MODELS

// Model frame flags.
#define MFF_FULLBRIGHT 0x0001
#define MFF_SHADOW1 0x0002
#define MFF_SHADOW2 0x0004
#define MFF_BRIGHTSHADOW 0x0008
#define MFF_MOVEMENT_PITCH 0x0010 // Pitch aligned to movement.
#define MFF_SPIN 0x0020 // Spin around (for bonus items).
#define MFF_SKINTRANS 0x0040 // Color translation -> skins.
#define MFF_AUTOSCALE 0x0080 // Scale to match sprite height.
#define MFF_MOVEMENT_YAW 0x0100
#define MFF_DONT_INTERPOLATE 0x0200 // Don't interpolate from the frame.
#define MFF_BRIGHTSHADOW2 0x0400
#define MFF_ALIGN_YAW 0x0800
#define MFF_ALIGN_PITCH 0x1000
#define MFF_DARKSHADOW 0x2000
#define MFF_IDSKIN 0x4000 // Mobj id -> skin in skin range
#define MFF_DISABLE_Z_WRITE 0x8000
#define MFF_FULLBRIGHT 0x00000001
#define MFF_SHADOW1 0x00000002
#define MFF_SHADOW2 0x00000004
#define MFF_BRIGHTSHADOW 0x00000008
#define MFF_MOVEMENT_PITCH 0x00000010 // Pitch aligned to movement.
#define MFF_SPIN 0x00000020 // Spin around (for bonus items).
#define MFF_SKINTRANS 0x00000040 // Color translation -> skins.
#define MFF_AUTOSCALE 0x00000080 // Scale to match sprite height.
#define MFF_MOVEMENT_YAW 0x00000100
#define MFF_DONT_INTERPOLATE 0x00000200 // Don't interpolate from the frame.
#define MFF_BRIGHTSHADOW2 0x00000400
#define MFF_ALIGN_YAW 0x00000800
#define MFF_ALIGN_PITCH 0x00001000
#define MFF_DARKSHADOW 0x00002000
#define MFF_IDSKIN 0x00004000 // Mobj id -> skin in skin range
#define MFF_DISABLE_Z_WRITE 0x00008000
#define MFF_NO_DISTANCE_CHECK 0x00010000
#define MFF_SELSKIN 0x00020000
#define MFF_PARTICLE_SUB1 0x00040000 // Sub1 center is particle origin.
Expand Down Expand Up @@ -100,7 +100,7 @@ typedef struct modeldef_s {
struct modeldef_s *selectNext;

// Submodels.
submodeldef_t sub[MAX_FRAME_MODELS]; // 8
submodeldef_t sub[MAX_FRAME_MODELS];
} modeldef_t;

extern modeldef_t *modefs;
Expand All @@ -119,8 +119,6 @@ int R_ModelFrameNumForName(int modelnum, char *fname);
void R_SetModelFrame(modeldef_t *modef, int frame);
void R_SetSpriteReplacement(int sprite, char *modelname);
int R_FindModelFile(const char *filename, char *outfn);
byte *R_LoadSkin(model_t *mdl, int skin, int *width, int *height,
int *pxsize);
void R_PrecacheSkinsForMobj(struct mobj_s *mo);
void R_PrecacheModelSkins(modeldef_t *modef);

Expand Down
2 changes: 1 addition & 1 deletion doomsday/engine/portable/src/dd_main.c
Expand Up @@ -1015,7 +1015,7 @@ void* DD_GetVariable(int ddvalue)
return &traceLOS;

case DD_TRANSLATIONTABLES_ADDRESS:
return translationtables;
return translationTables;

case DD_MAP_NAME:
{
Expand Down

0 comments on commit b885f80

Please sign in to comment.