- prevent crash on invalid textures.

This commit is contained in:
Christoph Oelckers 2019-10-08 01:37:24 +02:00
parent 7131fe6c6e
commit 50e6d364be

View file

@ -744,16 +744,24 @@ void FlipNonSquareBlock(T* dst, const T* src, int x, int y, int srcpitch)
} }
} }
static void gloadtile_art_indexed(int32_t dapic, int32_t dameth, pthtyp *pth, int32_t doalloc) TArray<uint8_t> emptiness;
static void gloadtile_art_indexed(int32_t dapic, int32_t dameth, pthtyp* pth, int32_t doalloc)
{ {
vec2_16_t const & tsizart = tilesiz[dapic]; vec2_16_t const& tsizart = tilesiz[dapic];
vec2_t siz = { tsizart.x, tsizart.y }; vec2_t siz = { tsizart.x, tsizart.y };
//POGOTODO: npoty //POGOTODO: npoty
char npoty = 0; char npoty = 0;
//POGOTODO: if !glinfo.texnpot, then we could allocate a texture of the pow2 size, and then populate the subportion using buffersubdata func //POGOTODO: if !glinfo.texnpot, then we could allocate a texture of the pow2 size, and then populate the subportion using buffersubdata func
if (waloff[dapic]) uint8_t *p = (uint8_t*)waloff[dapic];
if (!waloff[dapic])
{
emptiness.Resize(siz.x*siz.y);
memset(emptiness.Data(), 255, siz.x * siz.y);
p = emptiness.Data();
}
{ {
if (doalloc) if (doalloc)
{ {
@ -764,14 +772,11 @@ static void gloadtile_art_indexed(int32_t dapic, int32_t dameth, pthtyp *pth, in
polymost_setuptexture(pth->glpic, dameth, 0); polymost_setuptexture(pth->glpic, dameth, 0);
} }
TArray<uint8_t> flipped(siz.x*siz.y, true); TArray<uint8_t> flipped(siz.x*siz.y, true);
FlipNonSquareBlock(flipped.Data(), (uint8_t*)waloff[dapic], siz.y, siz.x, siz.y); FlipNonSquareBlock(flipped.Data(), p, siz.y, siz.x, siz.y);
pth->glpic->LoadTexture(flipped.Data()); pth->glpic->LoadTexture(flipped.Data());
} }
else
{
assert(false);
}
pth->picnum = dapic; pth->picnum = dapic;
pth->palnum = 0; pth->palnum = 0;