soft: fix model skin textures

Soft render still uses downscalled skins and wall, code fixes case
when skin(s,t) size defined in model is slightly different to real
skin dementions. Code checks skin size in model and image asset size
and scale.
This commit is contained in:
Denis Pauk 2024-06-30 12:10:12 +03:00
parent 96b8707825
commit 689950068a
3 changed files with 8 additions and 4 deletions

View file

@ -206,6 +206,8 @@ typedef struct
pixel_t *pskin;
int skinwidth;
int skinheight;
float scalewidth;
float scaleheight;
} affinetridesc_t;
typedef struct

View file

@ -592,8 +592,10 @@ R_AliasSetupSkin(const entity_t *currententity, const model_t *currentmodel)
return false;
r_affinetridesc.pskin = pskindesc->pixels[0];
r_affinetridesc.skinwidth = pskindesc->width;
r_affinetridesc.skinheight = pskindesc->height;
r_affinetridesc.skinwidth = pskindesc->asset_width;
r_affinetridesc.skinheight = pskindesc->asset_height;
r_affinetridesc.scalewidth = (float)pskindesc->asset_width / s_pmdl->skinwidth;
r_affinetridesc.scaleheight = (float)pskindesc->asset_height / s_pmdl->skinheight;
return true;
}

View file

@ -784,8 +784,8 @@ R_ProcessLeftEdge(const compactvert_t *plefttop, const compactvert_t *prighttop,
v = plefttop->v;
d_aspancount = plefttop->u - prighttop->u;
s = plefttop->s;
t = plefttop->t;
s = plefttop->s * r_affinetridesc.scalewidth;
t = plefttop->t * r_affinetridesc.scaleheight;
i = (s >> SHIFT16XYZ) + (t >> SHIFT16XYZ) * r_affinetridesc.skinwidth;
d_ptex = &r_affinetridesc.pskin[i];
d_sfrac = s & 0xFFFF;