maps: cache QBSP in collision map list

This commit is contained in:
Denis Pauk 2024-05-01 14:23:49 +03:00
parent 98cc9c1ea0
commit bf81d4e427
16 changed files with 40 additions and 86 deletions

View file

@ -103,7 +103,6 @@ cvar_t *r_customwidth;
cvar_t *r_customheight;
cvar_t *r_retexturing;
cvar_t *r_maptype;
cvar_t *r_scale8bittextures;
cvar_t *r_nolerp_list;
@ -1242,7 +1241,6 @@ R_Register(void)
r_retexturing = ri.Cvar_Get("r_retexturing", "1", CVAR_ARCHIVE);
r_validation = ri.Cvar_Get("r_validation", "0", CVAR_ARCHIVE);
r_scale8bittextures = ri.Cvar_Get("r_scale8bittextures", "0", CVAR_ARCHIVE);
r_maptype = ri.Cvar_Get("maptype", "0", CVAR_ARCHIVE);
/* don't bilerp characters and crosshairs */
r_nolerp_list = ri.Cvar_Get("r_nolerp_list", DEFAULT_NOLERP_LIST, CVAR_ARCHIVE);

View file

@ -295,12 +295,10 @@ Mod_LoadQFaces(model_t *loadmodel, const byte *mod_base, const lump_t *l,
}
static void
Mod_LoadBrushModel(model_t *mod, const void *buffer, int filelen)
Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen)
{
int lightgridsize = 0, hunkSize;
const bspx_header_t *bspx_header;
size_t modfilelen;
maptype_t maptype;
dheader_t *header;
byte *mod_base;
@ -309,10 +307,7 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int filelen)
Com_Error(ERR_DROP, "%s: Loaded a brush model after the world", __func__);
}
/* Can't detect will use provided */
maptype = r_maptype->value;
mod_base = Mod_Load2QBSP(mod->name, (byte *)buffer, filelen, &modfilelen, &maptype);
mod_base = (byte *)buffer;
header = (dheader_t *)mod_base;
/* check for BSPX extensions */
@ -373,9 +368,6 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int filelen)
&header->lumps[LUMP_NODES], header->ident);
Mod_LoadSubmodels(mod, mod_base, &header->lumps[LUMP_MODELS]);
mod->numframes = 2; /* regular and alternate animation */
/* Free QBSP temporary info */
free(mod_base);
}
/*
@ -494,10 +486,7 @@ Mod_ForName(const char *name, model_t *parent_model, qboolean crash)
};
break;
case IDBSPHEADER:
/* fall through */
case RBSPHEADER:
/* fall through */
/* should have only preloaded formats for maps */
case QBSPHEADER:
Mod_LoadBrushModel(mod, buf, modfilelen);
break;

View file

@ -175,7 +175,6 @@ extern cvar_t *r_customwidth;
extern cvar_t *r_customheight;
extern cvar_t *r_retexturing;
extern cvar_t *r_maptype;
extern cvar_t *r_scale8bittextures;
extern cvar_t *r_validation;

View file

@ -83,7 +83,6 @@ cvar_t *gl_msaa_samples;
cvar_t *gl_version_override;
cvar_t *r_vsync;
cvar_t *r_retexturing;
cvar_t *r_maptype;
cvar_t *r_scale8bittextures;
cvar_t *vid_fullscreen;
cvar_t *r_mode;
@ -212,7 +211,6 @@ GL3_Register(void)
gl_msaa_samples = ri.Cvar_Get ( "r_msaa_samples", "0", CVAR_ARCHIVE );
gl_version_override = ri.Cvar_Get ( "gl_version_override", "0", CVAR_ARCHIVE );
r_retexturing = ri.Cvar_Get("r_retexturing", "1", CVAR_ARCHIVE);
r_maptype = ri.Cvar_Get("maptype", "0", CVAR_ARCHIVE);
r_scale8bittextures = ri.Cvar_Get("r_scale8bittextures", "0", CVAR_ARCHIVE);
gl3_debugcontext = ri.Cvar_Get("gl3_debugcontext", "0", 0);
r_mode = ri.Cvar_Get("r_mode", "4", CVAR_ARCHIVE);

View file

@ -296,12 +296,10 @@ Mod_LoadQFaces(gl3model_t *loadmodel, const byte *mod_base, const lump_t *l,
}
static void
Mod_LoadBrushModel(gl3model_t *mod, const void *buffer, int filelen)
Mod_LoadBrushModel(gl3model_t *mod, const void *buffer, int modfilelen)
{
int lightgridsize = 0, hunkSize;
const bspx_header_t *bspx_header;
size_t modfilelen;
maptype_t maptype;
dheader_t *header;
byte *mod_base;
@ -310,10 +308,7 @@ Mod_LoadBrushModel(gl3model_t *mod, const void *buffer, int filelen)
Com_Error(ERR_DROP, "%s: Loaded a brush model after the world", __func__);
}
/* Can't detect will use provided */
maptype = r_maptype->value;
mod_base = Mod_Load2QBSP(mod->name, (byte *)buffer, filelen, &modfilelen, &maptype);
mod_base = (byte *)buffer;
header = (dheader_t *)mod_base;
/* check for BSPX extensions */
@ -374,9 +369,6 @@ Mod_LoadBrushModel(gl3model_t *mod, const void *buffer, int filelen)
&header->lumps[LUMP_NODES], header->ident);
Mod_LoadSubmodels(mod, mod_base, &header->lumps[LUMP_MODELS]);
mod->numframes = 2; /* regular and alternate animation */
/* Free QBSP temporary info */
free(mod_base);
}
/*
@ -495,10 +487,7 @@ Mod_ForName(const char *name, gl3model_t *parent_model, qboolean crash)
};
break;
case IDBSPHEADER:
/* fall through */
case RBSPHEADER:
/* fall through */
/* should have only preloaded formats for maps */
case QBSPHEADER:
Mod_LoadBrushModel(mod, buf, modfilelen);
break;

View file

@ -509,7 +509,6 @@ extern cvar_t *gl_msaa_samples;
extern cvar_t *gl_version_override;
extern cvar_t *r_vsync;
extern cvar_t *r_retexturing;
extern cvar_t *r_maptype;
extern cvar_t *r_scale8bittextures;
extern cvar_t *vid_fullscreen;
extern cvar_t *r_mode;

View file

@ -79,7 +79,6 @@ cvar_t *gl_msaa_samples;
cvar_t *gl_version_override;
cvar_t *r_vsync;
cvar_t *r_retexturing;
cvar_t *r_maptype;
cvar_t *r_scale8bittextures;
cvar_t *vid_fullscreen;
cvar_t *r_mode;
@ -208,7 +207,6 @@ GL4_Register(void)
gl_msaa_samples = ri.Cvar_Get ( "r_msaa_samples", "0", CVAR_ARCHIVE );
gl_version_override = ri.Cvar_Get ( "gl_version_override", "0", CVAR_ARCHIVE );
r_retexturing = ri.Cvar_Get("r_retexturing", "1", CVAR_ARCHIVE);
r_maptype = ri.Cvar_Get("maptype", "0", CVAR_ARCHIVE);
r_scale8bittextures = ri.Cvar_Get("r_scale8bittextures", "0", CVAR_ARCHIVE);
gl4_debugcontext = ri.Cvar_Get("gl4_debugcontext", "0", 0);
r_mode = ri.Cvar_Get("r_mode", "4", CVAR_ARCHIVE);

View file

@ -296,12 +296,10 @@ Mod_LoadQFaces(gl4model_t *loadmodel, const byte *mod_base, const lump_t *l,
}
static void
Mod_LoadBrushModel(gl4model_t *mod, const void *buffer, int filelen)
Mod_LoadBrushModel(gl4model_t *mod, const void *buffer, int modfilelen)
{
int lightgridsize = 0, hunkSize;
const bspx_header_t *bspx_header;
size_t modfilelen;
maptype_t maptype;
dheader_t *header;
byte *mod_base;
@ -310,10 +308,7 @@ Mod_LoadBrushModel(gl4model_t *mod, const void *buffer, int filelen)
Com_Error(ERR_DROP, "%s: Loaded a brush model after the world", __func__);
}
/* Can't detect will use provided */
maptype = r_maptype->value;
mod_base = Mod_Load2QBSP(mod->name, (byte *)buffer, filelen, &modfilelen, &maptype);
mod_base = (byte *)buffer;
header = (dheader_t *)mod_base;
/* check for BSPX extensions */
@ -374,9 +369,6 @@ Mod_LoadBrushModel(gl4model_t *mod, const void *buffer, int filelen)
&header->lumps[LUMP_NODES], header->ident);
Mod_LoadSubmodels(mod, mod_base, &header->lumps[LUMP_MODELS]);
mod->numframes = 2; /* regular and alternate animation */
/* Free QBSP temporary info */
free(mod_base);
}
/*
@ -495,10 +487,7 @@ Mod_ForName(const char *name, gl4model_t *parent_model, qboolean crash)
};
break;
case IDBSPHEADER:
/* fall through */
case RBSPHEADER:
/* fall through */
/* should have only preloaded formats for maps */
case QBSPHEADER:
Mod_LoadBrushModel(mod, buf, modfilelen);
break;

View file

@ -499,7 +499,6 @@ extern cvar_t *gl_msaa_samples;
extern cvar_t *gl_version_override;
extern cvar_t *r_vsync;
extern cvar_t *r_retexturing;
extern cvar_t *r_maptype;
extern cvar_t *r_scale8bittextures;
extern cvar_t *vid_fullscreen;
extern cvar_t *r_mode;

View file

@ -398,7 +398,6 @@ extern cvar_t *sw_waterwarp;
extern cvar_t *sw_gunzposition;
extern cvar_t *r_validation;
extern cvar_t *r_retexturing;
extern cvar_t *r_maptype;
extern cvar_t *r_scale8bittextures;
extern cvar_t *r_palettedtexture;

View file

@ -152,7 +152,6 @@ cvar_t *sw_custom_particles;
static cvar_t *sw_anisotropic;
cvar_t *sw_texture_filtering;
cvar_t *r_retexturing;
cvar_t *r_maptype;
cvar_t *r_scale8bittextures;
cvar_t *sw_gunzposition;
cvar_t *r_validation;
@ -387,7 +386,6 @@ R_RegisterVariables (void)
sw_texture_filtering = ri.Cvar_Get("sw_texture_filtering", "0", CVAR_ARCHIVE);
sw_anisotropic = ri.Cvar_Get("r_anisotropic", "0", CVAR_ARCHIVE);
r_retexturing = ri.Cvar_Get("r_retexturing", "1", CVAR_ARCHIVE);
r_maptype = ri.Cvar_Get("maptype", "0", CVAR_ARCHIVE);
r_scale8bittextures = ri.Cvar_Get("r_scale8bittextures", "0", CVAR_ARCHIVE);
sw_gunzposition = ri.Cvar_Get("sw_gunzposition", "8", CVAR_ARCHIVE);
r_validation = ri.Cvar_Get("r_validation", "0", CVAR_ARCHIVE);

View file

@ -303,12 +303,10 @@ Mod_LoadQFaces(model_t *loadmodel, const byte *mod_base, const lump_t *l,
}
static void
Mod_LoadBrushModel(model_t *mod, const void *buffer, int filelen)
Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen)
{
int lightgridsize = 0, hunkSize;
const bspx_header_t *bspx_header;
size_t modfilelen;
maptype_t maptype;
dheader_t *header;
byte *mod_base;
@ -317,10 +315,7 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int filelen)
Com_Error(ERR_DROP, "%s: Loaded a brush model after the world", __func__);
}
/* Can't detect will use provided */
maptype = r_maptype->value;
mod_base = Mod_Load2QBSP(mod->name, (byte *)buffer, filelen, &modfilelen, &maptype);
mod_base = (byte *)buffer;
header = (dheader_t *)mod_base;
/* check for BSPX extensions */
@ -381,9 +376,6 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int filelen)
mod->numframes = 2; /* regular and alternate animation */
R_InitSkyBox(mod);
/* Free QBSP temporary info */
free(mod_base);
}
/*
@ -502,10 +494,7 @@ Mod_ForName(const char *name, model_t *parent_model, qboolean crash)
};
break;
case IDBSPHEADER:
/* fall through */
case RBSPHEADER:
/* fall through */
/* should have only preloaded formats for maps */
case QBSPHEADER:
Mod_LoadBrushModel(mod, buf, modfilelen);
break;

View file

@ -142,7 +142,6 @@ extern cvar_t *vk_molten_fastmath;
extern cvar_t *vk_molten_metalbuffers;
#endif
extern cvar_t *r_retexturing;
extern cvar_t *r_maptype;
extern cvar_t *r_scale8bittextures;
extern cvar_t *r_nolerp_list;
extern cvar_t *r_lerp_list;

View file

@ -132,7 +132,6 @@ cvar_t *vk_mip_nearfilter;
cvar_t *vk_sampleshading;
cvar_t *vk_device_idx;
cvar_t *r_retexturing;
cvar_t *r_maptype;
cvar_t *r_scale8bittextures;
static cvar_t *vk_underwater;
cvar_t *r_nolerp_list;
@ -1178,7 +1177,6 @@ R_Register(void)
vk_molten_metalbuffers = ri.Cvar_Get("vk_molten_metalbuffer", "0", CVAR_ARCHIVE);
#endif
r_retexturing = ri.Cvar_Get("r_retexturing", "1", CVAR_ARCHIVE);
r_maptype = ri.Cvar_Get("maptype", "0", CVAR_ARCHIVE);
r_scale8bittextures = ri.Cvar_Get("r_scale8bittextures", "0", CVAR_ARCHIVE);
vk_underwater = ri.Cvar_Get("vk_underwater", "1", CVAR_ARCHIVE);
/* don't bilerp characters and crosshairs */

View file

@ -270,12 +270,10 @@ Mod_LoadQFaces(model_t *loadmodel, const byte *mod_base, const lump_t *l,
}
static void
Mod_LoadBrushModel(model_t *mod, const void *buffer, int filelen)
Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen)
{
int lightgridsize = 0, hunkSize;
const bspx_header_t *bspx_header;
size_t modfilelen;
maptype_t maptype;
dheader_t *header;
byte *mod_base;
@ -284,10 +282,7 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int filelen)
Com_Error(ERR_DROP, "%s: Loaded a brush model after the world", __func__);
}
/* Can't detect will use provided */
maptype = r_maptype->value;
mod_base = Mod_Load2QBSP(mod->name, (byte *)buffer, filelen, &modfilelen, &maptype);
mod_base = (byte *)buffer;
header = (dheader_t *)mod_base;
/* check for BSPX extensions */
@ -348,9 +343,6 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int filelen)
&header->lumps[LUMP_NODES], header->ident);
Mod_LoadSubmodels(mod, mod_base, &header->lumps[LUMP_MODELS]);
mod->numframes = 2; /* regular and alternate animation */
/* Free QBSP temporary info */
free(mod_base);
}
/*
@ -478,10 +470,7 @@ Mod_ForName(const char *name, model_t *parent_model, qboolean crash)
};
break;
case IDBSPHEADER:
/* fall through */
case RBSPHEADER:
/* fall through */
/* should have only preloaded formats for maps */
case QBSPHEADER:
Mod_LoadBrushModel(mod, buf, modfilelen);
break;

View file

@ -71,6 +71,8 @@ typedef struct
{
char name[MAX_QPATH];
unsigned checksum;
char *cache; /* raw converted map */
int cache_size;
cleaf_t *map_leafs;
int emptyleaf;
@ -1743,7 +1745,7 @@ CM_ModFreeAll(void)
static void
CM_LoadCachedMap(const char *name, model_t *mod)
{
int filelen, hunkSize = 0;
int filelen, hunkSize;
byte *cmod_base, *filebuf;
maptype_t maptype;
dheader_t *header;
@ -1767,6 +1769,7 @@ CM_LoadCachedMap(const char *name, model_t *mod)
/* load into heap */
strcpy(mod->name, name);
hunkSize = length; /* allocate memory for future maps cache */
hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_TEXINFO],
sizeof(xtexinfo_t), sizeof(mapsurface_t), EXTRA_LUMP_TEXINFO);
hunkSize += Mod_CalcLumpHunkSize(&header->lumps[LUMP_LEAFS],
@ -1794,6 +1797,10 @@ CM_LoadCachedMap(const char *name, model_t *mod)
mod->extradata = Hunk_Begin(hunkSize);
mod->cache = Hunk_Alloc(length);
memcpy(mod->cache, cmod_base, length);
mod->cache_size = length;
CMod_LoadSurfaces(mod->name, &mod->map_surfaces, &mod->numtexinfo,
cmod_base, &header->lumps[LUMP_TEXINFO]);
CMod_LoadLeafs(mod->name, &mod->map_leafs, &mod->numleafs, &mod->emptyleaf,
@ -2120,5 +2127,22 @@ CM_ClusterPHS(int cluster)
int
CM_LoadFile(const char *path, void **buffer)
{
int i;
for (i = 0; i < MAX_MOD_KNOWN; i++)
{
/* we have already cached */
if (!strcmp(path, models[i].name) &&
models[i].cache &&
models[i].extradatasize)
{
*buffer = Z_Malloc(models[i].cache_size);
memcpy(*buffer, models[i].cache, models[i].cache_size);
return models[i].cache_size;
}
}
Com_Printf("%s: render asked about '%s' but have loaded it yet?\n",
__func__, path);
return -1;
}