mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-11 18:50:46 +00:00
Polymost: Call texcache_calcid once per texture instead of twice. Clean it up a little while we're at it.
git-svn-id: https://svn.eduke32.com/eduke32@5709 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
9db5f7e44f
commit
d1266434f1
4 changed files with 20 additions and 17 deletions
|
@ -60,8 +60,9 @@ extern int32_t texcache_readdata(void *dest, int32_t len);
|
||||||
extern pthtyp *texcache_fetch(int32_t dapicnum, int32_t dapalnum, int32_t dashade, int32_t dameth);
|
extern pthtyp *texcache_fetch(int32_t dapicnum, int32_t dapalnum, int32_t dashade, int32_t dameth);
|
||||||
extern int32_t texcache_loadskin(const texcacheheader *head, int32_t *doalloc, GLuint *glpic, vec2_t *siz);
|
extern int32_t texcache_loadskin(const texcacheheader *head, int32_t *doalloc, GLuint *glpic, vec2_t *siz);
|
||||||
extern int32_t texcache_loadtile(const texcacheheader *head, int32_t *doalloc, pthtyp *pth);
|
extern int32_t texcache_loadtile(const texcacheheader *head, int32_t *doalloc, pthtyp *pth);
|
||||||
extern void texcache_writetex(const char *fn, int32_t len, int32_t dameth, char effect, texcacheheader *head);
|
extern char const * texcache_calcid(char *cachefn, const char *fn, const int32_t len, const int32_t dameth, const char effect);
|
||||||
extern int32_t texcache_readtexheader(const char *fn, int32_t len, int32_t dameth, char effect, texcacheheader *head, int32_t modelp);
|
extern void texcache_writetex(char const * cachefn, texcacheheader *head);
|
||||||
|
extern int32_t texcache_readtexheader(char const * cachefn, texcacheheader *head, int32_t modelp);
|
||||||
extern void texcache_openfiles(void);
|
extern void texcache_openfiles(void);
|
||||||
extern void texcache_setupmemcache(void);
|
extern void texcache_setupmemcache(void);
|
||||||
extern void texcache_checkgarbage(void);
|
extern void texcache_checkgarbage(void);
|
||||||
|
|
|
@ -701,7 +701,9 @@ int32_t mdloadskin(md2model_t *m, int32_t number, int32_t pal, int32_t surf)
|
||||||
|
|
||||||
char hasalpha;
|
char hasalpha;
|
||||||
texcacheheader cachead;
|
texcacheheader cachead;
|
||||||
int32_t gotcache = texcache_readtexheader(fn, picfillen, pal<<8, hicfxmask(pal), &cachead, 1);
|
char texcacheid[BMAX_PATH];
|
||||||
|
texcache_calcid(texcacheid, fn, picfillen, pal<<8, hicfxmask(pal));
|
||||||
|
int32_t gotcache = texcache_readtexheader(texcacheid, &cachead, 1);
|
||||||
vec2_t siz = { 0, 0 }, tsiz = { 0, 0 };
|
vec2_t siz = { 0, 0 }, tsiz = { 0, 0 };
|
||||||
|
|
||||||
if (gotcache && !texcache_loadskin(&cachead, &doalloc, texidx, &siz))
|
if (gotcache && !texcache_loadskin(&cachead, &doalloc, texidx, &siz))
|
||||||
|
@ -975,7 +977,7 @@ int32_t mdloadskin(md2model_t *m, int32_t number, int32_t pal, int32_t surf)
|
||||||
(sk->flags & (HICR_NODOWNSIZE|HICR_ARTIMMUNITY) ? CACHEAD_NODOWNSIZE : 0);
|
(sk->flags & (HICR_NODOWNSIZE|HICR_ARTIMMUNITY) ? CACHEAD_NODOWNSIZE : 0);
|
||||||
|
|
||||||
/// OSD_Printf("Caching \"%s\"\n",fn);
|
/// OSD_Printf("Caching \"%s\"\n",fn);
|
||||||
texcache_writetex(fn, picfillen, pal<<8, hicfxmask(pal), &cachead);
|
texcache_writetex(texcacheid, &cachead);
|
||||||
|
|
||||||
if (willprint)
|
if (willprint)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1268,7 +1268,9 @@ int32_t gloadtile_hi(int32_t dapic,int32_t dapalnum, int32_t facen, hicreplctyp
|
||||||
|
|
||||||
char hasalpha;
|
char hasalpha;
|
||||||
texcacheheader cachead;
|
texcacheheader cachead;
|
||||||
int32_t gotcache = texcache_readtexheader(fn, picfillen+(dapalnum<<8), dameth, effect, &cachead, 0);
|
char texcacheid[BMAX_PATH];
|
||||||
|
texcache_calcid(texcacheid, fn, picfillen+(dapalnum<<8), DAMETH_NARROW_MASKPROPS(dameth), effect);
|
||||||
|
int32_t gotcache = texcache_readtexheader(texcacheid, &cachead, 0);
|
||||||
vec2_t siz = { 0, 0 }, tsiz = { 0, 0 };
|
vec2_t siz = { 0, 0 }, tsiz = { 0, 0 };
|
||||||
|
|
||||||
if (gotcache && !texcache_loadtile(&cachead, &doalloc, pth))
|
if (gotcache && !texcache_loadtile(&cachead, &doalloc, pth))
|
||||||
|
@ -1531,7 +1533,7 @@ int32_t gloadtile_hi(int32_t dapic,int32_t dapalnum, int32_t facen, hicreplctyp
|
||||||
(hicr->flags & (HICR_NODOWNSIZE|HICR_ARTIMMUNITY) ? CACHEAD_NODOWNSIZE : 0);
|
(hicr->flags & (HICR_NODOWNSIZE|HICR_ARTIMMUNITY) ? CACHEAD_NODOWNSIZE : 0);
|
||||||
|
|
||||||
/// OSD_Printf("Caching \"%s\"\n", fn);
|
/// OSD_Printf("Caching \"%s\"\n", fn);
|
||||||
texcache_writetex(fn, picfillen + (dapalnum << 8), dameth, effect, &cachead);
|
texcache_writetex(texcacheid, &cachead);
|
||||||
|
|
||||||
if (willprint)
|
if (willprint)
|
||||||
{
|
{
|
||||||
|
|
|
@ -433,7 +433,7 @@ int32_t texcache_readdata(void *dest, int32_t len)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char * texcache_calcid(char *cachefn, const char *fn, const int32_t len, const int32_t dameth, const char effect)
|
char const * texcache_calcid(char *cachefn, const char *fn, const int32_t len, const int32_t dameth, const char effect)
|
||||||
{
|
{
|
||||||
// Assert that BMAX_PATH is a multiple of 4 so that struct texcacheid_t
|
// Assert that BMAX_PATH is a multiple of 4 so that struct texcacheid_t
|
||||||
// gets no padding inserted by the compiler.
|
// gets no padding inserted by the compiler.
|
||||||
|
@ -442,15 +442,16 @@ static const char * texcache_calcid(char *cachefn, const char *fn, const int32_t
|
||||||
struct texcacheid_t {
|
struct texcacheid_t {
|
||||||
int32_t len, method;
|
int32_t len, method;
|
||||||
char effect, name[BMAX_PATH+3]; // +3: pad to a multiple of 4
|
char effect, name[BMAX_PATH+3]; // +3: pad to a multiple of 4
|
||||||
} id = { len, DAMETH_NARROW_MASKPROPS(dameth), effect, "" };
|
} id = { len, dameth, effect, "" };
|
||||||
|
|
||||||
Bstrcpy(id.name, fn);
|
Bstrcpy(id.name, fn);
|
||||||
|
|
||||||
while (Bstrlen(id.name) < BMAX_PATH - Bstrlen(fn))
|
size_t const fnlen = Bstrlen(fn);
|
||||||
|
while (Bstrlen(id.name) < BMAX_PATH - fnlen)
|
||||||
Bstrcat(id.name, fn);
|
Bstrcat(id.name, fn);
|
||||||
|
|
||||||
Bsprintf(cachefn, "%08x%08x%08x",
|
Bsprintf(cachefn, "%08x%08x%08x",
|
||||||
XXH32((uint8_t const *)fn, Bstrlen(fn), TEXCACHEMAGIC[3]),
|
XXH32((uint8_t *)id.name, fnlen, TEXCACHEMAGIC[3]),
|
||||||
XXH32((uint8_t *)id.name, Bstrlen(id.name), TEXCACHEMAGIC[3]),
|
XXH32((uint8_t *)id.name, Bstrlen(id.name), TEXCACHEMAGIC[3]),
|
||||||
XXH32((uint8_t *)&id, sizeof(struct texcacheid_t), TEXCACHEMAGIC[3]));
|
XXH32((uint8_t *)&id, sizeof(struct texcacheid_t), TEXCACHEMAGIC[3]));
|
||||||
|
|
||||||
|
@ -460,16 +461,14 @@ static const char * texcache_calcid(char *cachefn, const char *fn, const int32_t
|
||||||
#define READTEXHEADER_FAILURE(x) { err = x; goto failure; }
|
#define READTEXHEADER_FAILURE(x) { err = x; goto failure; }
|
||||||
|
|
||||||
// returns 1 on success
|
// returns 1 on success
|
||||||
int32_t texcache_readtexheader(const char *fn, int32_t len, int32_t dameth, char effect,
|
int32_t texcache_readtexheader(char const * const cachefn, texcacheheader *head, int32_t modelp)
|
||||||
texcacheheader *head, int32_t modelp)
|
|
||||||
{
|
{
|
||||||
int32_t i, err = 0;
|
int32_t i, err = 0;
|
||||||
char cachefn[BMAX_PATH];
|
|
||||||
|
|
||||||
if (!texcache_enabled())
|
if (!texcache_enabled())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
i = hash_find(&texcache.hashes, texcache_calcid(cachefn, fn, len, dameth, effect));
|
i = hash_find(&texcache.hashes, cachefn);
|
||||||
|
|
||||||
if (i < 0 || !texcache.iptrs[i])
|
if (i < 0 || !texcache.iptrs[i])
|
||||||
return 0; // didn't find it
|
return 0; // didn't find it
|
||||||
|
@ -528,9 +527,8 @@ failure:
|
||||||
#undef READTEXHEADER_FAILURE
|
#undef READTEXHEADER_FAILURE
|
||||||
#define WRITEX_FAIL_ON_ERROR() if (bglGetError() != GL_NO_ERROR) goto failure
|
#define WRITEX_FAIL_ON_ERROR() if (bglGetError() != GL_NO_ERROR) goto failure
|
||||||
|
|
||||||
void texcache_writetex(const char *fn, int32_t len, int32_t dameth, char effect, texcacheheader *head)
|
void texcache_writetex(char const * const cachefn, texcacheheader *head)
|
||||||
{
|
{
|
||||||
char cachefn[BMAX_PATH];
|
|
||||||
char *pic = NULL, *packbuf = NULL;
|
char *pic = NULL, *packbuf = NULL;
|
||||||
void *midbuf = NULL;
|
void *midbuf = NULL;
|
||||||
uint32_t alloclen=0;
|
uint32_t alloclen=0;
|
||||||
|
@ -631,7 +629,7 @@ void texcache_writetex(const char *fn, int32_t len, int32_t dameth, char effect,
|
||||||
|
|
||||||
{
|
{
|
||||||
texcacheindex *t;
|
texcacheindex *t;
|
||||||
int32_t i = hash_find(&texcache.hashes, texcache_calcid(cachefn, fn, len, dameth, effect));
|
int32_t i = hash_find(&texcache.hashes, cachefn);
|
||||||
if (i > -1)
|
if (i > -1)
|
||||||
{
|
{
|
||||||
// update an existing entry
|
// update an existing entry
|
||||||
|
|
Loading…
Reference in a new issue