test_ltface: refactor to allow q1 tests as well

This commit is contained in:
Eric Wasylishen 2022-12-20 00:19:05 -07:00
parent 35fe26b7a6
commit bf75ae8717
1 changed files with 34 additions and 19 deletions

View File

@ -15,8 +15,8 @@ enum class runvis_t {
no, yes
};
static testresults_t LoadTestmap(const std::filesystem::path &name, std::vector<std::string> extra_args,
runvis_t run_vis = runvis_t::no)
static testresults_t QbspVisLight_Common(const std::filesystem::path &name, std::vector<std::string> extra_qbsp_args,
std::vector<std::string> extra_light_args, runvis_t run_vis)
{
auto map_path = std::filesystem::path(testmaps_dir) / name;
@ -25,13 +25,16 @@ static testresults_t LoadTestmap(const std::filesystem::path &name, std::vector<
auto wal_metadata_path = std::filesystem::path(testmaps_dir) / "q2_wal_metadata";
std::vector<std::string> args{
std::vector<std::string> args
{
"", // the exe path, which we're ignoring in this case
"-noverbose",
"-q2bsp",
"-path",
wal_metadata_path.string()
"-noverbose"
};
for (auto &extra : extra_qbsp_args) {
args.push_back(extra);
}
args.push_back("-path");
args.push_back(wal_metadata_path.string());
args.push_back(map_path.string());
args.push_back(bsp_path.string());
@ -59,7 +62,7 @@ static testresults_t LoadTestmap(const std::filesystem::path &name, std::vector<
"-path",
wal_metadata_path.string()
};
for (auto &arg : extra_args) {
for (auto &arg : extra_light_args) {
light_args.push_back(arg);
}
light_args.push_back(bsp_path.string());
@ -83,8 +86,20 @@ static testresults_t LoadTestmap(const std::filesystem::path &name, std::vector<
}
}
static testresults_t QbspVisLight_Q1(const std::filesystem::path &name, std::vector<std::string> extra_light_args,
runvis_t run_vis = runvis_t::no)
{
return QbspVisLight_Common(name, {}, extra_light_args, run_vis);
}
static testresults_t QbspVisLight_Q2(const std::filesystem::path &name, std::vector<std::string> extra_light_args,
runvis_t run_vis = runvis_t::no)
{
return QbspVisLight_Common(name, {"-q2bsp"}, extra_light_args, run_vis);
}
TEST_CASE("-world_units_per_luxel") {
LoadTestmap("q2_lightmap_custom_scale.map", {"-world_units_per_luxel", "8"});
QbspVisLight_Q2("q2_lightmap_custom_scale.map", {"-world_units_per_luxel", "8"});
}
TEST_CASE("emissive cube artifacts") {
@ -100,7 +115,7 @@ TEST_CASE("emissive cube artifacts") {
//
// "_surflight_rescale" "0"
//
auto [bsp, bspx] = LoadTestmap("light_q2_emissive_cube.map", {"-threads", "1", "-world_units_per_luxel", "4", "-novanilla"});
auto [bsp, bspx] = QbspVisLight_Q2("light_q2_emissive_cube.map", {"-threads", "1", "-world_units_per_luxel", "4", "-novanilla"});
const auto start = qvec3d{1044, -1244, 880};
const auto end = qvec3d{1044, -1272, 880};
@ -130,7 +145,7 @@ TEST_CASE("emissive cube artifacts") {
TEST_CASE("-novanilla + -world_units_per_luxel")
{
auto [bsp, bspx] = LoadTestmap("q2_lightmap_custom_scale.map", {"-novanilla", "-world_units_per_luxel", "8"});
auto [bsp, bspx] = QbspVisLight_Q2("q2_lightmap_custom_scale.map", {"-novanilla", "-world_units_per_luxel", "8"});
for (auto &face : bsp.dfaces) {
CHECK(face.lightofs == -1);
@ -190,7 +205,7 @@ static void CheckFaceLuxelsNonBlack(const mbsp_t &bsp, const mface_t &face)
}
TEST_CASE("emissive lights") {
auto [bsp, bspx] = LoadTestmap("q2_light_flush.map", {});
auto [bsp, bspx] = QbspVisLight_Q2("q2_light_flush.map", {});
REQUIRE(bspx.empty());
{
@ -209,13 +224,13 @@ TEST_CASE("emissive lights") {
}
TEST_CASE("q2_phong_doesnt_cross_contents") {
auto [bsp, bspx] = LoadTestmap("q2_phong_doesnt_cross_contents.map", {"-wrnormals"});
auto [bsp, bspx] = QbspVisLight_Q2("q2_phong_doesnt_cross_contents.map", {"-wrnormals"});
}
TEST_CASE("q2_minlight_nomottle") {
INFO("_minlightMottle 0 works on worldspawn");
auto [bsp, bspx] = LoadTestmap("q2_minlight_nomottle.map", {});
auto [bsp, bspx] = QbspVisLight_Q2("q2_minlight_nomottle.map", {});
auto *face = BSP_FindFaceAtPoint(&bsp, &bsp.dmodels[0], {276, 84, 32});
REQUIRE(face);
@ -228,7 +243,7 @@ TEST_CASE("q2_minlight_nomottle") {
TEST_CASE("q2_dirt") {
INFO("liquids don't cast dirt");
auto [bsp, bspx] = LoadTestmap("q2_dirt.map", {});
auto [bsp, bspx] = QbspVisLight_Q2("q2_dirt.map", {});
auto *face_under_lava = BSP_FindFaceAtPoint(&bsp, &bsp.dmodels[0], {104, 112, 48});
REQUIRE(face_under_lava);
@ -241,7 +256,7 @@ TEST_CASE("q2_dirt") {
TEST_CASE("q2_light_translucency") {
INFO("liquids cast translucent colored shadows (sampling texture) by default");
auto [bsp, bspx] = LoadTestmap("q2_light_translucency.map", {});
auto [bsp, bspx] = QbspVisLight_Q2("q2_light_translucency.map", {});
{
auto *face_under_water = BSP_FindFaceAtPoint(&bsp, &bsp.dmodels[0], {152, -96, 32});
@ -305,7 +320,7 @@ TEST_CASE("-visapprox vis with opaque liquids") {
for (const auto& map : maps) {
SUBCASE(map.c_str()) {
auto [bsp, bspx] = LoadTestmap(map, {"-visapprox", "vis"}, runvis_t::yes);
auto [bsp, bspx] = QbspVisLight_Q2(map, {"-visapprox", "vis"}, runvis_t::yes);
auto *ceil_face = BSP_FindFaceAtPoint(&bsp, &bsp.dmodels[0], {968, 1368, 1248});
REQUIRE(ceil_face);
@ -326,7 +341,7 @@ TEST_CASE("negative lights work") {
for (const auto& map : maps) {
SUBCASE(map.c_str()) {
auto [bsp, bspx] = LoadTestmap(map, {});
auto [bsp, bspx] = QbspVisLight_Q2(map, {});
auto *face_under_negative_light = BSP_FindFaceAtPoint(&bsp, &bsp.dmodels[0], {632, 1304, 960});
REQUIRE(face_under_negative_light);
@ -337,7 +352,7 @@ TEST_CASE("negative lights work") {
}
TEST_CASE("light channel mask (_object_channel_mask, _light_channel_mask, _shadow_channel_mask)") {
auto [bsp, bspx] = LoadTestmap("q2_light_group.map", {});
auto [bsp, bspx] = QbspVisLight_Q2("q2_light_group.map", {});
REQUIRE(4 == bsp.dmodels.size());
{