Merge branch 'texture-fixes' into 'master'

Texture fixes

See merge request STJr/SRB2Internal!135
This commit is contained in:
toaster 2018-04-06 17:44:17 -04:00
commit d315072e3f
2 changed files with 25 additions and 2 deletions

View file

@ -62,19 +62,31 @@ static void HWR_DrawPatchInCache(GLMipmap_t *mipmap,
UINT8 texel; UINT8 texel;
UINT16 texelu16; UINT16 texelu16;
if (!ptexturewidth)
return;
x1 = originx; x1 = originx;
x2 = x1 + SHORT(realpatch->width); x2 = x1 + SHORT(realpatch->width);
if (x1 > ptexturewidth || x2 < 0)
return; // patch not located within texture's x bounds, ignore
if (originy > ptextureheight || (originy + SHORT(realpatch->height)) < 0)
return; // patch not located within texture's y bounds, ignore
// patch is actually inside the texture!
// now check if texture is partly off-screen and adjust accordingly
// left edge
if (x1 < 0) if (x1 < 0)
x = 0; x = 0;
else else
x = x1; x = x1;
// right edge
if (x2 > ptexturewidth) if (x2 > ptexturewidth)
x2 = ptexturewidth; x2 = ptexturewidth;
if (!ptexturewidth)
return;
col = x * pblockwidth / ptexturewidth; col = x * pblockwidth / ptexturewidth;
ncols = ((x2 - x) * pblockwidth) / ptexturewidth; ncols = ((x2 - x) * pblockwidth) / ptexturewidth;

View file

@ -439,11 +439,22 @@ static UINT8 *R_GenerateTexture(size_t texnum)
height = SHORT(realpatch->height); height = SHORT(realpatch->height);
x2 = x1 + width; x2 = x1 + width;
if (x1 > texture->width || x2 < 0)
continue; // patch not located within texture's x bounds, ignore
if (patch->originy > texture->height || (patch->originy + height) < 0)
continue; // patch not located within texture's y bounds, ignore
// patch is actually inside the texture!
// now check if texture is partly off-screen and adjust accordingly
// left edge
if (x1 < 0) if (x1 < 0)
x = 0; x = 0;
else else
x = x1; x = x1;
// right edge
if (x2 > texture->width) if (x2 > texture->width)
x2 = texture->width; x2 = texture->width;