polymost.c: More informative failure message for gloadtile_cached().

git-svn-id: https://svn.eduke32.com/eduke32@2371 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2012-02-20 19:53:23 +00:00
parent be0d5a7885
commit 1ebdcf6443
1 changed files with 30 additions and 8 deletions

View File

@ -1583,6 +1583,9 @@ static int32_t gloadtile_cached(int32_t fil, const texcacheheader *head, int32_t
void *midbuf = NULL; void *midbuf = NULL;
int32_t alloclen=0; int32_t alloclen=0;
int32_t err=0;
GLenum glerr=GL_NO_ERROR;
UNREFERENCED_PARAMETER(dapalnum); UNREFERENCED_PARAMETER(dapalnum);
if (*doalloc&1) if (*doalloc&1)
@ -1595,7 +1598,10 @@ static int32_t gloadtile_cached(int32_t fil, const texcacheheader *head, int32_t
pth->sizx = head->xdim; pth->sizx = head->xdim;
pth->sizy = head->ydim; pth->sizy = head->ydim;
bglGetError(); while (bglGetError() != GL_NO_ERROR)
{
/* no-op*/
}
// load the mipmaps // load the mipmaps
for (level = 0; level==0 || (pict.xdim > 1 || pict.ydim > 1); level++) for (level = 0; level==0 || (pict.xdim > 1 || pict.ydim > 1); level++)
@ -1611,7 +1617,7 @@ static int32_t gloadtile_cached(int32_t fil, const texcacheheader *head, int32_t
Blseek(fil, cachepos, BSEEK_SET); Blseek(fil, cachepos, BSEEK_SET);
r = Bread(fil, &pict, sizeof(texcachepicture)); r = Bread(fil, &pict, sizeof(texcachepicture));
cachepos += sizeof(texcachepicture); cachepos += sizeof(texcachepicture);
if (r < (int32_t)sizeof(texcachepicture)) goto failure; if (r < (int32_t)sizeof(texcachepicture)) { err=1; goto failure; }
} }
pict.size = B_LITTLE32(pict.size); pict.size = B_LITTLE32(pict.size);
@ -1634,21 +1640,24 @@ static int32_t gloadtile_cached(int32_t fil, const texcacheheader *head, int32_t
if (!picc) goto failure; else midbuf = picc; if (!picc) goto failure; else midbuf = picc;
} }
if (dedxtfilter(fil, &pict, pic, midbuf, packbuf, (head->flags&4)==4)) goto failure; if (dedxtfilter(fil, &pict, pic, midbuf, packbuf, (head->flags&4)==4))
{
err=2; goto failure;
}
bglCompressedTexImage2DARB(GL_TEXTURE_2D,level,pict.format,pict.xdim,pict.ydim,pict.border, bglCompressedTexImage2DARB(GL_TEXTURE_2D,level,pict.format,pict.xdim,pict.ydim,pict.border,
pict.size,pic); pict.size,pic);
if (bglGetError() != GL_NO_ERROR) goto failure; if ((glerr=bglGetError()) != GL_NO_ERROR) { err=3; goto failure; }
{ {
GLint format; GLint format;
bglGetTexLevelParameteriv(GL_TEXTURE_2D, level, GL_TEXTURE_INTERNAL_FORMAT, &format); bglGetTexLevelParameteriv(GL_TEXTURE_2D, level, GL_TEXTURE_INTERNAL_FORMAT, &format);
if (bglGetError() != GL_NO_ERROR) goto failure; if ((glerr = bglGetError()) != GL_NO_ERROR) { err=4; goto failure; }
// format = B_LITTLE32(format); // format = B_LITTLE32(format);
if (pict.format != format) if (pict.format != format)
{ {
OSD_Printf("invalid texture cache file format %d %d\n",pict.format, format); OSD_Printf("gloadtile_cached: invalid texture cache file format %d %d\n", pict.format, format);
goto failure; err = -1; goto failure;
} }
} }
@ -1658,8 +1667,21 @@ static int32_t gloadtile_cached(int32_t fil, const texcacheheader *head, int32_t
if (pic) Bfree(pic); if (pic) Bfree(pic);
if (packbuf) Bfree(packbuf); if (packbuf) Bfree(packbuf);
return 0; return 0;
failure: failure:
initprintf("failure!!!\n"); {
static const char *errmsgs[5] = {
"out of memory!",
"read too few bytes from cache file",
"dedxtfilter failed",
"bglCompressedTexImage2DARB failed",
"bglGetTexLevelParameteriv failed",
};
if (err >= 0)
initprintf("gloadtile_cached: %s (glerr=%x)\n", errmsgs[err], glerr);
}
if (midbuf) Bfree(midbuf); if (midbuf) Bfree(midbuf);
if (pic) Bfree(pic); if (pic) Bfree(pic);
if (packbuf) Bfree(packbuf); if (packbuf) Bfree(packbuf);