If a tile has no geometry and is known to be empty navmesh tile there is
no need to process it again.
If a tile is too far from player it will not be processed anyway.
To reduce the number of allocations.
Add append member function as /= implementation having naming consistent
with std::filsystem::path.
Make sure append for empty Normalized does not add leading separator
(consistent with std::filesystem::path).
Apparently we'd never bothered opting in, despite nearly everything in all out apps being entirely compatible and designed with long paths in mind.
GetModuleFileNameW is a bit awkward as it's just about the only Win32 function that returns the minimum of the buffer size and the string size - nearly everything else returns the full size even if it won't fit, so you can pass it a null pointer and a size of zero, and it'll tell you how much space you need to allocate.
I pretty much just copied the mostly-working long-path-friendly call site in the crash catcher to windowspath.cpp, but I also noticed that if the function failed and returned zero, the original implementation would loop forever, so I fixed that.
There was some code that could be ditched from the catch monitor as \\?\ is a prefix you can use to opt into long paths for a single API call instead of using the manifest to set it everywhere.
std::streambuf in MSVC does not support buffers larger than 2**31 - 1:
https://developercommunity.visualstudio.com/t/stdbasic-stringbuf-is-broken/290124
Simple test to check if it works:
TEST(IMemStreamTest, shouldRead)
{
std::string src(std::numeric_limits<uint32_t>::max() / 2 + 1, '\0');
Files::IMemStream stream(src.data(), src.size());
std::string dst(src.size(), '\0');
stream.read(dst.data(), src.size());
EXPECT_FALSE(stream.fail()) << std::generic_category().message(errno);
}
luamanagerimp still needs float frameDuration, and reordering a bunch of fields in the scene manager conflicted with changing the type of maxanisotropy.