light: fix missing textures accidentally activating "suntexture" feature and breaking sunlight

Fixes #376
This commit is contained in:
Eric Wasylishen 2023-09-11 21:44:02 -06:00
parent dedc524f6a
commit 507c315f78
3 changed files with 79 additions and 2 deletions

View File

@ -391,8 +391,10 @@ static void AddSun(const settings::worldspawn_keys &cfg, const qvec3d &sunvec, v
sun.dirt = Dirt_ResolveFlag(cfg, dirtInt);
sun.style = style;
sun.suntexture = suntexture;
sun.suntexture_value = img::find(suntexture);
if (!suntexture.empty())
sun.suntexture_value = img::find(suntexture);
else
sun.suntexture_value = nullptr;
// fmt::print( "sun is using vector {} {} {} light {} color {} {} {} anglescale {} dirt {} resolved to {}\n",
// sun->sunvec[0], sun->sunvec[1], sun->sunvec[2], sun->sunlight.light,
// sun->sunlight.color[0], sun->sunlight.color[1], sun->sunlight.color[2],

69
testmaps/q1_sunlight.map Normal file
View File

@ -0,0 +1,69 @@
// Game: Quake
// Format: Valve
// entity 0
{
"classname" "worldspawn"
"_sunlight" "100"
"_sun_mangle" "0 -80 0"
"wad" "deprecated/free_wad.wad"
"light" "5"
// brush 0
{
( -112 -96 -32 ) ( -112 -95 -32 ) ( -112 -96 -31 ) skip [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -32 -112 -32 ) ( -32 -112 -31 ) ( -31 -112 -32 ) skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -32 -96 -32 ) ( -31 -96 -32 ) ( -32 -95 -32 ) skip [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 96 32 0 ) ( 96 33 0 ) ( 97 32 0 ) sbrick2b [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 96 80 0 ) ( 97 80 0 ) ( 96 80 1 ) skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 128 32 0 ) ( 128 32 1 ) ( 128 33 0 ) skip [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 1
{
( -128 64 0 ) ( -128 65 0 ) ( -128 64 1 ) sky3 [ 0 1 0 0 ] [ 0 0 -1 -16 ] 0 1 1
( 304 -128 -32 ) ( 303 -128 -32 ) ( 304 -128 -31 ) sky3 [ 1 0 0 0 ] [ 0 0 -1 -16 ] 0 1 1
( 176 64 192 ) ( 176 65 192 ) ( 175 64 192 ) sky3 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 176 64 208 ) ( 175 64 208 ) ( 176 65 208 ) sky3 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 176 96 0 ) ( 176 96 1 ) ( 175 96 0 ) sky3 [ 1 0 0 0 ] [ 0 0 -1 -16 ] 0 1 1
( 144 -64 -32 ) ( 144 -64 -31 ) ( 144 -63 -32 ) sky3 [ 0 1 0 0 ] [ 0 0 -1 -16 ] 0 1 1
}
// brush 2
{
( -112 -288 -32 ) ( -112 -287 -32 ) ( -112 -288 -31 ) sbrick2b [ 0 0 -1.0000000000000002 -48 ] [ 0 -1.0000000000000002 0 0 ] 0 1 1
( -32 -128 -32 ) ( -32 -128 -31 ) ( -31 -128 -32 ) sbrick2b [ 1.0000000000000002 0 0 0 ] [ 0 0 1.0000000000000002 0 ] 0 1 1
( 96 -160 0 ) ( 97 -160 0 ) ( 96 -159 0 ) sbrick2b [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 96 -160 192 ) ( 96 -159 192 ) ( 97 -160 192 ) sbrick2b [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 96 -112 0 ) ( 97 -112 0 ) ( 96 -112 1 ) sbrick2b [ 1.0000000000000002 0 0 0 ] [ 0 0 -1.0000000000000002 48 ] 0 1 1
( 128 -160 0 ) ( 128 -160 1 ) ( 128 -159 0 ) sbrick2b [ 0 0 1.0000000000000002 0 ] [ 0 -1.0000000000000002 0 0 ] 0 1 1
}
// brush 3
{
( 128 64 0 ) ( 128 65 0 ) ( 128 64 1 ) sbrick2b [ 0 0 -1.0000000000000002 0 ] [ 0 -1.0000000000000002 0 0 ] 0 1 1
( 304 -128 -32 ) ( 303 -128 -32 ) ( 304 -128 -31 ) sbrick2b [ 1.0000000000000002 0 0 0 ] [ 0 0 1.0000000000000002 0 ] 0 1 1
( 176 64 0 ) ( 176 65 0 ) ( 175 64 0 ) sbrick2b [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 176 64 192 ) ( 175 64 192 ) ( 176 65 192 ) sbrick2b [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 176 96 0 ) ( 176 96 1 ) ( 175 96 0 ) sbrick2b [ 1.0000000000000002 0 0 0 ] [ 0 0 -1.0000000000000002 -32 ] 0 1 1
( 144 -64 -32 ) ( 144 -64 -31 ) ( 144 -63 -32 ) sbrick2b [ 0 0 1.0000000000000002 16 ] [ 0 -1.0000000000000002 0 0 ] 0 1 1
}
// brush 4
{
( -112 -80 -32 ) ( -112 -79 -32 ) ( -112 -80 -31 ) sbrick2b [ 0 0 -1.0000000000000002 -48 ] [ 0 -1.0000000000000002 0 0 ] 0 1 1
( -32 80 -32 ) ( -32 80 -31 ) ( -31 80 -32 ) sbrick2b [ 1.0000000000000002 0 0 0 ] [ 0 0 1.0000000000000002 -16 ] 0 1 1
( 96 48 0 ) ( 97 48 0 ) ( 96 49 0 ) sbrick2b [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 96 48 192 ) ( 96 49 192 ) ( 97 48 192 ) sbrick2b [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 96 96 0 ) ( 97 96 0 ) ( 96 96 1 ) sbrick2b [ 1.0000000000000002 0 0 0 ] [ 0 0 -1.0000000000000002 -32 ] 0 1 1
( 128 48 0 ) ( 128 48 1 ) ( 128 49 0 ) sbrick2b [ 0 0 1.0000000000000002 0 ] [ 0 -1.0000000000000002 0 0 ] 0 1 1
}
// brush 5
{
( -128 64 0 ) ( -128 65 0 ) ( -128 64 1 ) sbrick2b [ 0 0 -1.0000000000000002 0 ] [ 0 -1.0000000000000002 0 0 ] 0 1 1
( 48 -128 -32 ) ( 47 -128 -32 ) ( 48 -128 -31 ) sbrick2b [ 1.0000000000000002 0 0 0 ] [ 0 0 1.0000000000000002 0 ] 0 1 1
( -80 64 0 ) ( -80 65 0 ) ( -81 64 0 ) sbrick2b [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -80 64 192 ) ( -81 64 192 ) ( -80 65 192 ) sbrick2b [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( -80 96 0 ) ( -80 96 1 ) ( -81 96 0 ) sbrick2b [ 1.0000000000000002 0 0 0 ] [ 0 0 -1.0000000000000002 -32 ] 0 1 1
( -112 -64 -32 ) ( -112 -64 -31 ) ( -112 -63 -32 ) sbrick2b [ 0 0 1.0000000000000002 -48 ] [ 0 -1.0000000000000002 0 0 ] 0 1 1
}
}
// entity 1
{
"classname" "info_player_start"
"origin" "0 0 24"
}

View File

@ -793,3 +793,9 @@ TEST_CASE("minlight doesn't bounce")
auto [bsp, bspx, lit] = QbspVisLight_Q1("q1_minlight_nobounce.map", {"-lit"});
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {50, 50, 50}, {0, 0, 0}, {0, 0, 1}, &lit);
}
TEST_CASE("q1_sunlight")
{
auto [bsp, bspx, lit] = QbspVisLight_Q1("q1_sunlight.map", {"-lit"});
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {42, 42, 42}, {0, 0, 0}, {0, 0, 1}, &lit);
}