diff --git a/include/light/light.hh b/include/light/light.hh index b8015fff..edf7c0ad 100644 --- a/include/light/light.hh +++ b/include/light/light.hh @@ -157,7 +157,8 @@ typedef enum { debugmode_dirt, debugmode_bounce, debugmode_bouncelights, - debugmode_contribfaces + debugmode_contribfaces, + debugmode_debugoccluded } debugmode_t; extern debugmode_t debugmode; diff --git a/light/light.cc b/light/light.cc index 91c44a6a..81881f7f 100644 --- a/light/light.cc +++ b/light/light.cc @@ -995,6 +995,9 @@ light_main(int argc, const char **argv) ParseVec3(dump_face_point, &i, argc, argv); dump_face = true; + } else if ( !strcmp( argv[ i ], "-debugoccluded" ) ) { + CheckNoDebugModeSet(); + debugmode = debugmode_debugoccluded; } else if ( !strcmp( argv[ i ], "-verbose" ) ) { verbose_log = true; } else if ( !strcmp( argv[ i ], "-help" ) ) { diff --git a/light/ltface.cc b/light/ltface.cc index 5ad3dd36..1a7939dd 100644 --- a/light/ltface.cc +++ b/light/ltface.cc @@ -1729,6 +1729,26 @@ LightFace_ContribFacesDebug(const lightsurf_t *lightsurf, lightmapdict_t *lightm Lightmap_Save(lightmaps, lightsurf, lightmap, 0); } +static void +LightFace_OccludedDebug(const lightsurf_t *lightsurf, lightmapdict_t *lightmaps) +{ + Q_assert(debugmode == debugmode_debugoccluded); + + /* use a style 0 light map */ + lightmap_t *lightmap = Lightmap_ForStyle(lightmaps, 0, lightsurf); + + /* Overwrite each point, red=occluded, green=ok */ + for (int i = 0; i < lightsurf->numpoints; i++) { + lightsample_t *sample = &lightmap->samples[i]; + if (lightsurf->occluded[i]) + glm_to_vec3_t(glm::vec3(255,0,0), sample->color); + else + glm_to_vec3_t(glm::vec3(0,255,0), sample->color); + } + + Lightmap_Save(lightmaps, lightsurf, lightmap, 0); +} + /* Dirtmapping borrowed from q3map2, originally by RaP7oR */ @@ -2518,6 +2538,9 @@ LightFace(const bsp2_t *bsp, bsp2_dface_t *face, facesup_t *facesup, const globa if (debugmode == debugmode_contribfaces) LightFace_ContribFacesDebug(lightsurf, lightmaps); + if (debugmode == debugmode_debugoccluded) + LightFace_OccludedDebug(lightsurf, lightmaps); + /* Apply gamma, rangescale, and clamp */ LightFace_ScaleAndClamp(lightsurf, lightmaps);