build: only use <fmt/core.h>, other headers have a heavy compilation time impact
This commit is contained in:
parent
33ffec3424
commit
7691706bda
|
|
@ -24,7 +24,7 @@
|
||||||
#include <common/settings.hh>
|
#include <common/settings.hh>
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <fmt/ostream.h>
|
|
||||||
#include <common/json.hh>
|
#include <common/json.hh>
|
||||||
#include "common/fs.hh"
|
#include "common/fs.hh"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@
|
||||||
#include <common/mathlib.hh>
|
#include <common/mathlib.hh>
|
||||||
#include <common/fs.hh>
|
#include <common/fs.hh>
|
||||||
#include <common/settings.hh>
|
#include <common/settings.hh>
|
||||||
|
#include <common/ostream.hh>
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
@ -37,7 +38,6 @@
|
||||||
#include <algorithm> // std::sort
|
#include <algorithm> // std::sort
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <fmt/ostream.h>
|
|
||||||
|
|
||||||
/* FIXME - share header with qbsp, etc. */
|
/* FIXME - share header with qbsp, etc. */
|
||||||
struct wadinfo_t
|
struct wadinfo_t
|
||||||
|
|
@ -848,7 +848,7 @@ int bsputil_main(int argc, char **argv)
|
||||||
for (const auto &ent : ents.entities) {
|
for (const auto &ent : ents.entities) {
|
||||||
strm << "{\n";
|
strm << "{\n";
|
||||||
for (const auto &epair : ent.epairs) {
|
for (const auto &epair : ent.epairs) {
|
||||||
fmt::print(strm, "\"{}\" \"{}\"\n", epair.first, epair.second);
|
ewt::print(strm, "\"{}\" \"{}\"\n", epair.first, epair.second);
|
||||||
}
|
}
|
||||||
if (!ent.map_brushes.empty()) {
|
if (!ent.map_brushes.empty()) {
|
||||||
strm << ent.map_brushes;
|
strm << ent.map_brushes;
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ add_library(common STATIC
|
||||||
../include/common/settings.hh
|
../include/common/settings.hh
|
||||||
../include/common/prtfile.hh
|
../include/common/prtfile.hh
|
||||||
../include/common/vectorutils.hh
|
../include/common/vectorutils.hh
|
||||||
|
../include/common/ostream.hh
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(common ${CMAKE_THREAD_LIBS_INIT} TBB::tbb TBB::tbbmalloc fmt::fmt nlohmann_json::nlohmann_json)
|
target_link_libraries(common ${CMAKE_THREAD_LIBS_INIT} TBB::tbb TBB::tbbmalloc fmt::fmt nlohmann_json::nlohmann_json)
|
||||||
|
|
|
||||||
|
|
@ -21,11 +21,11 @@
|
||||||
#include <common/log.hh>
|
#include <common/log.hh>
|
||||||
#include <common/cmdlib.hh>
|
#include <common/cmdlib.hh>
|
||||||
#include <common/bspfile.hh>
|
#include <common/bspfile.hh>
|
||||||
|
#include <common/ostream.hh>
|
||||||
|
|
||||||
#include <sstream>
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <fmt/ostream.h>
|
#include <fmt/core.h>
|
||||||
#include <common/json.hh>
|
#include <common/json.hh>
|
||||||
#include "common/fs.hh"
|
#include "common/fs.hh"
|
||||||
#include "common/imglib.hh"
|
#include "common/imglib.hh"
|
||||||
|
|
@ -37,13 +37,13 @@
|
||||||
|
|
||||||
static std::string hex_string(const uint8_t *bytes, const size_t count)
|
static std::string hex_string(const uint8_t *bytes, const size_t count)
|
||||||
{
|
{
|
||||||
std::stringstream str;
|
std::string str;
|
||||||
|
|
||||||
for (size_t i = 0; i < count; ++i) {
|
for (size_t i = 0; i < count; ++i) {
|
||||||
fmt::print(str, "{:x}", bytes[i]);
|
fmt::format_to(std::back_inserter(str), "{:x}", bytes[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return str.str();
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -504,14 +504,14 @@ static void export_obj_and_lightmaps(const mbsp_t &bsp, const bspxentries_t &bsp
|
||||||
const int vertnum = Face_VertexAtIndex(bsp, face, i);
|
const int vertnum = Face_VertexAtIndex(bsp, face, i);
|
||||||
const qvec3f normal = bsp->dplanes[face->planenum].normal;
|
const qvec3f normal = bsp->dplanes[face->planenum].normal;
|
||||||
const qvec3f &pos = bsp->dvertexes[vertnum];
|
const qvec3f &pos = bsp->dvertexes[vertnum];
|
||||||
fmt::print(f, "v {:.9} {:.9} {:.9}\n", pos[0], pos[1], pos[2]);
|
ewt::print(f, "v {:.9} {:.9} {:.9}\n", pos[0], pos[1], pos[2]);
|
||||||
fmt::print(f, "vn {:.9} {:.9} {:.9}\n", normal[0], normal[1], normal[2]);
|
ewt::print(f, "vn {:.9} {:.9} {:.9}\n", normal[0], normal[1], normal[2]);
|
||||||
|
|
||||||
qvec2f tc = tcs[i];
|
qvec2f tc = tcs[i];
|
||||||
|
|
||||||
tc[1] = 1.0 - tc[1];
|
tc[1] = 1.0 - tc[1];
|
||||||
|
|
||||||
fmt::print(f, "vt {:.9} {:.9}\n", tc[0], tc[1]);
|
ewt::print(f, "vt {:.9} {:.9}\n", tc[0], tc[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
f << "f";
|
f << "f";
|
||||||
|
|
@ -519,7 +519,7 @@ static void export_obj_and_lightmaps(const mbsp_t &bsp, const bspxentries_t &bsp
|
||||||
// .obj vertexes start from 1
|
// .obj vertexes start from 1
|
||||||
// .obj faces are CCW, quake is CW, so reverse the order
|
// .obj faces are CCW, quake is CW, so reverse the order
|
||||||
const int vertindex = vertcount + (face->numedges - 1 - i) + 1;
|
const int vertindex = vertcount + (face->numedges - 1 - i) + 1;
|
||||||
fmt::print(f, " {0}/{0}/{0}", vertindex);
|
ewt::print(f, " {0}/{0}/{0}", vertindex);
|
||||||
}
|
}
|
||||||
f << '\n';
|
f << '\n';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
#include <common/polylib.hh>
|
#include <common/polylib.hh>
|
||||||
#include <common/fs.hh>
|
#include <common/fs.hh>
|
||||||
#include <common/log.hh>
|
#include <common/log.hh>
|
||||||
|
#include <common/ostream.hh>
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
@ -37,7 +38,6 @@
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
#include <fmt/core.h>
|
#include <fmt/core.h>
|
||||||
#include <fmt/ostream.h>
|
|
||||||
|
|
||||||
#include "tbb/parallel_for.h"
|
#include "tbb/parallel_for.h"
|
||||||
|
|
||||||
|
|
@ -152,10 +152,10 @@ struct compiled_brush_t
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source) {
|
if (source) {
|
||||||
fmt::print(stream, "// generated from brush #{}\n", static_cast<ptrdiff_t>(source - bsp->dbrushes.data()));
|
ewt::print(stream, "// generated from brush #{}\n", static_cast<ptrdiff_t>(source - bsp->dbrushes.data()));
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt::print(stream, "{{\n");
|
ewt::print(stream, "{{\n");
|
||||||
|
|
||||||
for (auto &side : sides) {
|
for (auto &side : sides) {
|
||||||
planepoints p;
|
planepoints p;
|
||||||
|
|
@ -177,11 +177,11 @@ struct compiled_brush_t
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
fmt::print(stream, "// side #{}: {} {}\n", static_cast<ptrdiff_t>(side.source -
|
ewt::print(stream, "// side #{}: {} {}\n", static_cast<ptrdiff_t>(side.source -
|
||||||
bsp->dbrushsides.data()), side.plane.normal, side.plane.dist);
|
bsp->dbrushsides.data()), side.plane.normal, side.plane.dist);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fmt::print(stream, "( {} ) ( {} ) ( {} ) {} [ {} {} {} {} ] [ {} {} {} {} ] {} {} {}", p[0], p[1], p[2],
|
ewt::print(stream, "( {} ) ( {} ) ( {} ) {} [ {} {} {} {} ] [ {} {} {} {} ] {} {} {}", p[0], p[1], p[2],
|
||||||
side.texture_name, side.valve.axis.at(0, 0), side.valve.axis.at(0, 1), side.valve.axis.at(0, 2),
|
side.texture_name, side.valve.axis.at(0, 0), side.valve.axis.at(0, 1), side.valve.axis.at(0, 2),
|
||||||
side.valve.shift[0], side.valve.axis.at(1, 0), side.valve.axis.at(1, 1), side.valve.axis.at(1, 2),
|
side.valve.shift[0], side.valve.axis.at(1, 0), side.valve.axis.at(1, 1), side.valve.axis.at(1, 2),
|
||||||
side.valve.shift[1], 0.0, side.valve.scale[0], side.valve.scale[1]);
|
side.valve.shift[1], 0.0, side.valve.scale[0], side.valve.scale[1]);
|
||||||
|
|
@ -209,14 +209,14 @@ struct compiled_brush_t
|
||||||
if (!meta || !((meta->contents & ~(Q2_CONTENTS_SOLID | Q2_CONTENTS_WINDOW)) ==
|
if (!meta || !((meta->contents & ~(Q2_CONTENTS_SOLID | Q2_CONTENTS_WINDOW)) ==
|
||||||
(contents.native & ~(Q2_CONTENTS_SOLID | Q2_CONTENTS_WINDOW)) &&
|
(contents.native & ~(Q2_CONTENTS_SOLID | Q2_CONTENTS_WINDOW)) &&
|
||||||
meta->flags == side.flags.native && meta->value == side.value)) {
|
meta->flags == side.flags.native && meta->value == side.value)) {
|
||||||
fmt::print(stream, " {} {} {}", contents.native, side.flags.native, side.value);
|
ewt::print(stream, " {} {} {}", contents.native, side.flags.native, side.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt::print(stream, "\n");
|
ewt::print(stream, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt::print(stream, "}}\n");
|
ewt::print(stream, "}}\n");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -1099,7 +1099,7 @@ static void DecompileEntity(
|
||||||
}
|
}
|
||||||
|
|
||||||
// First, print the key/values for this entity
|
// First, print the key/values for this entity
|
||||||
fmt::print(file, "{{\n");
|
ewt::print(file, "{{\n");
|
||||||
for (const auto &keyValue : dict) {
|
for (const auto &keyValue : dict) {
|
||||||
if (keyValue.first == "model" && !keyValue.second.empty() && keyValue.second[0] == '*') {
|
if (keyValue.first == "model" && !keyValue.second.empty() && keyValue.second[0] == '*') {
|
||||||
// strip "model" "*NNN" key/values
|
// strip "model" "*NNN" key/values
|
||||||
|
|
@ -1127,7 +1127,7 @@ static void DecompileEntity(
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt::print(file, "\"{}\" \"{}\"\n", keyValue.first, keyValue.second);
|
ewt::print(file, "\"{}\" \"{}\"\n", keyValue.first, keyValue.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::vector<compiled_brush_t>> compiledBrushes;
|
std::vector<std::vector<compiled_brush_t>> compiledBrushes;
|
||||||
|
|
@ -1312,7 +1312,7 @@ static void DecompileEntity(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt::print(file, "}}\n");
|
ewt::print(file, "}}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void DecompileBSP(const mbsp_t *bsp, const decomp_options &options, std::ofstream &file)
|
void DecompileBSP(const mbsp_t *bsp, const decomp_options &options, std::ofstream &file)
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,12 @@
|
||||||
|
|
||||||
#include <common/entdata.h>
|
#include <common/entdata.h>
|
||||||
|
|
||||||
#include <sstream>
|
|
||||||
#include <cstdlib> // atoi()
|
#include <cstdlib> // atoi()
|
||||||
|
|
||||||
#include <common/bsputils.hh>
|
#include <common/bsputils.hh>
|
||||||
#include <common/parser.hh>
|
#include <common/parser.hh>
|
||||||
|
|
||||||
#include <fmt/ostream.h>
|
#include <fmt/core.h>
|
||||||
|
|
||||||
entdict_t::entdict_t(std::initializer_list<keyvalue_t> l)
|
entdict_t::entdict_t(std::initializer_list<keyvalue_t> l)
|
||||||
: keyvalues(l)
|
: keyvalues(l)
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,9 @@
|
||||||
#include <common/log.hh>
|
#include <common/log.hh>
|
||||||
#include <common/fs.hh>
|
#include <common/fs.hh>
|
||||||
#include <common/bspfile.hh>
|
#include <common/bspfile.hh>
|
||||||
|
#include <common/ostream.hh>
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <fmt/ostream.h>
|
|
||||||
|
|
||||||
constexpr const char *PORTALFILE = "PRT1";
|
constexpr const char *PORTALFILE = "PRT1";
|
||||||
constexpr const char *PORTALFILE2 = "PRT2";
|
constexpr const char *PORTALFILE2 = "PRT2";
|
||||||
|
|
@ -175,11 +175,11 @@ prtfile_t LoadPrtFile(const fs::path &name, const bspversion_t *loadversion)
|
||||||
|
|
||||||
static void WriteDebugPortal(const polylib::winding_t &w, std::ofstream &portalFile)
|
static void WriteDebugPortal(const polylib::winding_t &w, std::ofstream &portalFile)
|
||||||
{
|
{
|
||||||
fmt::print(portalFile, "{} {} {} ", w.size(), 0, 0);
|
ewt::print(portalFile, "{} {} {} ", w.size(), 0, 0);
|
||||||
for (int i = 0; i < w.size(); i++) {
|
for (int i = 0; i < w.size(); i++) {
|
||||||
fmt::print(portalFile, "({} {} {}) ", w.at(i)[0], w.at(i)[1], w.at(i)[2]);
|
ewt::print(portalFile, "({} {} {}) ", w.at(i)[0], w.at(i)[1], w.at(i)[2]);
|
||||||
}
|
}
|
||||||
fmt::print(portalFile, "\n");
|
ewt::print(portalFile, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void WriteDebugPortals(const std::vector<polylib::winding_t> &portals, fs::path name)
|
void WriteDebugPortals(const std::vector<polylib::winding_t> &portals, fs::path name)
|
||||||
|
|
@ -190,9 +190,9 @@ void WriteDebugPortals(const std::vector<polylib::winding_t> &portals, fs::path
|
||||||
if (!portal_file)
|
if (!portal_file)
|
||||||
FError("Failed to open {}: {}", name, strerror(errno));
|
FError("Failed to open {}: {}", name, strerror(errno));
|
||||||
|
|
||||||
fmt::print(portal_file, "PRT1\n");
|
ewt::print(portal_file, "PRT1\n");
|
||||||
fmt::print(portal_file, "{}\n", 0);
|
ewt::print(portal_file, "{}\n", 0);
|
||||||
fmt::print(portal_file, "{}\n", portal_count);
|
ewt::print(portal_file, "{}\n", portal_count);
|
||||||
for (auto &p : portals) {
|
for (auto &p : portals) {
|
||||||
WriteDebugPortal(p, portal_file);
|
WriteDebugPortal(p, portal_file);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
/* Copyright (C) 2023 Eric Wasylishen
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
See file, 'COPYING', for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <fmt/core.h>
|
||||||
|
#include <ostream>
|
||||||
|
#include <iterator>
|
||||||
|
|
||||||
|
namespace ewt
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* replacement for fmt::print from fmt/ostream.h with less compilation time impact.
|
||||||
|
*/
|
||||||
|
template<typename... T>
|
||||||
|
inline void print(std::ostream &stream, fmt::format_string<T...> format, T &&...args)
|
||||||
|
{
|
||||||
|
fmt::vformat_to(std::ostream_iterator<char>(stream), format, fmt::make_format_args(args...));
|
||||||
|
}
|
||||||
|
} // namespace ewt
|
||||||
|
|
@ -21,7 +21,6 @@
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fmt/ostream.h>
|
|
||||||
#include <fmt/chrono.h>
|
#include <fmt/chrono.h>
|
||||||
|
|
||||||
#include <light/lightgrid.hh>
|
#include <light/lightgrid.hh>
|
||||||
|
|
@ -39,6 +38,7 @@
|
||||||
#include <common/fs.hh>
|
#include <common/fs.hh>
|
||||||
#include <common/imglib.hh>
|
#include <common/imglib.hh>
|
||||||
#include <common/parallel.hh>
|
#include <common/parallel.hh>
|
||||||
|
#include <common/ostream.hh>
|
||||||
|
|
||||||
#if defined(HAVE_EMBREE) && defined(__SSE2__)
|
#if defined(HAVE_EMBREE) && defined(__SSE2__)
|
||||||
#include <xmmintrin.h>
|
#include <xmmintrin.h>
|
||||||
|
|
@ -1206,8 +1206,8 @@ static void ExportObjFace(std::ofstream &f, const mbsp_t *bsp, const mface_t *fa
|
||||||
const int vertnum = Face_VertexAtIndex(bsp, face, i);
|
const int vertnum = Face_VertexAtIndex(bsp, face, i);
|
||||||
const qvec3f normal = GetSurfaceVertexNormal(bsp, face, i).normal;
|
const qvec3f normal = GetSurfaceVertexNormal(bsp, face, i).normal;
|
||||||
const qvec3f &pos = bsp->dvertexes[vertnum];
|
const qvec3f &pos = bsp->dvertexes[vertnum];
|
||||||
fmt::print(f, "v {:.9} {:.9} {:.9}\n", pos[0], pos[1], pos[2]);
|
ewt::print(f, "v {:.9} {:.9} {:.9}\n", pos[0], pos[1], pos[2]);
|
||||||
fmt::print(f, "vn {:.9} {:.9} {:.9}\n", normal[0], normal[1], normal[2]);
|
ewt::print(f, "vn {:.9} {:.9} {:.9}\n", normal[0], normal[1], normal[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
f << "f";
|
f << "f";
|
||||||
|
|
@ -1215,7 +1215,7 @@ static void ExportObjFace(std::ofstream &f, const mbsp_t *bsp, const mface_t *fa
|
||||||
// .obj vertexes start from 1
|
// .obj vertexes start from 1
|
||||||
// .obj faces are CCW, quake is CW, so reverse the order
|
// .obj faces are CCW, quake is CW, so reverse the order
|
||||||
const int vertindex = *vertcount + (face->numedges - 1 - i) + 1;
|
const int vertindex = *vertcount + (face->numedges - 1 - i) + 1;
|
||||||
fmt::print(f, " {}//{}", vertindex, vertindex);
|
ewt::print(f, " {}//{}", vertindex, vertindex);
|
||||||
}
|
}
|
||||||
f << '\n';
|
f << '\n';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,6 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <fmt/ostream.h>
|
|
||||||
#include <fmt/chrono.h>
|
|
||||||
|
|
||||||
#include <light/light.hh>
|
#include <light/light.hh>
|
||||||
#include <light/entities.hh>
|
#include <light/entities.hh>
|
||||||
|
|
|
||||||
|
|
@ -32,13 +32,13 @@
|
||||||
#include <common/log.hh>
|
#include <common/log.hh>
|
||||||
#include <common/bsputils.hh>
|
#include <common/bsputils.hh>
|
||||||
#include <common/qvec.hh>
|
#include <common/qvec.hh>
|
||||||
|
#include <common/ostream.hh>
|
||||||
|
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <fmt/ostream.h>
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
@ -275,12 +275,12 @@ static void CalcPoints_Debug(const lightsurf_t *surf, const mbsp_t *bsp)
|
||||||
|
|
||||||
f << "{\n";
|
f << "{\n";
|
||||||
f << "\"classname\" \"light\"\n";
|
f << "\"classname\" \"light\"\n";
|
||||||
fmt::print(f, "\"origin\" \"{}\"\n", point);
|
ewt::print(f, "\"origin\" \"{}\"\n", point);
|
||||||
fmt::print(f, "\"mangle\" \"{}\"\n", mangle);
|
ewt::print(f, "\"mangle\" \"{}\"\n", mangle);
|
||||||
fmt::print(f, "\"face\" \"{}\"\n", sample.realfacenum);
|
ewt::print(f, "\"face\" \"{}\"\n", sample.realfacenum);
|
||||||
fmt::print(f, "\"occluded\" \"{}\"\n", sample.occluded);
|
ewt::print(f, "\"occluded\" \"{}\"\n", sample.occluded);
|
||||||
fmt::print(f, "\"s\" \"{}\"\n", s);
|
ewt::print(f, "\"s\" \"{}\"\n", s);
|
||||||
fmt::print(f, "\"t\" \"{}\"\n", t);
|
ewt::print(f, "\"t\" \"{}\"\n", t);
|
||||||
f << "}\n";
|
f << "}\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2533,7 +2533,7 @@ static void WritePPM(const fs::path &fname, int width, int height, const uint8_t
|
||||||
qfile_t file = SafeOpenWrite(fname);
|
qfile_t file = SafeOpenWrite(fname);
|
||||||
|
|
||||||
// see: http://netpbm.sourceforge.net/doc/ppm.html
|
// see: http://netpbm.sourceforge.net/doc/ppm.html
|
||||||
fmt::print(file.get(), "P6 {} {} 255 ", width, height);
|
ewt::print(file.get(), "P6 {} {} 255 ", width, height);
|
||||||
int bytes = width * height * 3;
|
int bytes = width * height * 3;
|
||||||
Q_assert(bytes == SafeWrite(file, rgbdata, bytes));
|
Q_assert(bytes == SafeWrite(file, rgbdata, bytes));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,12 +22,12 @@
|
||||||
|
|
||||||
#include <qbsp/qbsp.hh>
|
#include <qbsp/qbsp.hh>
|
||||||
#include <common/log.hh>
|
#include <common/log.hh>
|
||||||
|
#include <common/ostream.hh>
|
||||||
#include <qbsp/brush.hh>
|
#include <qbsp/brush.hh>
|
||||||
#include <qbsp/map.hh>
|
#include <qbsp/map.hh>
|
||||||
|
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <fmt/ostream.h>
|
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
static std::ofstream InitObjFile(const std::string &filesuffix)
|
static std::ofstream InitObjFile(const std::string &filesuffix)
|
||||||
|
|
@ -66,23 +66,23 @@ static void ExportObjFace(
|
||||||
// export the vertices and uvs
|
// export the vertices and uvs
|
||||||
for (int i = 0; i < w.size(); i++) {
|
for (int i = 0; i < w.size(); i++) {
|
||||||
const qvec3d &pos = w[i];
|
const qvec3d &pos = w[i];
|
||||||
fmt::print(f, "v {:.9} {:.9} {:.9}\n", pos[0], pos[1], pos[2]);
|
ewt::print(f, "v {:.9} {:.9} {:.9}\n", pos[0], pos[1], pos[2]);
|
||||||
|
|
||||||
qvec3d uv = texinfo.vecs.uvs(pos, width, height);
|
qvec3d uv = texinfo.vecs.uvs(pos, width, height);
|
||||||
|
|
||||||
// not sure why -v is needed, .obj uses (0, 0) in the top left apparently?
|
// not sure why -v is needed, .obj uses (0, 0) in the top left apparently?
|
||||||
fmt::print(f, "vt {:.9} {:.9}\n", uv[0], -uv[1]);
|
ewt::print(f, "vt {:.9} {:.9}\n", uv[0], -uv[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mtlname.empty()) {
|
if (!mtlname.empty()) {
|
||||||
fmt::print(f, "usemtl {}\n", mtlname);
|
ewt::print(f, "usemtl {}\n", mtlname);
|
||||||
}
|
}
|
||||||
f << 'f';
|
f << 'f';
|
||||||
for (int i = 0; i < w.size(); i++) {
|
for (int i = 0; i < w.size(); i++) {
|
||||||
// .obj vertexes start from 1
|
// .obj vertexes start from 1
|
||||||
// .obj faces are CCW, quake is CW, so reverse the order
|
// .obj faces are CCW, quake is CW, so reverse the order
|
||||||
const int vertindex = *vertcount + (w.size() - 1 - i) + 1;
|
const int vertindex = *vertcount + (w.size() - 1 - i) + 1;
|
||||||
fmt::print(f, " {}/{}", vertindex, vertindex);
|
ewt::print(f, " {}/{}", vertindex, vertindex);
|
||||||
}
|
}
|
||||||
f << '\n';
|
f << '\n';
|
||||||
|
|
||||||
|
|
@ -92,9 +92,9 @@ static void ExportObjFace(
|
||||||
static void WriteContentsMaterial(std::ofstream &mtlf, contentflags_t contents, float r, float g, float b)
|
static void WriteContentsMaterial(std::ofstream &mtlf, contentflags_t contents, float r, float g, float b)
|
||||||
{
|
{
|
||||||
// fixme-brushbsp
|
// fixme-brushbsp
|
||||||
fmt::print(mtlf, "newmtl contents{}\n", contents.native);
|
ewt::print(mtlf, "newmtl contents{}\n", contents.native);
|
||||||
mtlf << "Ka 0 0 0\n";
|
mtlf << "Ka 0 0 0\n";
|
||||||
fmt::print(mtlf, "Kd {} {} {}\n", r, g, b);
|
ewt::print(mtlf, "Kd {} {} {}\n", r, g, b);
|
||||||
mtlf << "Ks 0 0 0\n";
|
mtlf << "Ks 0 0 0\n";
|
||||||
mtlf << "illum 0\n";
|
mtlf << "illum 0\n";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
54
qbsp/map.cc
54
qbsp/map.cc
|
|
@ -30,7 +30,6 @@
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <fmt/ostream.h>
|
|
||||||
|
|
||||||
#include <qbsp/brush.hh>
|
#include <qbsp/brush.hh>
|
||||||
#include <qbsp/map.hh>
|
#include <qbsp/map.hh>
|
||||||
|
|
@ -41,6 +40,7 @@
|
||||||
#include <common/fs.hh>
|
#include <common/fs.hh>
|
||||||
#include <common/imglib.hh>
|
#include <common/imglib.hh>
|
||||||
#include <common/qvec.hh>
|
#include <common/qvec.hh>
|
||||||
|
#include <common/ostream.hh>
|
||||||
|
|
||||||
#include <pareto/spatial_map.h>
|
#include <pareto/spatial_map.h>
|
||||||
|
|
||||||
|
|
@ -3051,10 +3051,10 @@ inline void WriteMapBrushMap(const fs::path &name, const std::vector<mapbrush_t>
|
||||||
if (!f)
|
if (!f)
|
||||||
FError("Can't write {}", name);
|
FError("Can't write {}", name);
|
||||||
|
|
||||||
fmt::print(f, "{{\n\"classname\" \"worldspawn\"\n");
|
ewt::print(f, "{{\n\"classname\" \"worldspawn\"\n");
|
||||||
|
|
||||||
for (auto &brush : list) {
|
for (auto &brush : list) {
|
||||||
fmt::print(f, "{{\n");
|
ewt::print(f, "{{\n");
|
||||||
for (auto &face : brush.faces) {
|
for (auto &face : brush.faces) {
|
||||||
|
|
||||||
qvec3d corner = {};
|
qvec3d corner = {};
|
||||||
|
|
@ -3070,25 +3070,25 @@ inline void WriteMapBrushMap(const fs::path &name, const std::vector<mapbrush_t>
|
||||||
|
|
||||||
winding_t w = BaseWindingForPlane<winding_t>(plane);
|
winding_t w = BaseWindingForPlane<winding_t>(plane);
|
||||||
|
|
||||||
fmt::print(f, "( {} ) ", w[0]);
|
ewt::print(f, "( {} ) ", w[0]);
|
||||||
fmt::print(f, "( {} ) ", w[1]);
|
ewt::print(f, "( {} ) ", w[1]);
|
||||||
fmt::print(f, "( {} ) ", w[2]);
|
ewt::print(f, "( {} ) ", w[2]);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if (face.visible) {
|
if (face.visible) {
|
||||||
fmt::print(f, "skip 0 0 0 1 1\n");
|
ewt::print(f, "skip 0 0 0 1 1\n");
|
||||||
} else {
|
} else {
|
||||||
fmt::print(f, "nonvisible 0 0 0 1 1\n");
|
ewt::print(f, "nonvisible 0 0 0 1 1\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fmt::print(f, "{} 0 0 0 1 1\n", face.texname);
|
ewt::print(f, "{} 0 0 0 1 1\n", face.texname);
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt::print(f, "}}\n");
|
ewt::print(f, "}}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt::print(f, "}}\n");
|
ewt::print(f, "}}\n");
|
||||||
|
|
||||||
f.close();
|
f.close();
|
||||||
}
|
}
|
||||||
|
|
@ -3455,9 +3455,9 @@ static void fprintDoubleAndSpc(std::ofstream &f, double v)
|
||||||
{
|
{
|
||||||
int rounded = rint(v);
|
int rounded = rint(v);
|
||||||
if (static_cast<double>(rounded) == v) {
|
if (static_cast<double>(rounded) == v) {
|
||||||
fmt::print(f, "{} ", rounded);
|
ewt::print(f, "{} ", rounded);
|
||||||
} else if (std::isfinite(v)) {
|
} else if (std::isfinite(v)) {
|
||||||
fmt::print(f, "{:0.17} ", v);
|
ewt::print(f, "{:0.17} ", v);
|
||||||
} else {
|
} else {
|
||||||
printf("WARNING: suppressing nan or infinity\n");
|
printf("WARNING: suppressing nan or infinity\n");
|
||||||
f << "0 ";
|
f << "0 ";
|
||||||
|
|
@ -3485,7 +3485,7 @@ static void ConvertMapFace(std::ofstream &f, const mapface_t &mapface, const con
|
||||||
const texdef_quake_ed_t quakeed =
|
const texdef_quake_ed_t quakeed =
|
||||||
TexDef_BSPToQuakeEd(mapface.get_plane(), texture, texinfo.vecs, mapface.planepts);
|
TexDef_BSPToQuakeEd(mapface.get_plane(), texture, texinfo.vecs, mapface.planepts);
|
||||||
|
|
||||||
fmt::print(f, "{} ", mapface.texname);
|
ewt::print(f, "{} ", mapface.texname);
|
||||||
fprintDoubleAndSpc(f, quakeed.shift[0]);
|
fprintDoubleAndSpc(f, quakeed.shift[0]);
|
||||||
fprintDoubleAndSpc(f, quakeed.shift[1]);
|
fprintDoubleAndSpc(f, quakeed.shift[1]);
|
||||||
fprintDoubleAndSpc(f, quakeed.rotate);
|
fprintDoubleAndSpc(f, quakeed.rotate);
|
||||||
|
|
@ -3502,7 +3502,7 @@ static void ConvertMapFace(std::ofstream &f, const mapface_t &mapface, const con
|
||||||
case conversion_t::valve: {
|
case conversion_t::valve: {
|
||||||
const texdef_valve_t valve = TexDef_BSPToValve(texinfo.vecs);
|
const texdef_valve_t valve = TexDef_BSPToValve(texinfo.vecs);
|
||||||
|
|
||||||
fmt::print(f, "{} [ ", mapface.texname);
|
ewt::print(f, "{} [ ", mapface.texname);
|
||||||
fprintDoubleAndSpc(f, valve.axis.at(0, 0));
|
fprintDoubleAndSpc(f, valve.axis.at(0, 0));
|
||||||
fprintDoubleAndSpc(f, valve.axis.at(0, 1));
|
fprintDoubleAndSpc(f, valve.axis.at(0, 1));
|
||||||
fprintDoubleAndSpc(f, valve.axis.at(0, 2));
|
fprintDoubleAndSpc(f, valve.axis.at(0, 2));
|
||||||
|
|
@ -3540,7 +3540,7 @@ static void ConvertMapFace(std::ofstream &f, const mapface_t &mapface, const con
|
||||||
fprintDoubleAndSpc(f, bp.at(1, 2));
|
fprintDoubleAndSpc(f, bp.at(1, 2));
|
||||||
|
|
||||||
// N.B.: always print the Q2/Q3 flags
|
// N.B.: always print the Q2/Q3 flags
|
||||||
fmt::print(f, ") ) {} ", mapface.texname);
|
ewt::print(f, ") ) {} ", mapface.texname);
|
||||||
|
|
||||||
if (mapface.raw_info.has_value()) {
|
if (mapface.raw_info.has_value()) {
|
||||||
f << mapface.raw_info->contents.native << " " << mapface.raw_info->flags.native << " "
|
f << mapface.raw_info->contents.native << " " << mapface.raw_info->flags.native << " "
|
||||||
|
|
@ -3578,7 +3578,7 @@ static void ConvertEntity(std::ofstream &f, const mapentity_t &entity, const con
|
||||||
f << "{\n";
|
f << "{\n";
|
||||||
|
|
||||||
for (const auto &[key, value] : entity.epairs) {
|
for (const auto &[key, value] : entity.epairs) {
|
||||||
fmt::print(f, "\"{}\" \"{}\"\n", key, value);
|
ewt::print(f, "\"{}\" \"{}\"\n", key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto &mapbrush : entity.mapbrushes) {
|
for (auto &mapbrush : entity.mapbrushes) {
|
||||||
|
|
@ -3771,35 +3771,35 @@ void WriteBspBrushMap(std::string_view filename_suffix, const bspbrush_t::contai
|
||||||
if (!f)
|
if (!f)
|
||||||
FError("Can't write {}", name);
|
FError("Can't write {}", name);
|
||||||
|
|
||||||
fmt::print(f, "{{\n\"classname\" \"worldspawn\"\n");
|
ewt::print(f, "{{\n\"classname\" \"worldspawn\"\n");
|
||||||
|
|
||||||
for (auto &brush : list) {
|
for (auto &brush : list) {
|
||||||
if (!brush) {
|
if (!brush) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
fmt::print(f, "{{\n");
|
ewt::print(f, "{{\n");
|
||||||
for (auto &face : brush->sides) {
|
for (auto &face : brush->sides) {
|
||||||
winding_t w = BaseWindingForPlane<winding_t>(face.get_plane());
|
winding_t w = BaseWindingForPlane<winding_t>(face.get_plane());
|
||||||
|
|
||||||
fmt::print(f, "( {} ) ", w[0]);
|
ewt::print(f, "( {} ) ", w[0]);
|
||||||
fmt::print(f, "( {} ) ", w[1]);
|
ewt::print(f, "( {} ) ", w[1]);
|
||||||
fmt::print(f, "( {} ) ", w[2]);
|
ewt::print(f, "( {} ) ", w[2]);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if (face.visible) {
|
if (face.visible) {
|
||||||
fmt::print(f, "skip 0 0 0 1 1\n");
|
ewt::print(f, "skip 0 0 0 1 1\n");
|
||||||
} else {
|
} else {
|
||||||
fmt::print(f, "nonvisible 0 0 0 1 1\n");
|
ewt::print(f, "nonvisible 0 0 0 1 1\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fmt::print(f, "{} 0 0 0 1 1\n", map.miptex[face.get_texinfo().miptex].name);
|
ewt::print(f, "{} 0 0 0 1 1\n", map.miptex[face.get_texinfo().miptex].name);
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt::print(f, "}}\n");
|
ewt::print(f, "}}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt::print(f, "}}\n");
|
ewt::print(f, "}}\n");
|
||||||
|
|
||||||
f.close();
|
f.close();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,13 +28,13 @@
|
||||||
#include <qbsp/tree.hh>
|
#include <qbsp/tree.hh>
|
||||||
|
|
||||||
#include <common/log.hh>
|
#include <common/log.hh>
|
||||||
|
#include <common/ostream.hh>
|
||||||
#include <climits>
|
#include <climits>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <fmt/ostream.h>
|
|
||||||
|
|
||||||
static bool LeafSealsMap(const node_t *node)
|
static bool LeafSealsMap(const node_t *node)
|
||||||
{
|
{
|
||||||
|
|
@ -251,7 +251,7 @@ void WriteLeakTrail(std::ofstream &leakfile, qvec3d point1, const qvec3d &point2
|
||||||
vec_t dist = qv::normalizeInPlace(vector);
|
vec_t dist = qv::normalizeInPlace(vector);
|
||||||
|
|
||||||
while (dist > qbsp_options.leakdist.value()) {
|
while (dist > qbsp_options.leakdist.value()) {
|
||||||
fmt::print(leakfile, "{}\n", point1);
|
ewt::print(leakfile, "{}\n", point1);
|
||||||
point1 += vector * qbsp_options.leakdist.value();
|
point1 += vector * qbsp_options.leakdist.value();
|
||||||
dist -= qbsp_options.leakdist.value();
|
dist -= qbsp_options.leakdist.value();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,13 +22,13 @@
|
||||||
#include <qbsp/prtfile.hh>
|
#include <qbsp/prtfile.hh>
|
||||||
|
|
||||||
#include <common/log.hh>
|
#include <common/log.hh>
|
||||||
|
#include <common/ostream.hh>
|
||||||
#include <qbsp/map.hh>
|
#include <qbsp/map.hh>
|
||||||
#include <qbsp/portals.hh>
|
#include <qbsp/portals.hh>
|
||||||
#include <qbsp/qbsp.hh>
|
#include <qbsp/qbsp.hh>
|
||||||
#include <qbsp/tree.hh>
|
#include <qbsp/tree.hh>
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <fmt/ostream.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
@ -41,9 +41,9 @@ PORTAL FILE GENERATION
|
||||||
static void WriteFloat(std::ofstream &portalFile, vec_t v)
|
static void WriteFloat(std::ofstream &portalFile, vec_t v)
|
||||||
{
|
{
|
||||||
if (fabs(v - Q_rint(v)) < ZERO_EPSILON)
|
if (fabs(v - Q_rint(v)) < ZERO_EPSILON)
|
||||||
fmt::print(portalFile, "{} ", (int)Q_rint(v));
|
ewt::print(portalFile, "{} ", (int)Q_rint(v));
|
||||||
else
|
else
|
||||||
fmt::print(portalFile, "{} ", v);
|
ewt::print(portalFile, "{} ", v);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void WritePortals_r(node_t *node, std::ofstream &portalFile, bool clusters)
|
static void WritePortals_r(node_t *node, std::ofstream &portalFile, bool clusters)
|
||||||
|
|
@ -89,19 +89,19 @@ static void WritePortals_r(node_t *node, std::ofstream &portalFile, bool cluster
|
||||||
*/
|
*/
|
||||||
plane2 = w->plane();
|
plane2 = w->plane();
|
||||||
if (qv::dot(p->plane.get_normal(), plane2.normal) < 1.0 - ANGLEEPSILON) {
|
if (qv::dot(p->plane.get_normal(), plane2.normal) < 1.0 - ANGLEEPSILON) {
|
||||||
fmt::print(portalFile, "{} {} {} ", w->size(), back, front);
|
ewt::print(portalFile, "{} {} {} ", w->size(), back, front);
|
||||||
} else {
|
} else {
|
||||||
fmt::print(portalFile, "{} {} {} ", w->size(), front, back);
|
ewt::print(portalFile, "{} {} {} ", w->size(), front, back);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < w->size(); i++) {
|
for (i = 0; i < w->size(); i++) {
|
||||||
fmt::print(portalFile, "(");
|
ewt::print(portalFile, "(");
|
||||||
WriteFloat(portalFile, w->at(i)[0]);
|
WriteFloat(portalFile, w->at(i)[0]);
|
||||||
WriteFloat(portalFile, w->at(i)[1]);
|
WriteFloat(portalFile, w->at(i)[1]);
|
||||||
WriteFloat(portalFile, w->at(i)[2]);
|
WriteFloat(portalFile, w->at(i)[2]);
|
||||||
fmt::print(portalFile, ") ");
|
ewt::print(portalFile, ") ");
|
||||||
}
|
}
|
||||||
fmt::print(portalFile, "\n");
|
ewt::print(portalFile, "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -117,7 +117,7 @@ static int WritePTR2ClusterMapping_r(node_t *node, std::ofstream &portalFile, in
|
||||||
|
|
||||||
/* If we're in the next cluster, start a new line */
|
/* If we're in the next cluster, start a new line */
|
||||||
if (node->viscluster != viscluster) {
|
if (node->viscluster != viscluster) {
|
||||||
fmt::print(portalFile, "-1\n");
|
ewt::print(portalFile, "-1\n");
|
||||||
viscluster++;
|
viscluster++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -125,7 +125,7 @@ static int WritePTR2ClusterMapping_r(node_t *node, std::ofstream &portalFile, in
|
||||||
if (node->viscluster != viscluster)
|
if (node->viscluster != viscluster)
|
||||||
FError("Internal error: Detail cluster mismatch");
|
FError("Internal error: Detail cluster mismatch");
|
||||||
|
|
||||||
fmt::print(portalFile, "{} ", node->visleafnum);
|
ewt::print(portalFile, "{} ", node->visleafnum);
|
||||||
|
|
||||||
return viscluster;
|
return viscluster;
|
||||||
}
|
}
|
||||||
|
|
@ -218,37 +218,37 @@ static void WritePortalfile(node_t *headnode, portal_state_t &state)
|
||||||
// q2 uses a PRT1 file, but with clusters.
|
// q2 uses a PRT1 file, but with clusters.
|
||||||
// (Since q2bsp natively supports clusters, we don't need PRT2.)
|
// (Since q2bsp natively supports clusters, we don't need PRT2.)
|
||||||
if (qbsp_options.target_game->id == GAME_QUAKE_II) {
|
if (qbsp_options.target_game->id == GAME_QUAKE_II) {
|
||||||
fmt::print(portalFile, "PRT1\n");
|
ewt::print(portalFile, "PRT1\n");
|
||||||
fmt::print(portalFile, "{}\n", state.num_visclusters.count.load());
|
ewt::print(portalFile, "{}\n", state.num_visclusters.count.load());
|
||||||
fmt::print(portalFile, "{}\n", state.num_visportals.count.load());
|
ewt::print(portalFile, "{}\n", state.num_visportals.count.load());
|
||||||
WritePortals_r(headnode, portalFile, true);
|
WritePortals_r(headnode, portalFile, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If no detail clusters, just use a normal PRT1 format */
|
/* If no detail clusters, just use a normal PRT1 format */
|
||||||
if (!state.uses_detail) {
|
if (!state.uses_detail) {
|
||||||
fmt::print(portalFile, "PRT1\n");
|
ewt::print(portalFile, "PRT1\n");
|
||||||
fmt::print(portalFile, "{}\n", state.num_visleafs.count.load());
|
ewt::print(portalFile, "{}\n", state.num_visleafs.count.load());
|
||||||
fmt::print(portalFile, "{}\n", state.num_visportals.count.load());
|
ewt::print(portalFile, "{}\n", state.num_visportals.count.load());
|
||||||
WritePortals_r(headnode, portalFile, false);
|
WritePortals_r(headnode, portalFile, false);
|
||||||
} else if (qbsp_options.forceprt1.value()) {
|
} else if (qbsp_options.forceprt1.value()) {
|
||||||
/* Write a PRT1 file for loading in the map editor. Vis will reject it. */
|
/* Write a PRT1 file for loading in the map editor. Vis will reject it. */
|
||||||
fmt::print(portalFile, "PRT1\n");
|
ewt::print(portalFile, "PRT1\n");
|
||||||
fmt::print(portalFile, "{}\n", state.num_visclusters.count.load());
|
ewt::print(portalFile, "{}\n", state.num_visclusters.count.load());
|
||||||
fmt::print(portalFile, "{}\n", state.num_visportals.count.load());
|
ewt::print(portalFile, "{}\n", state.num_visportals.count.load());
|
||||||
WritePortals_r(headnode, portalFile, true);
|
WritePortals_r(headnode, portalFile, true);
|
||||||
} else {
|
} else {
|
||||||
/* Write a PRT2 */
|
/* Write a PRT2 */
|
||||||
fmt::print(portalFile, "PRT2\n");
|
ewt::print(portalFile, "PRT2\n");
|
||||||
fmt::print(portalFile, "{}\n", state.num_visleafs.count.load());
|
ewt::print(portalFile, "{}\n", state.num_visleafs.count.load());
|
||||||
fmt::print(portalFile, "{}\n", state.num_visclusters.count.load());
|
ewt::print(portalFile, "{}\n", state.num_visclusters.count.load());
|
||||||
fmt::print(portalFile, "{}\n", state.num_visportals.count.load());
|
ewt::print(portalFile, "{}\n", state.num_visportals.count.load());
|
||||||
WritePortals_r(headnode, portalFile, true);
|
WritePortals_r(headnode, portalFile, true);
|
||||||
check = WritePTR2ClusterMapping_r(headnode, portalFile, 0);
|
check = WritePTR2ClusterMapping_r(headnode, portalFile, 0);
|
||||||
if (check != state.num_visclusters.count.load() - 1) {
|
if (check != state.num_visclusters.count.load() - 1) {
|
||||||
FError("Internal error: Detail cluster mismatch");
|
FError("Internal error: Detail cluster mismatch");
|
||||||
}
|
}
|
||||||
fmt::print(portalFile, "-1\n");
|
ewt::print(portalFile, "-1\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -293,12 +293,12 @@ static void WriteDebugPortal(const portal_t *p, std::ofstream &portalFile)
|
||||||
{
|
{
|
||||||
const winding_t *w = &p->winding;
|
const winding_t *w = &p->winding;
|
||||||
|
|
||||||
fmt::print(portalFile, "{} {} {} ", w->size(), 0, 0);
|
ewt::print(portalFile, "{} {} {} ", w->size(), 0, 0);
|
||||||
|
|
||||||
for (int i = 0; i < w->size(); i++) {
|
for (int i = 0; i < w->size(); i++) {
|
||||||
fmt::print(portalFile, "({} {} {}) ", w->at(i)[0], w->at(i)[1], w->at(i)[2]);
|
ewt::print(portalFile, "({} {} {}) ", w->at(i)[0], w->at(i)[1], w->at(i)[2]);
|
||||||
}
|
}
|
||||||
fmt::print(portalFile, "\n");
|
ewt::print(portalFile, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void WriteTreePortals_r(node_t *node, std::ofstream &portalFile)
|
static void WriteTreePortals_r(node_t *node, std::ofstream &portalFile)
|
||||||
|
|
@ -357,9 +357,9 @@ void WriteDebugTreePortalFile(tree_t &tree, std::string_view filename_suffix)
|
||||||
if (!portalFile)
|
if (!portalFile)
|
||||||
FError("Failed to open {}: {}", name, strerror(errno));
|
FError("Failed to open {}: {}", name, strerror(errno));
|
||||||
|
|
||||||
fmt::print(portalFile, "PRT1\n");
|
ewt::print(portalFile, "PRT1\n");
|
||||||
fmt::print(portalFile, "{}\n", 0);
|
ewt::print(portalFile, "{}\n", 0);
|
||||||
fmt::print(portalFile, "{}\n", portal_count);
|
ewt::print(portalFile, "{}\n", portal_count);
|
||||||
WriteTreePortals_r(tree.headnode, portalFile);
|
WriteTreePortals_r(tree.headnode, portalFile);
|
||||||
|
|
||||||
logging::print(logging::flag::STAT, " {:8} tree portals written to {}\n", portal_count, name);
|
logging::print(logging::flag::STAT, " {:8} tree portals written to {}\n", portal_count, name);
|
||||||
|
|
@ -385,9 +385,9 @@ void WriteDebugPortals(std::vector<portal_t *> portals, std::string_view filenam
|
||||||
if (!portal_file)
|
if (!portal_file)
|
||||||
FError("Failed to open {}: {}", name, strerror(errno));
|
FError("Failed to open {}: {}", name, strerror(errno));
|
||||||
|
|
||||||
fmt::print(portal_file, "PRT1\n");
|
ewt::print(portal_file, "PRT1\n");
|
||||||
fmt::print(portal_file, "{}\n", 0);
|
ewt::print(portal_file, "{}\n", 0);
|
||||||
fmt::print(portal_file, "{}\n", portal_count);
|
ewt::print(portal_file, "{}\n", portal_count);
|
||||||
for (auto &p : portals) {
|
for (auto &p : portals) {
|
||||||
if (p->winding) {
|
if (p->winding) {
|
||||||
WriteDebugPortal(p, portal_file);
|
WriteDebugPortal(p, portal_file);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue