mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-11 07:11:39 +00:00
lower memory use for tilefromtexture by way of lzf compression, untested
git-svn-id: https://svn.eduke32.com/eduke32@1541 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
2c9aeac2d5
commit
7199818841
3 changed files with 28 additions and 23 deletions
|
@ -11,6 +11,7 @@
|
||||||
#include "scriptfile.h"
|
#include "scriptfile.h"
|
||||||
#include "cache1d.h"
|
#include "cache1d.h"
|
||||||
#include "kplib.h"
|
#include "kplib.h"
|
||||||
|
#include "fastlz.h"
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -282,7 +283,7 @@ static int32_t getatoken(scriptfile *sf, tokenlist *tl, int32_t ntokens)
|
||||||
static int32_t lastmodelid = -1, lastvoxid = -1, modelskin = -1, lastmodelskin = -1, seenframe = 0;
|
static int32_t lastmodelid = -1, lastvoxid = -1, modelskin = -1, lastmodelskin = -1, seenframe = 0;
|
||||||
extern int32_t nextvoxid;
|
extern int32_t nextvoxid;
|
||||||
|
|
||||||
extern char faketile[MAXTILES];
|
extern int32_t faketilesiz[MAXTILES];
|
||||||
extern char *faketiledata[MAXTILES];
|
extern char *faketiledata[MAXTILES];
|
||||||
|
|
||||||
#if defined(POLYMOST) && defined(USE_OPENGL)
|
#if defined(POLYMOST) && defined(USE_OPENGL)
|
||||||
|
@ -593,7 +594,7 @@ static int32_t defsparser(scriptfile *script)
|
||||||
}
|
}
|
||||||
case T_TILEFROMTEXTURE:
|
case T_TILEFROMTEXTURE:
|
||||||
{
|
{
|
||||||
char *texturetokptr = script->ltextptr, *textureend, *fn, *tfn = NULL;
|
char *texturetokptr = script->ltextptr, *textureend, *fn, *tfn = NULL, *ftd = NULL;
|
||||||
int32_t tile=-1, token, i;
|
int32_t tile=-1, token, i;
|
||||||
int32_t alphacut = 255;
|
int32_t alphacut = 255;
|
||||||
int32_t xoffset = 0, yoffset = 0;
|
int32_t xoffset = 0, yoffset = 0;
|
||||||
|
@ -662,6 +663,7 @@ static int32_t defsparser(scriptfile *script)
|
||||||
|
|
||||||
// initprintf("got bpl %d xsiz %d ysiz %d\n",bpl,xsiz,ysiz);
|
// initprintf("got bpl %d xsiz %d ysiz %d\n",bpl,xsiz,ysiz);
|
||||||
|
|
||||||
|
ftd = Bmalloc(xsiz*ysiz);
|
||||||
faketiledata[tile] = Bmalloc(xsiz*ysiz);
|
faketiledata[tile] = Bmalloc(xsiz*ysiz);
|
||||||
|
|
||||||
for (i=xsiz-1; i>=0; i--)
|
for (i=xsiz-1; i>=0; i--)
|
||||||
|
@ -669,8 +671,8 @@ static int32_t defsparser(scriptfile *script)
|
||||||
for (j=ysiz-1; j>=0; j--)
|
for (j=ysiz-1; j>=0; j--)
|
||||||
{
|
{
|
||||||
col = (palette_t *)&picptr[j*xsiz+i];
|
col = (palette_t *)&picptr[j*xsiz+i];
|
||||||
if (col->f < alphacut) { faketiledata[tile][i*ysiz+j] = 255; continue; }
|
if (col->f < alphacut) { ftd[i*ysiz+j] = 255; continue; }
|
||||||
faketiledata[tile][i*ysiz+j] = getclosestcol(col->b>>2,col->g>>2,col->r>>2);
|
ftd[i*ysiz+j] = getclosestcol(col->b>>2,col->g>>2,col->r>>2);
|
||||||
}
|
}
|
||||||
// initprintf(" %d %d %d %d\n",col->r,col->g,col->b,col->f);
|
// initprintf(" %d %d %d %d\n",col->r,col->g,col->b,col->f);
|
||||||
}
|
}
|
||||||
|
@ -679,7 +681,8 @@ static int32_t defsparser(scriptfile *script)
|
||||||
{
|
{
|
||||||
tilesizx[tile] = xsiz;
|
tilesizx[tile] = xsiz;
|
||||||
tilesizy[tile] = ysiz;
|
tilesizy[tile] = ysiz;
|
||||||
faketile[tile] = 2;
|
|
||||||
|
faketilesiz[tile] = fastlz_compress(ftd, xsiz*ysiz, faketiledata[tile]);
|
||||||
|
|
||||||
xoffset = clamp(xoffset, -128, 127);
|
xoffset = clamp(xoffset, -128, 127);
|
||||||
picanm[tile] = (picanm[tile]&0xffff00ff)+((xoffset&255)<<8);
|
picanm[tile] = (picanm[tile]&0xffff00ff)+((xoffset&255)<<8);
|
||||||
|
@ -693,6 +696,7 @@ static int32_t defsparser(scriptfile *script)
|
||||||
}
|
}
|
||||||
|
|
||||||
Bfree(picptr);
|
Bfree(picptr);
|
||||||
|
Bfree(ftd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -701,7 +705,7 @@ static int32_t defsparser(scriptfile *script)
|
||||||
int32_t tile, xsiz, ysiz, j, i;
|
int32_t tile, xsiz, ysiz, j, i;
|
||||||
int32_t *picptr = NULL;
|
int32_t *picptr = NULL;
|
||||||
int32_t bpl;
|
int32_t bpl;
|
||||||
char *fn;
|
char *fn, *ftd = NULL;
|
||||||
palette_t *col;
|
palette_t *col;
|
||||||
|
|
||||||
if (scriptfile_getsymbol(script,&tile)) break;
|
if (scriptfile_getsymbol(script,&tile)) break;
|
||||||
|
@ -711,6 +715,7 @@ static int32_t defsparser(scriptfile *script)
|
||||||
|
|
||||||
// initprintf("got bpl %d xsiz %d ysiz %d\n",bpl,xsiz,ysiz);
|
// initprintf("got bpl %d xsiz %d ysiz %d\n",bpl,xsiz,ysiz);
|
||||||
|
|
||||||
|
ftd = Bmalloc(xsiz*ysiz);
|
||||||
faketiledata[tile] = Bmalloc(xsiz*ysiz);
|
faketiledata[tile] = Bmalloc(xsiz*ysiz);
|
||||||
|
|
||||||
for (i=xsiz-1; i>=0; i--)
|
for (i=xsiz-1; i>=0; i--)
|
||||||
|
@ -718,8 +723,8 @@ static int32_t defsparser(scriptfile *script)
|
||||||
for (j=ysiz-1; j>=0; j--)
|
for (j=ysiz-1; j>=0; j--)
|
||||||
{
|
{
|
||||||
col = (palette_t *)&picptr[j*xsiz+i];
|
col = (palette_t *)&picptr[j*xsiz+i];
|
||||||
if (col->f != 255) { faketiledata[tile][i*ysiz+j] = 255; continue; }
|
if (col->f != 255) { ftd[i*ysiz+j] = 255; continue; }
|
||||||
faketiledata[tile][i*ysiz+j] = getclosestcol(col->b>>2,col->g>>2,col->r>>2);
|
ftd[i*ysiz+j] = getclosestcol(col->b>>2,col->g>>2,col->r>>2);
|
||||||
}
|
}
|
||||||
// initprintf(" %d %d %d %d\n",col->r,col->g,col->b,col->f);
|
// initprintf(" %d %d %d %d\n",col->r,col->g,col->b,col->f);
|
||||||
}
|
}
|
||||||
|
@ -728,7 +733,7 @@ static int32_t defsparser(scriptfile *script)
|
||||||
{
|
{
|
||||||
tilesizx[tile] = xsiz;
|
tilesizx[tile] = xsiz;
|
||||||
tilesizy[tile] = ysiz;
|
tilesizy[tile] = ysiz;
|
||||||
faketile[tile] = 2;
|
faketilesiz[tile] = fastlz_compress(ftd, xsiz*ysiz, faketiledata[tile]);
|
||||||
picanm[tile] = 0;
|
picanm[tile] = 0;
|
||||||
|
|
||||||
j = 15; while ((j > 1) && (pow2long[j] > xsiz)) j--;
|
j = 15; while ((j > 1) && (pow2long[j] > xsiz)) j--;
|
||||||
|
@ -738,12 +743,12 @@ static int32_t defsparser(scriptfile *script)
|
||||||
}
|
}
|
||||||
|
|
||||||
Bfree(picptr);
|
Bfree(picptr);
|
||||||
|
Bfree(ftd);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case T_DUMMYTILE:
|
case T_DUMMYTILE:
|
||||||
{
|
{
|
||||||
int32_t tile, xsiz, ysiz, j;
|
int32_t tile, xsiz, ysiz, j;
|
||||||
extern char faketile[MAXTILES];
|
|
||||||
|
|
||||||
if (scriptfile_getsymbol(script,&tile)) break;
|
if (scriptfile_getsymbol(script,&tile)) break;
|
||||||
if (scriptfile_getsymbol(script,&xsiz)) break;
|
if (scriptfile_getsymbol(script,&xsiz)) break;
|
||||||
|
@ -753,7 +758,7 @@ static int32_t defsparser(scriptfile *script)
|
||||||
{
|
{
|
||||||
tilesizx[tile] = xsiz;
|
tilesizx[tile] = xsiz;
|
||||||
tilesizy[tile] = ysiz;
|
tilesizy[tile] = ysiz;
|
||||||
faketile[tile] = 1;
|
faketilesiz[tile] = -1;
|
||||||
picanm[tile] = 0;
|
picanm[tile] = 0;
|
||||||
|
|
||||||
j = 15; while ((j > 1) && (pow2long[j] > xsiz)) j--;
|
j = 15; while ((j > 1) && (pow2long[j] > xsiz)) j--;
|
||||||
|
@ -767,7 +772,6 @@ static int32_t defsparser(scriptfile *script)
|
||||||
case T_DUMMYTILERANGE:
|
case T_DUMMYTILERANGE:
|
||||||
{
|
{
|
||||||
int32_t tile1,tile2,xsiz,ysiz,i,j;
|
int32_t tile1,tile2,xsiz,ysiz,i,j;
|
||||||
extern char faketile[MAXTILES];
|
|
||||||
|
|
||||||
if (scriptfile_getnumber(script,&tile1)) break;
|
if (scriptfile_getnumber(script,&tile1)) break;
|
||||||
if (scriptfile_getnumber(script,&tile2)) break;
|
if (scriptfile_getnumber(script,&tile2)) break;
|
||||||
|
@ -790,7 +794,7 @@ static int32_t defsparser(scriptfile *script)
|
||||||
{
|
{
|
||||||
tilesizx[i] = xsiz;
|
tilesizx[i] = xsiz;
|
||||||
tilesizy[i] = ysiz;
|
tilesizy[i] = ysiz;
|
||||||
faketile[i] = 1;
|
faketilesiz[i] = -1;
|
||||||
picanm[i] = 0;
|
picanm[i] = 0;
|
||||||
|
|
||||||
j = 15; while ((j > 1) && (pow2long[j] > xsiz)) j--;
|
j = 15; while ((j > 1) && (pow2long[j] > xsiz)) j--;
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "a.h"
|
#include "a.h"
|
||||||
#include "osd.h"
|
#include "osd.h"
|
||||||
#include "crc32.h"
|
#include "crc32.h"
|
||||||
|
#include "fastlz.h"
|
||||||
|
|
||||||
#include "baselayer.h"
|
#include "baselayer.h"
|
||||||
#include "scriptfile.h"
|
#include "scriptfile.h"
|
||||||
|
@ -7925,7 +7926,7 @@ int32_t loadpics(char *filename, int32_t askedsize)
|
||||||
// loadtile
|
// loadtile
|
||||||
//
|
//
|
||||||
char cachedebug = 0;
|
char cachedebug = 0;
|
||||||
char faketile[MAXTILES];
|
int32_t faketilesiz[MAXTILES];
|
||||||
char *faketiledata[MAXTILES];
|
char *faketiledata[MAXTILES];
|
||||||
int32_t h_xsize[MAXTILES], h_ysize[MAXTILES];
|
int32_t h_xsize[MAXTILES], h_ysize[MAXTILES];
|
||||||
int8_t h_xoffs[MAXTILES], h_yoffs[MAXTILES];
|
int8_t h_xoffs[MAXTILES], h_yoffs[MAXTILES];
|
||||||
|
@ -7961,12 +7962,12 @@ void loadtile(int16_t tilenume)
|
||||||
allocache(&waloff[tilenume],dasiz,&walock[tilenume]);
|
allocache(&waloff[tilenume],dasiz,&walock[tilenume]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (faketile[tilenume])
|
if (faketilesiz[tilenume])
|
||||||
{
|
{
|
||||||
if (faketile[tilenume] == 1 || (faketile[tilenume] == 2 && faketiledata[tilenume] == NULL))
|
if (faketilesiz[tilenume] == -1)
|
||||||
Bmemset((char *)waloff[tilenume],0,dasiz);
|
Bmemset((char *)waloff[tilenume],0,dasiz);
|
||||||
else if (faketile[tilenume] == 2)
|
else if (faketiledata[tilenume] != NULL)
|
||||||
Bmemcpy((char *)waloff[tilenume],faketiledata[tilenume],dasiz);
|
fastlz_decompress(faketiledata[tilenume], faketilesiz[tilenume], (char *)waloff[tilenume], dasiz);
|
||||||
faketimerhandler();
|
faketimerhandler();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,12 +118,12 @@ void GAME_onshowosd(int32_t shown)
|
||||||
// most of this is copied from my dummytile stuff in defs.c
|
// most of this is copied from my dummytile stuff in defs.c
|
||||||
if (!tilesizx[BGTILE] || !tilesizy[BGTILE])
|
if (!tilesizx[BGTILE] || !tilesizy[BGTILE])
|
||||||
{
|
{
|
||||||
extern char faketile[MAXTILES];
|
extern int32_t faketilesiz[MAXTILES];
|
||||||
int32_t j;
|
int32_t j;
|
||||||
|
|
||||||
tilesizx[BGTILE] = BGTILE_SIZEX;
|
tilesizx[BGTILE] = BGTILE_SIZEX;
|
||||||
tilesizy[BGTILE] = BGTILE_SIZEY;
|
tilesizy[BGTILE] = BGTILE_SIZEY;
|
||||||
faketile[BGTILE] = 1;
|
faketilesiz[BGTILE] = -1;
|
||||||
picanm[BGTILE] = 0;
|
picanm[BGTILE] = 0;
|
||||||
|
|
||||||
j = 15; while ((j > 1) && (pow2long[j] > BGTILE_SIZEX)) j--;
|
j = 15; while ((j > 1) && (pow2long[j] > BGTILE_SIZEX)) j--;
|
||||||
|
@ -133,8 +133,8 @@ void GAME_onshowosd(int32_t shown)
|
||||||
}
|
}
|
||||||
|
|
||||||
G_UpdateScreenArea();
|
G_UpdateScreenArea();
|
||||||
if (numplayers == 1)
|
|
||||||
if ((shown && !ud.pause_on) || (!shown && ud.pause_on))
|
if (numplayers == 1 && ((shown && !ud.pause_on) || (!shown && ud.pause_on)))
|
||||||
KB_KeyDown[sc_Pause] = 1;
|
KB_KeyDown[sc_Pause] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue