- first batch of adjustments to the new tile management.

- consolidated Polymost precaching and removed precaching for static tiles because they now are always loaded.
- removed cache configurability. On modern systems this is relatively pointless - allocating 50 or 100 MB is a non-issue - and the cache is due for replacement anyway.
This commit is contained in:
Christoph Oelckers 2019-10-15 00:54:14 +02:00
parent 4b6f28e7c8
commit 0e165e40a3
37 changed files with 84 additions and 290 deletions

View file

@ -390,49 +390,6 @@ void PreloadTiles(void)
G_HandleAsync(); G_HandleAsync();
} }
#ifdef USE_OPENGL
void PrecacheExtraTextureMaps(int nTile)
{
// PRECACHE
if (useprecache && bpp > 8)
{
for (int type = 0; type < 2 && !KB_KeyPressed(sc_Space); type++)
{
if (TestBitString(precachehightile[type], nTile))
{
for (int k = 0; k < MAXPALOOKUPS - RESERVEDPALS && !KB_KeyPressed(sc_Space); k++)
{
// this is the CROSSHAIR_PAL, see screens.cpp
if (k == MAXPALOOKUPS - RESERVEDPALS - 1)
break;
#ifdef POLYMER
if (videoGetRenderMode() != REND_POLYMER || !polymer_havehighpalookup(0, k))
#endif
polymost_precache(nTile, k, type);
}
#ifdef USE_GLEXT
if (r_detailmapping)
polymost_precache(nTile, DETAILPAL, type);
if (r_glowmapping)
polymost_precache(nTile, GLOWPAL, type);
#endif
#ifdef POLYMER
if (videoGetRenderMode() == REND_POLYMER)
{
if (pr_specularmapping)
polymost_precache(nTile, SPECULARPAL, type);
if (pr_normalmapping)
polymost_precache(nTile, NORMALPAL, type);
}
#endif
}
}
}
}
#endif
void PreloadCache(void) void PreloadCache(void)
{ {
@ -454,10 +411,12 @@ void PreloadCache(void)
{ {
if (TestBitString(gotpic, i)) if (TestBitString(gotpic, i))
{ {
tileCache(i); // For the hardware renderer precaching the raw pixel data is pointless.
if (videoGetRenderMode() < REND_POLYMOST)
tileLoad(i);
#ifdef USE_OPENGL #ifdef USE_OPENGL
PrecacheExtraTextureMaps(i); if (useprecache) PrecacheHardwareTextures(i);
#endif #endif
MUSIC_Update(); MUSIC_Update();
@ -1459,9 +1418,7 @@ void ParseOptions(void)
{ {
if (OptArgc < 1) if (OptArgc < 1)
ThrowError("Missing argument"); ThrowError("Missing argument");
uint32_t j = strtoul(OptArgv[0], NULL, 0); // No longer supported.
MAXCACHE1DSIZE = j<<10;
initprintf("Cache size: %dkB\n", j);
break; break;
} }
case 35: case 35:
@ -2168,9 +2125,6 @@ static int parsedefinitions_game(scriptfile *pScript, int firstPass)
if (scriptfile_getnumber(pScript, &cacheSize) || !firstPass) if (scriptfile_getnumber(pScript, &cacheSize) || !firstPass)
break; break;
if (cacheSize > 0)
MAXCACHE1DSIZE = cacheSize << 10;
} }
break; break;
case T_INCLUDE: case T_INCLUDE:
@ -2596,39 +2550,13 @@ void ScanINIFiles(void)
} }
} }
bool LoadArtFile(const char *pzFile)
{
int hFile = kopen4loadfrommod(pzFile, 0);
if (hFile == -1)
{
initprintf("Can't open extra art file:\"%s\"\n", pzFile);
return false;
}
artheader_t artheader;
int nStatus = artReadHeader(hFile, pzFile, &artheader);
if (nStatus != 0)
{
kclose(hFile);
initprintf("Error reading extra art file:\"%s\"\n", pzFile);
return false;
}
for (int i = artheader.tilestart; i <= artheader.tileend; i++)
tileDelete(i);
artReadManifest(hFile, &artheader);
artPreloadFile(hFile, &artheader);
for (int i = artheader.tilestart; i <= artheader.tileend; i++)
tileUpdatePicSiz(i);
kclose(hFile);
return true;
}
void LoadExtraArts(void) void LoadExtraArts(void)
{ {
if (!pINISelected->pDescription) if (!pINISelected->pDescription)
return; return;
for (int i = 0; i < pINISelected->pDescription->nArts; i++) for (int i = 0; i < pINISelected->pDescription->nArts; i++)
{ {
LoadArtFile(pINISelected->pDescription->pzArts[i]); TileFiles.LoadArtFile(pINISelected->pDescription->pzArts[i]);
} }
} }

View file

@ -78,7 +78,6 @@ void PreloadCache(void);
void StartLevel(GAMEOPTIONS *gameOptions); void StartLevel(GAMEOPTIONS *gameOptions);
void ProcessFrame(void); void ProcessFrame(void);
void ScanINIFiles(void); void ScanINIFiles(void);
bool LoadArtFile(const char *pzFile);
void LoadExtraArts(void); void LoadExtraArts(void);
bool DemoRecordStatus(void); bool DemoRecordStatus(void);
bool VanillaMode(void); bool VanillaMode(void);

View file

@ -723,21 +723,21 @@ inline int QRandom2(int a1)
template<class T> template<class T>
inline void SetBitString(T *pArray, int nIndex) inline void SetBitString(T *pArray, int nIndex)
{ {
static_assert(sizeof(T) == 1, ""); static_assert(sizeof(T) == 1, "Bit array element too large");
pArray[nIndex>>3] |= 1<<(nIndex&7); pArray[nIndex>>3] |= 1<<(nIndex&7);
} }
template<class T> template<class T>
inline void ClearBitString(T *pArray, int nIndex) inline void ClearBitString(T *pArray, int nIndex)
{ {
static_assert(sizeof(T) == 1, ""); static_assert(sizeof(T) == 1, "Bit array element too large");
pArray[nIndex >> 3] &= ~(1 << (nIndex & 7)); pArray[nIndex >> 3] &= ~(1 << (nIndex & 7));
} }
template<class T> template<class T>
inline char TestBitString(T *pArray, int nIndex) inline char TestBitString(T *pArray, int nIndex)
{ {
static_assert(sizeof(T) == 1, ""); static_assert(sizeof(T) == 1, "Bit array element too large");
return pArray[nIndex>>3] & (1<<(nIndex&7)); return pArray[nIndex>>3] & (1<<(nIndex&7));
} }

View file

@ -724,12 +724,6 @@ int CONFIG_ReadSetup(void)
SCRIPT_GetNumber(scripthandle, "Setup", "ForceSetup", &gSetup.forcesetup); SCRIPT_GetNumber(scripthandle, "Setup", "ForceSetup", &gSetup.forcesetup);
SCRIPT_GetNumber(scripthandle, "Setup", "NoAutoLoad", &gSetup.noautoload); SCRIPT_GetNumber(scripthandle, "Setup", "NoAutoLoad", &gSetup.noautoload);
int32_t cachesize;
SCRIPT_GetNumber(scripthandle, "Setup", "CacheSize", &cachesize);
if (cachesize > MAXCACHE1DSIZE)
MAXCACHE1DSIZE = cachesize;
if (gNoSetup == 0 && g_modDir[0] == '/') if (gNoSetup == 0 && g_modDir[0] == '/')
{ {
struct Bstat st; struct Bstat st;
@ -846,7 +840,6 @@ void CONFIG_WriteSetup(uint32_t flags)
//SCRIPT_PutNumber(scripthandle, "Misc", "Executions", ud.executions, FALSE, FALSE); //SCRIPT_PutNumber(scripthandle, "Misc", "Executions", ud.executions, FALSE, FALSE);
SCRIPT_PutNumber(scripthandle, "Setup", "CacheSize", MAXCACHE1DSIZE, FALSE, FALSE);
SCRIPT_PutNumber(scripthandle, "Setup", "ConfigVersion", BYTEVERSION, FALSE, FALSE); SCRIPT_PutNumber(scripthandle, "Setup", "ConfigVersion", BYTEVERSION, FALSE, FALSE);
SCRIPT_PutNumber(scripthandle, "Setup", "ForceSetup", gSetup.forcesetup, FALSE, FALSE); SCRIPT_PutNumber(scripthandle, "Setup", "ForceSetup", gSetup.forcesetup, FALSE, FALSE);
SCRIPT_PutNumber(scripthandle, "Setup", "NoAutoLoad", gSetup.noautoload, FALSE, FALSE); SCRIPT_PutNumber(scripthandle, "Setup", "NoAutoLoad", gSetup.noautoload, FALSE, FALSE);

View file

@ -68,9 +68,7 @@ void DoFireFrame(void)
memcpy(FrameBuffer+16896+i*128, SeedBuffer[nRand], 128); memcpy(FrameBuffer+16896+i*128, SeedBuffer[nRand], 128);
} }
CellularFrame(FrameBuffer, 128, 132); CellularFrame(FrameBuffer, 128, 132);
tileLoadTile(2342); auto pData = TileFiles.tileMakeWritable(2342);
tileMakeWritable(2342);
auto pData = tileData(2342);
char *pSource = FrameBuffer; char *pSource = FrameBuffer;
int x = fireSize; int x = fireSize;
do do

View file

@ -79,8 +79,6 @@ short voxelIndex[kMaxTiles];
const char *pzBaseFileName = "TILES%03i.ART"; //"TILES%03i.ART"; const char *pzBaseFileName = "TILES%03i.ART"; //"TILES%03i.ART";
int32_t MAXCACHE1DSIZE = (96*1024*1024);
int tileInit(char a1, const char *a2) int tileInit(char a1, const char *a2)
{ {
UNREFERENCED_PARAMETER(a1); UNREFERENCED_PARAMETER(a1);

View file

@ -53,8 +53,6 @@ extern short voxelIndex[kMaxTiles];
extern int nPrecacheCount; extern int nPrecacheCount;
extern char precachehightile[2][(MAXTILES+7)>>3]; extern char precachehightile[2][(MAXTILES+7)>>3];
extern int32_t MAXCACHE1DSIZE;
void qloadvoxel(int32_t nVoxel); void qloadvoxel(int32_t nVoxel);
int tileInit(char a1, const char *a2); int tileInit(char a1, const char *a2);
#ifdef USE_OPENGL #ifdef USE_OPENGL

View file

@ -3688,13 +3688,8 @@ void viewSetCrosshairColor(int32_t r, int32_t g, int32_t b)
CrosshairColors.g = g; CrosshairColors.g = g;
CrosshairColors.b = b; CrosshairColors.b = b;
tileMakeWritable(kCrosshairTile); auto ptr = TileFiles.tileMakeWritable(kCrosshairTile);
tileLoad(kCrosshairTile); if (!ptr) return;
if (!tilePtr(kCrosshairTile))
return;
auto ptr = tileData(kCrosshairTile);
int32_t ii = tilesiz[kCrosshairTile].x * tilesiz[kCrosshairTile].y; int32_t ii = tilesiz[kCrosshairTile].x * tilesiz[kCrosshairTile].y;

View file

@ -1058,7 +1058,6 @@ bool tileLoad(int16_t tilenume);
void tileLoadData(int16_t tilenume, int32_t dasiz, char *buffer); void tileLoadData(int16_t tilenume, int32_t dasiz, char *buffer);
int32_t tileCRC(int16_t tileNum); int32_t tileCRC(int16_t tileNum);
void tileUpdatePicSiz(int32_t picnum); void tileUpdatePicSiz(int32_t picnum);
void tileMakeWritable(int num);
int32_t qloadkvx(int32_t voxindex, const char *filename); int32_t qloadkvx(int32_t voxindex, const char *filename);
void vox_undefine(int32_t const); void vox_undefine(int32_t const);
@ -1325,6 +1324,7 @@ void polymostSet2dView(void); // sets up GL for 2D drawing
void polymost_glreset(void); void polymost_glreset(void);
void polymost_precache(int32_t dapicnum, int32_t dapalnum, int32_t datype); void polymost_precache(int32_t dapicnum, int32_t dapalnum, int32_t datype);
void PrecacheHardwareTextures(int nTile);
typedef uint16_t polytintflags_t; typedef uint16_t polytintflags_t;

View file

@ -819,6 +819,8 @@ static void polymost_drawpoly(vec2f_t const * const dpxy, int32_t const n, int32
if (method & DAMETH_MASKPROPS) if (method & DAMETH_MASKPROPS)
{ {
// Fixme: Alpha test on shaders must be done differently.
// Also: Consider a texture's alpha threshold.
float const al = alphahackarray[globalpicnum] != 0 ? alphahackarray[globalpicnum] * (1.f/255.f) : float const al = alphahackarray[globalpicnum] != 0 ? alphahackarray[globalpicnum] * (1.f/255.f) :
(pth->hicr && pth->hicr->alphacut >= 0.f ? pth->hicr->alphacut : 0.f); (pth->hicr && pth->hicr->alphacut >= 0.f ? pth->hicr->alphacut : 0.f);
@ -5772,3 +5774,17 @@ void polymost_precache(int32_t dapicnum, int32_t dapalnum, int32_t datype)
mdloadskin((md2model_t *)models[mid], 0, dapalnum, i); mdloadskin((md2model_t *)models[mid], 0, dapalnum, i);
} }
void PrecacheHardwareTextures(int nTile)
{
// PRECACHE
// This really *really* needs improvement on the game side - the entire precaching logic has no clue about the different needs of a hardware renderer.
polymost_precache(nTile, 0, 1);
if (r_detailmapping)
polymost_precache(nTile, DETAILPAL, 1);
if (r_glowmapping)
polymost_precache(nTile, GLOWPAL, 1);
}

View file

@ -619,17 +619,12 @@ const uint8_t* tilePtr(int num)
} }
uint8_t* tileData(int num) uint8_t* tileData(int num)
{ {
// Q: Should this automatically make the tile writable? auto tex = TileFiles.tiles[num];
assert(tex);
if (tex->GetWritableBuffer()) return tex->GetWritableBuffer();
return tiledata[num]; return tiledata[num];
} }
void tileMakeWritable(int num)
{
// This won't be so simple anymore with a real texture manager backing this.
tiledata[num] = TileFiles.tileMakeWritable(num);
tilesizearray[num] = TileFiles.tiles[num]->GetSize();
}
// //
// loadtile // loadtile
// //

View file

@ -72,7 +72,7 @@ enum ECreateTexBufferFlags
enum enum
{ {
//MAXCACHE1DSIZE = (50 * 1024 * 1024), MAXCACHE1DSIZE = (50 * 1024 * 1024),
MAXTILES = 30720, MAXTILES = 30720,
MAXUSERTILES = (MAXTILES-16) // reserve 16 tiles at the end MAXUSERTILES = (MAXTILES-16) // reserve 16 tiles at the end

View file

@ -430,6 +430,7 @@ int32_t Anim_Play(const char *fn)
return 0; return 0;
int32_t length = kfilelength(handle); int32_t length = kfilelength(handle);
TArray<uint8_t> buffer(length + 1, true);
if (length <= 4) if (length <= 4)
{ {
@ -438,9 +439,7 @@ int32_t Anim_Play(const char *fn)
} }
anim->animlock = 255; anim->animlock = 255;
anim->animbuf = buffer.Data();
if (!anim->animbuf)
cacheAllocateBlock((intptr_t *)&anim->animbuf, length + 1, &anim->animlock);
kread(handle, anim->animbuf, length); kread(handle, anim->animbuf, length);
kclose(handle); kclose(handle);
@ -572,6 +571,7 @@ end_anim_restore_gl:
#endif #endif
end_anim: end_anim:
I_ClearAllInput(); I_ClearAllInput();
anim->animbuf = nullptr;
ANIM_FreeAnim(); ANIM_FreeAnim();
tileDelete(TILE_ANIM); tileDelete(TILE_ANIM);

View file

@ -523,10 +523,8 @@ void G_CheckCommandLine(int32_t argc, char const * const * argv)
{ {
if (argc > i+1) if (argc > i+1)
{ {
uint32_t j = Batol(argv[i+1]);
MAXCACHE1DSIZE = j<<10;
initprintf("Cache size: %dkB\n", j);
i++; i++;
// No longer supported.
} }
i++; i++;
continue; continue;

View file

@ -833,12 +833,6 @@ int CONFIG_ReadSetup(void)
SCRIPT_GetNumber(ud.config.scripthandle, "Setup", "ForceSetup", &ud.setup.forcesetup); SCRIPT_GetNumber(ud.config.scripthandle, "Setup", "ForceSetup", &ud.setup.forcesetup);
SCRIPT_GetNumber(ud.config.scripthandle, "Setup", "NoAutoLoad", &ud.setup.noautoload); SCRIPT_GetNumber(ud.config.scripthandle, "Setup", "NoAutoLoad", &ud.setup.noautoload);
int32_t cachesize;
SCRIPT_GetNumber(ud.config.scripthandle, "Setup", "CacheSize", &cachesize);
if (cachesize > MAXCACHE1DSIZE)
MAXCACHE1DSIZE = cachesize;
if (g_noSetup == 0 && g_modDir[0] == '/') if (g_noSetup == 0 && g_modDir[0] == '/')
{ {
SCRIPT_GetString(ud.config.scripthandle, "Setup","ModDir",&g_modDir[0]); SCRIPT_GetString(ud.config.scripthandle, "Setup","ModDir",&g_modDir[0]);
@ -968,7 +962,6 @@ void CONFIG_WriteSetup(uint32_t flags)
SCRIPT_PutNumber(ud.config.scripthandle, "Misc", "Executions", ud.executions, FALSE, FALSE); SCRIPT_PutNumber(ud.config.scripthandle, "Misc", "Executions", ud.executions, FALSE, FALSE);
SCRIPT_PutNumber(ud.config.scripthandle, "Setup", "CacheSize", MAXCACHE1DSIZE, FALSE, FALSE);
SCRIPT_PutNumber(ud.config.scripthandle, "Setup", "ConfigVersion", BYTEVERSION_EDUKE32, FALSE, FALSE); SCRIPT_PutNumber(ud.config.scripthandle, "Setup", "ConfigVersion", BYTEVERSION_EDUKE32, FALSE, FALSE);
SCRIPT_PutNumber(ud.config.scripthandle, "Setup", "ForceSetup", ud.setup.forcesetup, FALSE, FALSE); SCRIPT_PutNumber(ud.config.scripthandle, "Setup", "ForceSetup", ud.setup.forcesetup, FALSE, FALSE);
SCRIPT_PutNumber(ud.config.scripthandle, "Setup", "NoAutoLoad", ud.setup.noautoload, FALSE, FALSE); SCRIPT_PutNumber(ud.config.scripthandle, "Setup", "NoAutoLoad", ud.setup.noautoload, FALSE, FALSE);

View file

@ -98,15 +98,6 @@ static const char *defaultrtsfilename[GAMECOUNT] = { "DUKE.RTS", "NAM.RTS", "NAP
int32_t g_Shareware = 0; int32_t g_Shareware = 0;
// This was 32 for a while, but I think lowering it to 24 will help things like the Dingoo.
// Ideally, we would look at our memory usage on our most cramped platform and figure out
// how much of that is needed for the underlying OS and things like SDL instead of guessing
#ifndef GEKKO
int32_t MAXCACHE1DSIZE = (96*1024*1024);
#else
int32_t MAXCACHE1DSIZE = (8*1024*1024);
#endif
int32_t tempwallptr; int32_t tempwallptr;
static int32_t nonsharedtimer; static int32_t nonsharedtimer;
@ -1106,7 +1097,6 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
if (videoGetRenderMode() == REND_CLASSIC) if (videoGetRenderMode() == REND_CLASSIC)
{ {
renderRestoreTarget(); renderRestoreTarget();
// walock[TILE_SAVESHOT] = 1;
} }
#ifdef USE_OPENGL #ifdef USE_OPENGL
else else
@ -1154,7 +1144,6 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
tiltZoom >>= tiltcs; // JBF 20030807 tiltZoom >>= tiltcs; // JBF 20030807
rotatesprite_win(160 << 16, 100 << 16, tiltZoom, tang + 512, TILE_TILT, 0, 0, 4 + 2 + 64 + 1024); rotatesprite_win(160 << 16, 100 << 16, tiltZoom, tang + 512, TILE_TILT, 0, 0, 4 + 2 + 64 + 1024);
walock[TILE_TILT] = 1;
} }
} }
} }
@ -5370,9 +5359,6 @@ static int parsedefinitions_game(scriptfile *pScript, int firstPass)
if (scriptfile_getnumber(pScript, &cacheSize) || !firstPass) if (scriptfile_getnumber(pScript, &cacheSize) || !firstPass)
break; break;
if (cacheSize > 0)
MAXCACHE1DSIZE = cacheSize << 10;
} }
break; break;
case T_INCLUDE: case T_INCLUDE:

View file

@ -343,7 +343,6 @@ extern int32_t ticrandomseed;
extern int32_t vote_map; extern int32_t vote_map;
extern int32_t voting; extern int32_t voting;
extern int32_t MAXCACHE1DSIZE;
//extern int8_t cheatbuf[MAXCHEATLEN],cheatbuflen; //extern int8_t cheatbuf[MAXCHEATLEN],cheatbuflen;
#define CROSSHAIR_PAL (MAXPALOOKUPS-RESERVEDPALS-1) #define CROSSHAIR_PAL (MAXPALOOKUPS-RESERVEDPALS-1)

View file

@ -89,10 +89,11 @@ enum GamearrayFlags_t
GAMEARRAY_UINT8 = GAMEARRAY_INT8 | GAMEARRAY_UNSIGNED, GAMEARRAY_UINT8 = GAMEARRAY_INT8 | GAMEARRAY_UNSIGNED,
GAMEARRAY_BITMAP = 0x00100000, GAMEARRAY_BITMAP = 0x00100000,
GAMEARRAY_WARN = 0x00200000, GAMEARRAY_WARN = 0x00200000,
GAMEARRAY_FUNC = 0x00400000,
GAMEARRAY_SIZE_MASK = GAMEARRAY_INT8 | GAMEARRAY_INT16 | GAMEARRAY_BITMAP, GAMEARRAY_SIZE_MASK = GAMEARRAY_INT8 | GAMEARRAY_INT16 | GAMEARRAY_BITMAP,
GAMEARRAY_STORAGE_MASK = GAMEARRAY_INT8 | GAMEARRAY_INT16 | GAMEARRAY_BITMAP | GAMEARRAY_STRIDE2, GAMEARRAY_STORAGE_MASK = GAMEARRAY_INT8 | GAMEARRAY_INT16 | GAMEARRAY_BITMAP | GAMEARRAY_STRIDE2,
GAMEARRAY_TYPE_MASK = GAMEARRAY_UNSIGNED | GAMEARRAY_INT8 | GAMEARRAY_INT16 | GAMEARRAY_BITMAP, GAMEARRAY_TYPE_MASK = GAMEARRAY_UNSIGNED | GAMEARRAY_INT8 | GAMEARRAY_INT16 | GAMEARRAY_BITMAP | GAMEARRAY_FUNC,
}; };
#pragma pack(push,1) #pragma pack(push,1)

View file

@ -4548,7 +4548,6 @@ void Menu_Close(uint8_t playerID)
actor[g_curViewscreen].t_data[0] = (int32_t) totalclock; actor[g_curViewscreen].t_data[0] = (int32_t) totalclock;
} }
walock[TILE_SAVESHOT] = 1;
G_UpdateScreenArea(); G_UpdateScreenArea();
S_PauseSounds(false); S_PauseSounds(false);
} }

View file

@ -412,49 +412,7 @@ static void G_DoLoadScreen(const char *statustext, int percent)
} }
} }
#ifdef USE_OPENGL
static void cacheExtraTextureMaps(int tileNum)
{
// PRECACHE
if (ud.config.useprecache && bpp > 8)
{
for (int type = 0; type < 2 && !KB_KeyPressed(sc_Space); type++)
{
if (precachehightile[type][tileNum >> 3] & pow2char[tileNum & 7])
{
for (int k = 0; k < MAXPALOOKUPS - RESERVEDPALS && !KB_KeyPressed(sc_Space); k++)
{
// this is the CROSSHAIR_PAL, see screens.cpp
if (k == MAXPALOOKUPS - RESERVEDPALS - 1)
break;
#ifdef POLYMER
if (videoGetRenderMode() != REND_POLYMER || !polymer_havehighpalookup(0, k))
#endif
polymost_precache(tileNum, k, type);
}
#ifdef USE_GLEXT
if (r_detailmapping)
polymost_precache(tileNum, DETAILPAL, type);
if (r_glowmapping)
polymost_precache(tileNum, GLOWPAL, type);
#endif
#ifdef POLYMER
if (videoGetRenderMode() == REND_POLYMER)
{
if (pr_specularmapping)
polymost_precache(tileNum, SPECULARPAL, type);
if (pr_normalmapping)
polymost_precache(tileNum, NORMALPAL, type);
}
#endif
}
}
}
}
#endif
void G_CacheMapData(void) void G_CacheMapData(void)
{ {
@ -505,10 +463,12 @@ void G_CacheMapData(void)
else if ((gotpic[i>>3] & pow2char[i&7]) != pow2char[i&7]) else if ((gotpic[i>>3] & pow2char[i&7]) != pow2char[i&7])
continue; continue;
tileCache(i); // For the hardware renderer precaching the raw pixel data is pointless.
if (videoGetRenderMode() < REND_POLYMOST)
tileLoad(i);
#ifdef USE_OPENGL #ifdef USE_OPENGL
cacheExtraTextureMaps(i); if (ud.config.useprecache) PrecacheHardwareTextures(i);
#endif #endif
MUSIC_Update(); MUSIC_Update();

View file

@ -134,10 +134,7 @@ void G_SetCrosshairColor(int32_t r, int32_t g, int32_t b)
if (g_crosshairSum == r+(g<<8)+(b<<16)) if (g_crosshairSum == r+(g<<8)+(b<<16))
return; return;
tileLoad(CROSSHAIR); auto ptr = TileFiles.tileMakeWritable(CROSSHAIR);
tileMakeWritable(CROSSHAIR);
auto ptr = tileData(CROSSHAIR);
if (!ptr) return; if (!ptr) return;
if (!DefaultCrosshairColors.f) if (!DefaultCrosshairColors.f)

View file

@ -435,10 +435,8 @@ void G_AnimateCamSprite(int smoothRatio)
int const viewscrShift = G_GetViewscreenSizeShift((uspriteptr_t)&sprite[spriteNum]); int const viewscrShift = G_GetViewscreenSizeShift((uspriteptr_t)&sprite[spriteNum]);
int const viewscrTile = TILE_VIEWSCR - viewscrShift; int const viewscrTile = TILE_VIEWSCR - viewscrShift;
if (tileData(viewscrTile) == 0) if (tileData(viewscrTile) ==nullptr)
tileCreate(viewscrTile, tilesiz[PN(spriteNum)].x << viewscrShift, tilesiz[PN(spriteNum)].y << viewscrShift); tileCreate(viewscrTile, tilesiz[PN(spriteNum)].x << viewscrShift, tilesiz[PN(spriteNum)].y << viewscrShift);
else
walock[viewscrTile] = 199;
G_SetupCamTile(OW(spriteNum), viewscrTile, smoothRatio); G_SetupCamTile(OW(spriteNum), viewscrTile, smoothRatio);
#ifdef POLYMER #ifdef POLYMER

View file

@ -3694,7 +3694,7 @@ ACTOR_STATIC int A_CheckPins(int16_t const sectNum)
if (tag != 0) if (tag != 0)
{ {
int const tileNumber = LANEPICS + tag + 1; int const tileNumber = LANEPICS + tag + 1;
tileMakeWritable(tileNumber); TileFiles.tileMakeWritable(tileNumber);
tileCopySection(LANEPICS+1, 0, 0, 128, 64, tileNumber, 0, 0); tileCopySection(LANEPICS+1, 0, 0, 128, 64, tileNumber, 0, 0);
for (int pin = 0; pin < 10; pin++) for (int pin = 0; pin < 10; pin++)
@ -3787,7 +3787,7 @@ ACTOR_STATIC void A_ResetPins(int16_t sect)
if (tag != 0) if (tag != 0)
{ {
int const tileNumber = LANEPICS + tag + 1; int const tileNumber = LANEPICS + tag + 1;
tileMakeWritable(tileNumber); TileFiles.tileMakeWritable(tileNumber);
tileCopySection(LANEPICS+1, 0, 0, 128, 64, tileNumber, 0, 0); tileCopySection(LANEPICS+1, 0, 0, 128, 64, tileNumber, 0, 0);
for (int pin = 0; pin < 10; pin++) for (int pin = 0; pin < 10; pin++)
@ -3846,7 +3846,7 @@ void A_ResetLanePics(void)
for (int tag = 1; tag <= 4; tag++) for (int tag = 1; tag <= 4; tag++)
{ {
int const tileNumber = LANEPICS + tag + 1; int const tileNumber = LANEPICS + tag + 1;
tileMakeWritable(tileNumber); TileFiles.tileMakeWritable(tileNumber);
tileCopySection(LANEPICS + 1, 0, 0, 128, 64, tileNumber, 0, 0); tileCopySection(LANEPICS + 1, 0, 0, 128, 64, tileNumber, 0, 0);
for (int pin = 0; pin < 10; pin++) for (int pin = 0; pin < 10; pin++)

View file

@ -460,6 +460,7 @@ int32_t Anim_Play(const char *fn)
return 0; return 0;
int32_t length = kfilelength(handle); int32_t length = kfilelength(handle);
TArray<uint8_t> buffer(length + 1, true);
if (length <= 4) if (length <= 4)
{ {
@ -467,10 +468,7 @@ int32_t Anim_Play(const char *fn)
goto end_anim; goto end_anim;
} }
anim->animlock = 1; anim->animbuf = buffer.Data();
if (!anim->animbuf)
cacheAllocateBlock((intptr_t *)&anim->animbuf, length + 1, &anim->animlock);
tileCreate(TILE_ANIM, 200, 320); tileCreate(TILE_ANIM, 200, 320);
@ -592,10 +590,9 @@ end_anim_restore_gl:
#endif #endif
end_anim: end_anim:
I_ClearAllInput(); I_ClearAllInput();
anim->animbuf = nullptr;
ANIM_FreeAnim(); ANIM_FreeAnim();
tileDelete(TILE_ANIM); tileDelete(TILE_ANIM);
walock[TILE_ANIM] = 1;
anim->animlock = 0;
return !running; return !running;
} }

View file

@ -500,9 +500,7 @@ void G_CheckCommandLine(int32_t argc, char const * const * argv)
{ {
if (argc > i+1) if (argc > i+1)
{ {
uint32_t j = Batol(argv[i+1]); // No longer supported.
MAXCACHE1DSIZE = j<<10;
initprintf("Cache size: %dkB\n", j);
i++; i++;
} }
i++; i++;

View file

@ -678,9 +678,6 @@ int32_t CONFIG_ReadSetup(void)
SCRIPT_GetNumber(ud.config.scripthandle, "Setup", "NoAutoLoad", &ud.setup.noautoload); SCRIPT_GetNumber(ud.config.scripthandle, "Setup", "NoAutoLoad", &ud.setup.noautoload);
SCRIPT_GetNumber(ud.config.scripthandle, "Setup", "CacheSize", &dummy); SCRIPT_GetNumber(ud.config.scripthandle, "Setup", "CacheSize", &dummy);
if (dummy > MAXCACHE1DSIZE)
MAXCACHE1DSIZE = dummy;
if (g_noSetup == 0 && g_modDir[0] == '/') if (g_noSetup == 0 && g_modDir[0] == '/')
{ {
struct Bstat st; struct Bstat st;

View file

@ -90,15 +90,6 @@ const char *defaultrtsfilename[GAMECOUNT] = { "DUKE.RTS", "REDNECK.RTS", "REDNEC
int32_t g_Shareware = 0; int32_t g_Shareware = 0;
// This was 32 for a while, but I think lowering it to 24 will help things like the Dingoo.
// Ideally, we would look at our memory usage on our most cramped platform and figure out
// how much of that is needed for the underlying OS and things like SDL instead of guessing
#ifndef GEKKO
int32_t MAXCACHE1DSIZE = (96*1024*1024);
#else
int32_t MAXCACHE1DSIZE = (8*1024*1024);
#endif
int32_t tempwallptr; int32_t tempwallptr;
static int32_t nonsharedtimer; static int32_t nonsharedtimer;
@ -1488,7 +1479,6 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
if (videoGetRenderMode() == REND_CLASSIC) if (videoGetRenderMode() == REND_CLASSIC)
{ {
renderRestoreTarget(); renderRestoreTarget();
// walock[TILE_SAVESHOT] = 1;
} }
#ifdef USE_OPENGL #ifdef USE_OPENGL
else else
@ -1536,7 +1526,6 @@ void G_DrawRooms(int32_t playerNum, int32_t smoothRatio)
tiltZoom >>= tiltcs; // JBF 20030807 tiltZoom >>= tiltcs; // JBF 20030807
rotatesprite_win(160 << 16, 100 << 16, tiltZoom, tang + 512, TILE_TILT, 0, 0, 4 + 2 + 64 + 1024); rotatesprite_win(160 << 16, 100 << 16, tiltZoom, tang + 512, TILE_TILT, 0, 0, 4 + 2 + 64 + 1024);
walock[TILE_TILT] = 199;
} }
} }
} }
@ -5052,7 +5041,7 @@ default_case1:
t->xrepeat += 10; t->xrepeat += 10;
t->yrepeat += 9; t->yrepeat += 9;
} }
else if (g_curViewscreen == i && display_mirror != 3 && tileData(viewscrTile) && walock[viewscrTile] > 200) else if (g_curViewscreen == i && display_mirror != 3 && tileData(viewscrTile))
{ {
// this exposes a sprite sorting issue which needs to be debugged further... // this exposes a sprite sorting issue which needs to be debugged further...
#if 0 #if 0
@ -6866,9 +6855,6 @@ static int parsedefinitions_game(scriptfile *pScript, int firstPass)
if (scriptfile_getnumber(pScript, &cacheSize) || !firstPass) if (scriptfile_getnumber(pScript, &cacheSize) || !firstPass)
break; break;
if (cacheSize > 0)
MAXCACHE1DSIZE = cacheSize << 10;
} }
break; break;
case T_INCLUDE: case T_INCLUDE:

View file

@ -306,7 +306,6 @@ extern int32_t ticrandomseed;
extern int32_t vote_map; extern int32_t vote_map;
extern int32_t voting; extern int32_t voting;
extern int32_t MAXCACHE1DSIZE;
//extern int8_t cheatbuf[MAXCHEATLEN],cheatbuflen; //extern int8_t cheatbuf[MAXCHEATLEN],cheatbuflen;
#define CROSSHAIR_PAL (MAXPALOOKUPS-RESERVEDPALS-1) #define CROSSHAIR_PAL (MAXPALOOKUPS-RESERVEDPALS-1)

View file

@ -4870,7 +4870,6 @@ void Menu_Close(uint8_t playerID)
actor[g_curViewscreen].t_data[0] = (int32_t) totalclock; actor[g_curViewscreen].t_data[0] = (int32_t) totalclock;
} }
walock[TILE_SAVESHOT] = 199;
G_UpdateScreenArea(); G_UpdateScreenArea();
if (!ud.pause_on) if (!ud.pause_on)
@ -7604,7 +7603,6 @@ void M_DisplayMenus(void)
if ((g_player[myconnectindex].ps->gm&MODE_MENU) == 0) if ((g_player[myconnectindex].ps->gm&MODE_MENU) == 0)
{ {
walock[TILE_LOADSHOT] = 1;
return; return;
} }

View file

@ -615,46 +615,12 @@ void G_CacheMapData(void)
} }
if (gotpic[i>>3] & pow2char[i&7]) if (gotpic[i>>3] & pow2char[i&7])
{ {
tileCache(i); // For the hardware renderer precaching the raw pixel data is pointless.
if (videoGetRenderMode() < REND_POLYMOST)
tileLoad(i);
#ifdef USE_OPENGL #ifdef USE_OPENGL
// PRECACHE if (ud.config.useprecache) PrecacheHardwareTextures(i);
if (ud.config.useprecache && bpp > 8)
{
int32_t k,type;
for (type=0; type<=1; type++)
if (precachehightile[type][i>>3] & pow2char[i&7])
{
k = 0;
for (k=0; k<MAXPALOOKUPS-RESERVEDPALS && !KB_KeyPressed(sc_Space); k++)
{
// this is the CROSSHAIR_PAL, see comment in game.c
if (k == MAXPALOOKUPS-RESERVEDPALS-1)
break;
#ifdef POLYMER
if (videoGetRenderMode() != REND_POLYMER || !polymer_havehighpalookup(0, k))
#endif
polymost_precache(i,k,type);
}
#ifdef USE_GLEXT
if (r_detailmapping && !KB_KeyPressed(sc_Space))
polymost_precache(i,DETAILPAL,type);
if (r_glowmapping && !KB_KeyPressed(sc_Space))
polymost_precache(i,GLOWPAL,type);
#endif
#ifdef POLYMER
if (videoGetRenderMode() == REND_POLYMER)
{
if (pr_specularmapping && !KB_KeyPressed(sc_Space))
polymost_precache(i,SPECULARPAL,type);
if (pr_normalmapping && !KB_KeyPressed(sc_Space))
polymost_precache(i,NORMALPAL,type);
}
#endif
}
}
#endif #endif
j++; j++;
pc++; pc++;

View file

@ -127,10 +127,7 @@ void G_SetCrosshairColor(int32_t r, int32_t g, int32_t b)
if (g_crosshairSum == r+(g<<8)+(b<<16)) if (g_crosshairSum == r+(g<<8)+(b<<16))
return; return;
tileLoad(CROSSHAIR); auto ptr = TileFiles.tileMakeWritable(CROSSHAIR);
tileMakeWritable(CROSSHAIR);
auto ptr = tileData(CROSSHAIR);
if (!ptr) return; if (!ptr) return;
if (!DefaultCrosshairColors.f) if (!DefaultCrosshairColors.f)

View file

@ -541,10 +541,8 @@ void G_AnimateCamSprite(int smoothRatio)
int const viewscrShift = G_GetViewscreenSizeShift((const uspritetype *)&sprite[spriteNum]); int const viewscrShift = G_GetViewscreenSizeShift((const uspritetype *)&sprite[spriteNum]);
int const viewscrTile = TILE_VIEWSCR - viewscrShift; int const viewscrTile = TILE_VIEWSCR - viewscrShift;
if (tileData(viewscrTile) == 0) if (tileData(viewscrTile) == nullptr)
tileCreate(viewscrTile, tilesiz[PN(spriteNum)].x << viewscrShift, tilesiz[PN(spriteNum)].y << viewscrShift); tileCreate(viewscrTile, tilesiz[PN(spriteNum)].x << viewscrShift, tilesiz[PN(spriteNum)].y << viewscrShift);
else
walock[viewscrTile] = 255;
G_SetupCamTile(OW(spriteNum), viewscrTile, smoothRatio); G_SetupCamTile(OW(spriteNum), viewscrTile, smoothRatio);
#ifdef POLYMER #ifdef POLYMER

View file

@ -57,6 +57,7 @@ int ANIMnumframes;
unsigned char ANIMpal[3*256]; unsigned char ANIMpal[3*256];
unsigned char ANIMnum = 0; unsigned char ANIMnum = 0;
short SoundState; short SoundState;
static TArray<uint8_t> buffer;
const char *ANIMname[] = const char *ANIMname[] =
{ {
@ -238,7 +239,6 @@ unsigned char *LoadAnm(short anim_num)
ANIMnum = anim_num; ANIMnum = anim_num;
// lock it // lock it
walock[ANIM_TILE(ANIMnum)] = 219;
if (anm_ptr[anim_num] == 0) if (anm_ptr[anim_num] == 0)
{ {
@ -247,7 +247,8 @@ unsigned char *LoadAnm(short anim_num)
return NULL; return NULL;
length = kfilelength(handle); length = kfilelength(handle);
cacheAllocateBlock((intptr_t *) &anm_ptr[anim_num], length + sizeof(anim_t), &walock[ANIM_TILE(ANIMnum)]); buffer.Resize(length + sizeof(anim_t));
anm_ptr[anim_num] = (anim_t*)buffer.Data();
animbuf = (unsigned char *)((intptr_t)anm_ptr[anim_num] + sizeof(anim_t)); animbuf = (unsigned char *)((intptr_t)anm_ptr[anim_num] + sizeof(anim_t));
kread(handle, animbuf, length); kread(handle, animbuf, length);
@ -387,6 +388,5 @@ ENDOFANIMLOOP:
KB_FlushKeyboardQueue(); KB_FlushKeyboardQueue();
KB_ClearKeysDown(); KB_ClearKeysDown();
ANIM_FreeAnim(); ANIM_FreeAnim();
walock[ANIM_TILE(ANIMnum)] = 1;
} }
END_SW_NS END_SW_NS

View file

@ -633,7 +633,13 @@ void DoTheCache(void)
{ {
if ((TEST(gotpic[i>>3], 1<<(i&7))) && (!tilePtr(i))) if ((TEST(gotpic[i>>3], 1<<(i&7))) && (!tilePtr(i)))
{ {
// For the hardware renderer precaching the raw pixel data is pointless.
if (videoGetRenderMode() < REND_POLYMOST)
tileLoad(i); tileLoad(i);
#ifdef USE_OPENGL
/*if (useprecache)*/ PrecacheHardwareTextures(i);
#endif
cnt++; cnt++;
if (!(cnt&7)) if (!(cnt&7))
{ {

View file

@ -2676,12 +2676,10 @@ DrawCompass(PLAYERp pp)
void ScreenTileLock(void) void ScreenTileLock(void)
{ {
walock[SAVE_SCREEN_TILE] = CACHE_LOCK_MAX;
} }
void ScreenTileUnLock(void) void ScreenTileUnLock(void)
{ {
walock[SAVE_SCREEN_TILE] = CACHE_UNLOCK_MAX;
} }
int int

View file

@ -5833,9 +5833,6 @@ SHOWSPRITE:
} }
extern int tilefileoffs[MAXTILES]; //offset into the
extern char tilefilenum[MAXTILES]; //0-11
#if RANDOM_DEBUG #if RANDOM_DEBUG
int int

View file

@ -666,7 +666,10 @@ int SaveGame(short save_num)
MWRITE(palette,sizeof(palette),1,fil); MWRITE(palette,sizeof(palette),1,fil);
MWRITE(palette_data,sizeof(palette_data),1,fil); MWRITE(palette_data,sizeof(palette_data),1,fil);
MWRITE(&gs,sizeof(gs),1,fil); MWRITE(&gs,sizeof(gs),1,fil);
MWRITE(picanm,sizeof(picanm),1,fil); for (int i = 0; i < MAXTILES; i++)
{
MWRITE(&picanm[i], sizeof(picanm[i]), 1, fil);
}
MWRITE(&LevelSecrets,sizeof(LevelSecrets),1,fil); MWRITE(&LevelSecrets,sizeof(LevelSecrets),1,fil);
@ -1182,7 +1185,10 @@ int LoadGame(short save_num)
//COVERsetbrightness(gs.Brightness,(char *)palette_data); //COVERsetbrightness(gs.Brightness,(char *)palette_data);
MREAD(picanm,sizeof(picanm),1,fil); for (int i = 0; i < MAXTILES; i++)
{
MREAD(&picanm[i], sizeof(picanm[i]), 1, fil);
}
MREAD(&LevelSecrets,sizeof(LevelSecrets),1,fil); MREAD(&LevelSecrets,sizeof(LevelSecrets),1,fil);