light: modelinfo: change to storing pointers in std::vector rather than modelinfo_t
This commit is contained in:
parent
6bb842cd47
commit
d7bb75ae97
|
|
@ -116,7 +116,7 @@ byte *lux_filebase; // start of luxfile data
|
||||||
static byte *lux_file_p; // start of free space after luxfile data
|
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
|
||||||
|
|
||||||
std::vector<modelinfo_t> modelinfo;
|
std::vector<modelinfo_t *> modelinfo;
|
||||||
std::vector<const modelinfo_t *> tracelist;
|
std::vector<const modelinfo_t *> tracelist;
|
||||||
std::vector<const modelinfo_t *> selfshadowlist;
|
std::vector<const modelinfo_t *> selfshadowlist;
|
||||||
|
|
||||||
|
|
@ -254,7 +254,7 @@ const modelinfo_t *ModelInfoForFace(const bsp2_t *bsp, int facenum)
|
||||||
if (i == bsp->nummodels) {
|
if (i == bsp->nummodels) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return &modelinfo[i];
|
return modelinfo.at(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
|
|
@ -353,8 +353,6 @@ FindModelInfo(const bsp2_t *bsp, const char *lmscaleoverride)
|
||||||
assert(tracelist.size() == 0);
|
assert(tracelist.size() == 0);
|
||||||
assert(selfshadowlist.size() == 0);
|
assert(selfshadowlist.size() == 0);
|
||||||
|
|
||||||
modelinfo.reserve(bsp->nummodels);
|
|
||||||
|
|
||||||
if (!bsp->nummodels) {
|
if (!bsp->nummodels) {
|
||||||
Error("Corrupt .BSP: bsp->nummodels is 0!");
|
Error("Corrupt .BSP: bsp->nummodels is 0!");
|
||||||
}
|
}
|
||||||
|
|
@ -381,15 +379,15 @@ FindModelInfo(const bsp2_t *bsp, const char *lmscaleoverride)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The world always casts shadows */
|
/* The world always casts shadows */
|
||||||
modelinfo_t world { &bsp->dmodels[0], lightmapscale };
|
modelinfo_t *world = new modelinfo_t { &bsp->dmodels[0], lightmapscale };
|
||||||
world.shadow.setFloatValue(1.0f); /* world always casts shadows */
|
world->shadow.setFloatValue(1.0f); /* world always casts shadows */
|
||||||
modelinfo.push_back(world);
|
modelinfo.push_back(world);
|
||||||
|
tracelist.push_back(world);
|
||||||
tracelist.push_back(&modelinfo[0]);
|
|
||||||
|
|
||||||
for (int i = 1; i < bsp->nummodels; i++) {
|
for (int i = 1; i < bsp->nummodels; i++) {
|
||||||
modelinfo_t info { &bsp->dmodels[i], lightmapscale };
|
modelinfo_t *info = new modelinfo_t { &bsp->dmodels[i], lightmapscale };
|
||||||
|
modelinfo.push_back(info);
|
||||||
|
|
||||||
/* Find the entity for the model */
|
/* Find the entity for the model */
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "*" << i;
|
ss << "*" << i;
|
||||||
|
|
@ -401,34 +399,32 @@ FindModelInfo(const bsp2_t *bsp, const char *lmscaleoverride)
|
||||||
modelname.c_str());
|
modelname.c_str());
|
||||||
|
|
||||||
// apply settings
|
// apply settings
|
||||||
info.settings.setSettings(*entdict, false);
|
info->settings.setSettings(*entdict, false);
|
||||||
|
|
||||||
/* Check if this model will cast shadows (shadow => shadowself) */
|
/* Check if this model will cast shadows (shadow => shadowself) */
|
||||||
if (info.shadow.boolValue()) {
|
if (info->shadow.boolValue()) {
|
||||||
tracelist.push_back(&modelinfo[i]);
|
tracelist.push_back(info);
|
||||||
} else if (info.shadowself.boolValue()){
|
} else if (info->shadowself.boolValue()){
|
||||||
selfshadowlist.push_back(&modelinfo[i]);
|
selfshadowlist.push_back(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set up the offset for rotate_* entities */
|
/* Set up the offset for rotate_* entities */
|
||||||
if (EntDict_StringForKey(*entdict, "classname").find("rotate_") == 0) {
|
if (EntDict_StringForKey(*entdict, "classname").find("rotate_") == 0) {
|
||||||
EntDict_VectorForKey(*entdict, "origin", info.offset);
|
EntDict_VectorForKey(*entdict, "origin", info->offset);
|
||||||
} else {
|
} else {
|
||||||
assert(info.offset[0] == 0);
|
assert(info->offset[0] == 0);
|
||||||
assert(info.offset[1] == 0);
|
assert(info->offset[1] == 0);
|
||||||
assert(info.offset[2] == 0);
|
assert(info->offset[2] == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enable .lit if needed */
|
/* Enable .lit if needed */
|
||||||
// TODO: move elsewhere?
|
// TODO: move elsewhere?
|
||||||
vec3_t white = {255,255,255};
|
vec3_t white = {255,255,255};
|
||||||
if (!VectorCompare(white, *info.minlight_color.vec3Value())) {
|
if (!VectorCompare(white, *info->minlight_color.vec3Value())) {
|
||||||
if (!write_litfile) {
|
if (!write_litfile) {
|
||||||
write_litfile = scaledonly?2:1;
|
write_litfile = scaledonly?2:1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
modelinfo.push_back(info);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(modelinfo.size() == bsp->nummodels);
|
assert(modelinfo.size() == bsp->nummodels);
|
||||||
|
|
@ -593,7 +589,7 @@ CalcualateVertexNormals(const bsp2_t *bsp)
|
||||||
// read _phong and _phong_angle from entities for compatiblity with other qbsp's, at the expense of no
|
// read _phong and _phong_angle from entities for compatiblity with other qbsp's, at the expense of no
|
||||||
// support on func_detail/func_group
|
// support on func_detail/func_group
|
||||||
for (int i=0; i<bsp->nummodels; i++) {
|
for (int i=0; i<bsp->nummodels; i++) {
|
||||||
const modelinfo_t *info = &modelinfo[i];
|
const modelinfo_t *info = modelinfo.at(i);
|
||||||
const uint8_t phongangle_byte = (uint8_t) qmax(0, qmin(255, (int)rint(info->phong_angle.floatValue())));
|
const uint8_t phongangle_byte = (uint8_t) qmax(0, qmin(255, (int)rint(info->phong_angle.floatValue())));
|
||||||
|
|
||||||
if (!phongangle_byte)
|
if (!phongangle_byte)
|
||||||
|
|
@ -796,7 +792,7 @@ LightWorld(bspdata_t *bspdata, qboolean forcedscale)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (i = 0; i < bsp->numfaces; i++)
|
for (i = 0; i < bsp->numfaces; i++)
|
||||||
faces_sup[i].lmscale = modelinfo[0].lightmapscale;
|
faces_sup[i].lmscale = modelinfo.at(0)->lightmapscale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1311,7 +1307,7 @@ void FindDebugFace(const bsp2_t *bsp)
|
||||||
dump_facenum = facenum;
|
dump_facenum = facenum;
|
||||||
|
|
||||||
const modelinfo_t *mi = ModelInfoForFace(bsp, facenum);
|
const modelinfo_t *mi = ModelInfoForFace(bsp, facenum);
|
||||||
int modelnum = mi - &modelinfo.front();
|
int modelnum = (mi->model - bsp->dmodels);
|
||||||
|
|
||||||
const char *texname = Face_TextureName(bsp, f);
|
const char *texname = Face_TextureName(bsp, f);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue