From 7dd054069f6a0a050ce088ce519e9db9e83cfd2e Mon Sep 17 00:00:00 2001 From: hendricks266 Date: Mon, 7 Mar 2016 11:21:55 +0000 Subject: [PATCH] Polymost: Add HICR_ARTIMMUNITY and DAMETH_ARTIMMUNITY, which currently function identically to NOTEXCOMPRESS and NODOWNSIZE combined, and are only used when: 1. Using an ART tile 2. Using a hightile defined through the tilefromtexture "texture" subtoken 3. Using a hightile that, if downsized, will be smaller than the ART tile for that tilenum (tenuous) git-svn-id: https://svn.eduke32.com/eduke32@5647 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/build/include/hightile.h | 1 + polymer/eduke32/build/include/polymost.h | 5 +++++ polymer/eduke32/build/src/defs.c | 4 ++-- polymer/eduke32/build/src/mdsprite.c | 7 ++++--- polymer/eduke32/build/src/polymost.c | 20 +++++++++++--------- polymer/eduke32/build/src/texcache.c | 2 +- 6 files changed, 24 insertions(+), 15 deletions(-) diff --git a/polymer/eduke32/build/include/hightile.h b/polymer/eduke32/build/include/hightile.h index 4ffb8f1af..917ac58ca 100644 --- a/polymer/eduke32/build/include/hightile.h +++ b/polymer/eduke32/build/include/hightile.h @@ -78,6 +78,7 @@ enum HICR_FORCEFILTER = 2, HICR_NODOWNSIZE = 16, + HICR_ARTIMMUNITY = 32, }; // hictinting[].f / gloadtile_hi() and mdloadskin() arg bits diff --git a/polymer/eduke32/build/include/polymost.h b/polymer/eduke32/build/include/polymost.h index a55db503b..c8cd4f5ea 100644 --- a/polymer/eduke32/build/include/polymost.h +++ b/polymer/eduke32/build/include/polymost.h @@ -160,6 +160,9 @@ enum { DAMETH_NOTEXCOMPRESS = 32768, DAMETH_HASALPHA = 65536, DAMETH_ONEBITALPHA = 131072, + DAMETH_ARTIMMUNITY = 262144, + + DAMETH_UPLOADTEXTURE_MASK = DAMETH_HI|DAMETH_NODOWNSIZE|DAMETH_NOFIX|DAMETH_NOTEXCOMPRESS|DAMETH_HASALPHA|DAMETH_ONEBITALPHA|DAMETH_ARTIMMUNITY, }; #define DAMETH_NARROW_MASKPROPS(dameth) (((dameth)&(~DAMETH_TRANS1))|(((dameth)&DAMETH_TRANS1)>>1)) @@ -170,6 +173,8 @@ EDUKE32_STATIC_ASSERT(DAMETH_NARROW_MASKPROPS(DAMETH_CLAMPED) == DAMETH_CLAMPED) EDUKE32_STATIC_ASSERT(TO_DAMETH_NODOWNSIZE(HICR_NODOWNSIZE) == DAMETH_NODOWNSIZE); #define TO_DAMETH_NOTEXCOMPRESS(hicr_flags) (((hicr_flags)&HICR_NOTEXCOMPRESS)<<15) EDUKE32_STATIC_ASSERT(TO_DAMETH_NOTEXCOMPRESS(HICR_NOTEXCOMPRESS) == DAMETH_NOTEXCOMPRESS); +#define TO_DAMETH_ARTIMMUNITY(hicr_flags) (((hicr_flags)&HICR_ARTIMMUNITY)<<13) +EDUKE32_STATIC_ASSERT(TO_DAMETH_ARTIMMUNITY(HICR_ARTIMMUNITY) == DAMETH_ARTIMMUNITY); // Do we want a NPOT-y-as-classic texture for this and ? static inline int polymost_want_npotytex(int32_t dameth, int32_t ysiz) diff --git a/polymer/eduke32/build/src/defs.c b/polymer/eduke32/build/src/defs.c index 2bb940ad0..a93ed5393 100644 --- a/polymer/eduke32/build/src/defs.c +++ b/polymer/eduke32/build/src/defs.c @@ -279,7 +279,7 @@ static int32_t Defs_ImportTileFromTexture(char const * const fn, int32_t const t #ifdef USE_OPENGL if (istexture) - hicsetsubsttex(tile, 0, fn, (float)(255-alphacut) * (1.f/255.f), 1.0f, 1.0f, 1.0f, 1.0f, HICR_NOTEXCOMPRESS|HICR_NODOWNSIZE); + hicsetsubsttex(tile, 0, fn, (float)(255-alphacut) * (1.f/255.f), 1.0f, 1.0f, 1.0f, 1.0f, HICR_ARTIMMUNITY); #endif return 1; @@ -299,7 +299,7 @@ static int32_t Defs_ImportTileFromTexture(char const * const fn, int32_t const t #ifdef USE_OPENGL if (istexture) - hicsetsubsttex(tile, 0, fn, (float)(255-alphacut) * (1.f/255.f), 1.0f, 1.0f, 1.0, 1.0, HICR_NOTEXCOMPRESS|HICR_NODOWNSIZE); + hicsetsubsttex(tile, 0, fn, (float)(255-alphacut) * (1.f/255.f), 1.0f, 1.0f, 1.0, 1.0, HICR_ARTIMMUNITY); #else UNREFERENCED_PARAMETER(istexture); #endif diff --git a/polymer/eduke32/build/src/mdsprite.c b/polymer/eduke32/build/src/mdsprite.c index b64d2587a..a0757cd04 100644 --- a/polymer/eduke32/build/src/mdsprite.c +++ b/polymer/eduke32/build/src/mdsprite.c @@ -906,6 +906,7 @@ int32_t mdloadskin(md2model_t *m, int32_t number, int32_t pal, int32_t surf) DAMETH_HI | DAMETH_MASK | TO_DAMETH_NODOWNSIZE(sk->flags) | TO_DAMETH_NOTEXCOMPRESS(sk->flags) | + TO_DAMETH_ARTIMMUNITY(sk->flags) | (hasalpha ? DAMETH_HASALPHA : 0)); Bfree(pic); @@ -959,17 +960,17 @@ int32_t mdloadskin(md2model_t *m, int32_t number, int32_t pal, int32_t surf) bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); if (glinfo.texcompr && glusetexcompr && glusetexcache) - if (!gotcache && !(sk->flags & HICR_NOTEXCOMPRESS)) + if (!gotcache && !(sk->flags & HICR_NOTEXCOMPRESS) && !(sk->flags & HICR_ARTIMMUNITY)) { const int32_t nonpow2 = check_nonpow2(siz.x) || check_nonpow2(siz.y); // save off the compressed version - cachead.quality = (sk->flags & HICR_NODOWNSIZE) ? 0 : r_downsize; + cachead.quality = (sk->flags & (HICR_NODOWNSIZE|HICR_ARTIMMUNITY)) ? 0 : r_downsize; cachead.xdim = tsiz.x>>cachead.quality; cachead.ydim = tsiz.y>>cachead.quality; cachead.flags = nonpow2*CACHEAD_NONPOW2 | (hasalpha ? CACHEAD_HASALPHA : 0) | - (sk->flags & HICR_NODOWNSIZE ? CACHEAD_NODOWNSIZE : 0); + (sk->flags & (HICR_NODOWNSIZE|HICR_ARTIMMUNITY) ? CACHEAD_NODOWNSIZE : 0); /// OSD_Printf("Caching \"%s\"\n",fn); texcache_writetex(fn, picfillen, pal<<8, hicfxmask(pal), &cachead); diff --git a/polymer/eduke32/build/src/polymost.c b/polymer/eduke32/build/src/polymost.c index 6ca318f57..c6269dd5b 100644 --- a/polymer/eduke32/build/src/polymost.c +++ b/polymer/eduke32/build/src/polymost.c @@ -673,13 +673,14 @@ static int32_t polymost_glTexImage2D_error(int32_t * intexfmt, int32_t const **i void uploadtexture(int32_t doalloc, vec2_t siz, int32_t texfmt, coltype *pic, vec2_t tsiz, int32_t dameth) { + const int artimmunity = !!(dameth & DAMETH_ARTIMMUNITY); const int hi = !!(dameth & DAMETH_HI); - const int nodownsize = !!(dameth & DAMETH_NODOWNSIZE); + const int nodownsize = !!(dameth & DAMETH_NODOWNSIZE) || artimmunity; const int nomiptransfix = !!(dameth & DAMETH_NOFIX); const int hasalpha = !!(dameth & DAMETH_HASALPHA) && (dameth & DAMETH_MASKPROPS) != DAMETH_NOMASK; #if !defined EDUKE32_GLES - const int texcompress_ok = !(dameth & DAMETH_NOTEXCOMPRESS); + const int texcompress_ok = !(dameth & DAMETH_NOTEXCOMPRESS) && !artimmunity; int32_t intexfmt; if (glinfo.texcompr && glusetexcompr && texcompress_ok) @@ -693,7 +694,7 @@ void uploadtexture(int32_t doalloc, vec2_t siz, int32_t texfmt, int32_t intexfmt = **intexfmt_master; #endif - dameth &= ~(DAMETH_HI|DAMETH_NODOWNSIZE|DAMETH_NOFIX|DAMETH_NOTEXCOMPRESS|DAMETH_HASALPHA|DAMETH_ONEBITALPHA); + dameth &= ~DAMETH_UPLOADTEXTURE_MASK; if (gltexmaxsize <= 0) { @@ -1002,7 +1003,7 @@ void gloadtile_art(int32_t dapic, int32_t dapal, int32_t tintpalnum, int32_t das } uploadtexture(doalloc, siz, GL_RGBA, pic, tsiz, - dameth | DAMETH_NOFIX | DAMETH_NOTEXCOMPRESS | + dameth | DAMETH_ARTIMMUNITY | (hasalpha ? (DAMETH_HASALPHA|DAMETH_ONEBITALPHA) : 0)); Bfree(pic); @@ -1267,7 +1268,7 @@ int32_t gloadtile_hi(int32_t dapic,int32_t dapalnum, int32_t facen, hicreplctyp // end CODEDUP if (tsiz.x>>r_downsize <= tilesiz[dapic].x || tsiz.y>>r_downsize <= tilesiz[dapic].y) - hicr->flags |= (HICR_NODOWNSIZE + HICR_NOTEXCOMPRESS); + hicr->flags |= HICR_ARTIMMUNITY; if ((doalloc&3)==1) bglGenTextures(1, &pth->glpic); //# of textures (make OpenGL allocate structure) @@ -1281,6 +1282,7 @@ int32_t gloadtile_hi(int32_t dapic,int32_t dapalnum, int32_t facen, hicreplctyp dameth | DAMETH_HI | DAMETH_NOFIX | TO_DAMETH_NODOWNSIZE(hicr->flags) | TO_DAMETH_NOTEXCOMPRESS(hicr->flags) | + TO_DAMETH_ARTIMMUNITY(hicr->flags) | (hasalpha ? DAMETH_HASALPHA : 0)); Bfree(pic); @@ -1301,7 +1303,7 @@ int32_t gloadtile_hi(int32_t dapic,int32_t dapalnum, int32_t facen, hicreplctyp polymost_setuptexture(dameth, hicr->flags & HICR_FORCEFILTER ? TEXFILTER_ON : -1); if (tsiz.x>>r_downsize <= tilesiz[dapic].x || tsiz.y>>r_downsize <= tilesiz[dapic].y) - hicr->flags |= HICR_NODOWNSIZE | HICR_NOTEXCOMPRESS; + hicr->flags |= HICR_ARTIMMUNITY; pth->picnum = dapic; pth->effects = effect; @@ -1312,18 +1314,18 @@ int32_t gloadtile_hi(int32_t dapic,int32_t dapalnum, int32_t facen, hicreplctyp pth->skyface = facen; pth->hicr = hicr; - if (!gotcache && glinfo.texcompr && glusetexcompr && glusetexcache && !(hicr->flags & HICR_NOTEXCOMPRESS)) + if (!gotcache && glinfo.texcompr && glusetexcompr && glusetexcache && !(hicr->flags & HICR_NOTEXCOMPRESS) && !(hicr->flags & HICR_ARTIMMUNITY)) { const int32_t nonpow2 = check_nonpow2(siz.x) || check_nonpow2(siz.y); // save off the compressed version - cachead.quality = (hicr->flags & HICR_NODOWNSIZE) ? 0 : r_downsize; + cachead.quality = (hicr->flags & (HICR_NODOWNSIZE|HICR_ARTIMMUNITY)) ? 0 : r_downsize; cachead.xdim = tsiz.x >> cachead.quality; cachead.ydim = tsiz.y >> cachead.quality; // handle nodownsize: cachead.flags = nonpow2 * CACHEAD_NONPOW2 | (hasalpha ? CACHEAD_HASALPHA : 0) | - (hicr->flags & HICR_NODOWNSIZE ? CACHEAD_NODOWNSIZE : 0); + (hicr->flags & (HICR_NODOWNSIZE|HICR_ARTIMMUNITY) ? CACHEAD_NODOWNSIZE : 0); /// OSD_Printf("Caching \"%s\"\n", fn); texcache_writetex(fn, picfillen + (dapalnum << 8), dameth, effect, &cachead); diff --git a/polymer/eduke32/build/src/texcache.c b/polymer/eduke32/build/src/texcache.c index 0e2edb7ac..be12e252a 100644 --- a/polymer/eduke32/build/src/texcache.c +++ b/polymer/eduke32/build/src/texcache.c @@ -507,7 +507,7 @@ int32_t texcache_readtexheader(const char *fn, int32_t len, int32_t dameth, char if (!(head->flags & CACHEAD_COMPRESSED) && glusetexcache == 2) READTEXHEADER_FAILURE(4); - // handle nocompress + // handle nodownsize if (!modelp && !(head->flags & CACHEAD_NODOWNSIZE) && head->quality != r_downsize) return 0;