From 8a83e3d3517d925beb8b19d647c012e36ff3805f Mon Sep 17 00:00:00 2001 From: Eric Wasylishen Date: Wed, 15 Mar 2017 12:49:15 -0600 Subject: [PATCH] light: BounceLightsForFaceNum(): return indices so we have 1 main copy of the bounce lights --- include/light/bounce.hh | 2 +- light/bounce.cc | 10 ++++++---- light/ltface.cc | 7 +++++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/include/light/bounce.hh b/include/light/bounce.hh index 72a391ee..5397aa64 100644 --- a/include/light/bounce.hh +++ b/include/light/bounce.hh @@ -46,7 +46,7 @@ typedef struct { // public functions const std::vector &BounceLights(); -const std::vector &BounceLightsForFaceNum(int facenum); +const std::vector &BounceLightsForFaceNum(int facenum); void MakeTextureColors (const bsp2_t *bsp); void MakeBounceLights (const globalconfig_t &cfg, const bsp2_t *bsp); /** Returns color components in [0, 255] */ diff --git a/light/bounce.cc b/light/bounce.cc index e0be8506..e08f8ec5 100644 --- a/light/bounce.cc +++ b/light/bounce.cc @@ -48,7 +48,7 @@ using namespace polylib; mutex radlights_lock; map texturecolors; std::vector radlights; -std::map> radlightsByFacenum; // duplicate of `radlights` but indexed by face +std::map> radlightsByFacenum; class patch_t { public: @@ -255,7 +255,9 @@ AddBounceLight(const vec3_t pos, const std::map &colorByStyle, c unique_lock lck { radlights_lock }; radlights.push_back(l); - radlightsByFacenum[Face_GetNum(bsp, face)].push_back(l); + + const int lastBounceLightIndex = static_cast(radlights.size()) - 1; + radlightsByFacenum[Face_GetNum(bsp, face)].push_back(lastBounceLightIndex); } const std::vector &BounceLights() @@ -263,14 +265,14 @@ const std::vector &BounceLights() return radlights; } -const std::vector &BounceLightsForFaceNum(int facenum) +const std::vector &BounceLightsForFaceNum(int facenum) { const auto &vec = radlightsByFacenum.find(facenum); if (vec != radlightsByFacenum.end()) { return vec->second; } - static std::vector empty; + static std::vector empty; return empty; } diff --git a/light/ltface.cc b/light/ltface.cc index afa1b90a..bc98dc73 100644 --- a/light/ltface.cc +++ b/light/ltface.cc @@ -1644,14 +1644,17 @@ LightFace_BounceLightsDebug(const lightsurf_t *lightsurf, lightmapdict_t *lightm // reset all lightmaps to black (lazily) Lightmap_ClearAll(lightmaps); - const std::vector &vpls = BounceLightsForFaceNum(Face_GetNum(lightsurf->bsp, lightsurf->face)); + const std::vector &vpls = BounceLightsForFaceNum(Face_GetNum(lightsurf->bsp, lightsurf->face)); + const std::vector &all_vpls = BounceLights(); /* Overwrite each point with the emitted color... */ for (int i = 0; i < lightsurf->numpoints; i++) { if (lightsurf->occluded[i]) continue; - for (const auto &vpl : vpls) { + for (const auto &vplnum : vpls) { + const bouncelight_t &vpl = all_vpls[vplnum]; + // check for point in polygon (note: could be on the edge of more than one) if (!GLM_EdgePlanes_PointInside(vpl.poly_edgeplanes, vec3_t_to_glm(lightsurf->points[i]))) continue;