light: refactor tracelist to be a list of modelinfo_t instead of dmodel_t
This commit is contained in:
parent
7a336a4881
commit
a6a89db530
|
|
@ -219,8 +219,8 @@ struct ltface_ctx
|
||||||
};
|
};
|
||||||
|
|
||||||
/* tracelist is a null terminated array of BSP models to use for LOS tests */
|
/* tracelist is a null terminated array of BSP models to use for LOS tests */
|
||||||
extern const dmodel_t *const *tracelist;
|
extern const modelinfo_t *const *tracelist;
|
||||||
extern const dmodel_t *const *selfshadowlist;
|
extern const modelinfo_t *const *selfshadowlist;
|
||||||
|
|
||||||
struct ltface_ctx;
|
struct ltface_ctx;
|
||||||
struct ltface_ctx *LightFaceInit(const bsp2_t *bsp);
|
struct ltface_ctx *LightFaceInit(const bsp2_t *bsp);
|
||||||
|
|
|
||||||
|
|
@ -86,8 +86,8 @@ static byte *lux_file_p; // start of free space after luxfile data
|
||||||
static byte *lux_file_end; // end of space for luxfile data
|
static byte *lux_file_end; // end of space for luxfile data
|
||||||
|
|
||||||
static modelinfo_t *modelinfo;
|
static modelinfo_t *modelinfo;
|
||||||
const dmodel_t *const *tracelist;
|
const modelinfo_t *const *tracelist;
|
||||||
const dmodel_t *const *selfshadowlist;
|
const modelinfo_t *const *selfshadowlist;
|
||||||
|
|
||||||
int oversample = 1;
|
int oversample = 1;
|
||||||
int write_litfile = 0; /* 0 for none, 1 for .lit, 2 for bspx, 3 for both */
|
int write_litfile = 0; /* 0 for none, 1 for .lit, 2 for bspx, 3 for both */
|
||||||
|
|
@ -213,19 +213,19 @@ FindModelInfo(const bsp2_t *bsp, const char *lmscaleoverride)
|
||||||
entity_t *entity;
|
entity_t *entity;
|
||||||
char modelname[20];
|
char modelname[20];
|
||||||
const char *attribute;
|
const char *attribute;
|
||||||
const dmodel_t **shadowmodels;
|
const modelinfo_t **shadowmodels;
|
||||||
const dmodel_t **selfshadowmodels;
|
const modelinfo_t **selfshadowmodels;
|
||||||
modelinfo_t *info;
|
modelinfo_t *info;
|
||||||
float lightmapscale;
|
float lightmapscale;
|
||||||
|
|
||||||
shadowmodels = (const dmodel_t **)malloc(sizeof(dmodel_t *) * (bsp->nummodels + 1));
|
shadowmodels = (const modelinfo_t **)malloc(sizeof(modelinfo_t *) * (bsp->nummodels + 1));
|
||||||
memset(shadowmodels, 0, sizeof(dmodel_t *) * (bsp->nummodels + 1));
|
memset(shadowmodels, 0, sizeof(modelinfo_t *) * (bsp->nummodels + 1));
|
||||||
|
|
||||||
selfshadowmodels = (const dmodel_t **)malloc(sizeof(dmodel_t *) * (bsp->nummodels + 1));
|
selfshadowmodels = (const modelinfo_t **)malloc(sizeof(modelinfo_t *) * (bsp->nummodels + 1));
|
||||||
memset(selfshadowmodels, 0, sizeof(dmodel_t *) * (bsp->nummodels + 1));
|
memset(selfshadowmodels, 0, sizeof(modelinfo_t *) * (bsp->nummodels + 1));
|
||||||
|
|
||||||
/* The world always casts shadows */
|
/* The world always casts shadows */
|
||||||
shadowmodels[0] = &bsp->dmodels[0];
|
shadowmodels[0] = &modelinfo[0];
|
||||||
numshadowmodels = 1;
|
numshadowmodels = 1;
|
||||||
numselfshadowmodels = 0;
|
numselfshadowmodels = 0;
|
||||||
|
|
||||||
|
|
@ -263,12 +263,12 @@ FindModelInfo(const bsp2_t *bsp, const char *lmscaleoverride)
|
||||||
/* Check if this model will cast shadows (shadow => shadowself) */
|
/* Check if this model will cast shadows (shadow => shadowself) */
|
||||||
shadow = atoi(ValueForKey(entity, "_shadow"));
|
shadow = atoi(ValueForKey(entity, "_shadow"));
|
||||||
if (shadow) {
|
if (shadow) {
|
||||||
shadowmodels[numshadowmodels++] = &bsp->dmodels[i];
|
shadowmodels[numshadowmodels++] = info;
|
||||||
} else {
|
} else {
|
||||||
shadow = atoi(ValueForKey(entity, "_shadowself"));
|
shadow = atoi(ValueForKey(entity, "_shadowself"));
|
||||||
if (shadow) {
|
if (shadow) {
|
||||||
info->shadowself = true;
|
info->shadowself = true;
|
||||||
selfshadowmodels[numselfshadowmodels++] = &bsp->dmodels[i];
|
selfshadowmodels[numselfshadowmodels++] = info;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -135,9 +135,9 @@ MakeTnodes_embree(const bsp2_t *bsp)
|
||||||
std::vector<const bsp2_dface_t *> skyfaces, solidfaces;
|
std::vector<const bsp2_dface_t *> skyfaces, solidfaces;
|
||||||
|
|
||||||
/* Check against the list of global shadow casters */
|
/* Check against the list of global shadow casters */
|
||||||
for (const dmodel_t *const *model = tracelist; *model; model++) {
|
for (const modelinfo_t *const *model = tracelist; *model; model++) {
|
||||||
for (int i=0; i<(*model)->numfaces; i++) {
|
for (int i=0; i<(*model)->model->numfaces; i++) {
|
||||||
const bsp2_dface_t *face = &bsp->dfaces[(*model)->firstface + i];
|
const bsp2_dface_t *face = &bsp->dfaces[(*model)->model->firstface + i];
|
||||||
const miptex_t *miptex = MiptexForFace(bsp, face);
|
const miptex_t *miptex = MiptexForFace(bsp, face);
|
||||||
|
|
||||||
if (miptex != NULL && !strncmp("sky", miptex->name, 3)) {
|
if (miptex != NULL && !strncmp("sky", miptex->name, 3)) {
|
||||||
|
|
@ -258,7 +258,7 @@ DirtTrace_embree(const vec3_t start, const vec3_t dir, vec_t dist, vec_t *hitdis
|
||||||
|
|
||||||
if (ray.geomID != solidgeom.geomID) {
|
if (ray.geomID != solidgeom.geomID) {
|
||||||
// don't re-check the world's self-shadow model because it's already part of 'scene'
|
// don't re-check the world's self-shadow model because it's already part of 'scene'
|
||||||
if (model->model != tracelist[0]) {
|
if (model->model != tracelist[0]->model) {
|
||||||
RTCScene selfshadowscene = selfshadowSceneForDModel[model->model];
|
RTCScene selfshadowscene = selfshadowSceneForDModel[model->model];
|
||||||
ray = SetupRay(start, dir, dist);
|
ray = SetupRay(start, dir, dist);
|
||||||
rtcIntersect(selfshadowscene, ray);
|
rtcIntersect(selfshadowscene, ray);
|
||||||
|
|
@ -322,7 +322,7 @@ CalcPointsTrace_embree(const vec3_t start, const vec3_t dir, vec_t dist, vec_t *
|
||||||
|
|
||||||
// if there is no hit, but we were tracning on a submodel, also test against the world.
|
// if there is no hit, but we were tracning on a submodel, also test against the world.
|
||||||
if (ray.geomID == RTC_INVALID_GEOMETRY_ID
|
if (ray.geomID == RTC_INVALID_GEOMETRY_ID
|
||||||
&& model->model != tracelist[0]) {
|
&& model->model != tracelist[0]->model) {
|
||||||
ray = SetupRay(start, dir, dist);
|
ray = SetupRay(start, dir, dist);
|
||||||
rtcIntersect(scene, ray);
|
rtcIntersect(scene, ray);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue