* Weirdly building on upstream even without using PCH, <limits> ends up
included. For some reason in RenderDoc it is not and needs the explicit
include (which generally should be there)
* Remove use of newer STL classes like std::filesystem, std::variant and
std::optional.
* Do not use inline variables - the only instance is also static constexpr
* Explicitly initialise std::array variables with type and size (also add extra
{}s to appease an old clang warning)
* Work around old libstdc++ bug with move assignment and non-assignable
allocators
* Remove redundant constexpr that warns on older compilers
* Remove use of declaration-inside-if statements
EXR files internally are split into independent "parts", which can
be decoded separately. Tinyexr already supports that via
TINYEXR_USE_THREAD.
Time taken to load 4K video resolution EXR files, on Ryzen 5950X/VS2022:
- FP16 file (27MB): 536ms -> 77ms
- FP32 file (69MB): 793ms -> 118ms
stb_image v2.12 has a memory corruption bug, updated to v2.28 to fix.
The only real API change is stb_image_resize.h is now stb_image_resize2.h, and stbir_resize_uint8_srgb() doesnt take alpha channels or flags as params.
* Add CATCH_CONFIG_FORCE_FALLBACK_STRINGIFIER to force use of ToStr in
all cases. We can handle ints, etc, we don't need ostringstream, and
this allows us to handle enums that would otherwise just be printed as
their integer value.
* Add CATCH_CONFIG_INLINE_DEBUG_BREAK which restores the Catch 1.0
behaviour of debugbreaks happening in macros and so in-line at the
actual site failure. So the debugger stops on the CHECK() or REQUIRE()
call instead of inside AssertionHandler::complete()
Cherry pick from https://github.com/baldurk/renderdoc/commit/4232736fc21fc6a13a4de6997a5ae106598b225f
* This is a lambda in upstream catch to avoid some warning, but that means that
when the debugbreak happens it's in the wrong stack frame (though at least on
the right line). Fortunately we can override it with a useful definition.
* Add CATCH_CONFIG_FORCE_FALLBACK_STRINGIFIER to force use of ToStr in
all cases. We can handle ints, etc, we don't need ostringstream, and
this allows us to handle enums that would otherwise just be printed as
their integer value.
* Add CATCH_CONFIG_INLINE_DEBUG_BREAK which restores the Catch 1.0
behaviour of debugbreaks happening in macros and so in-line at the
actual site failure. So the debugger stops on the CHECK() or REQUIRE()
call instead of inside AssertionHandler::complete()
Cherry pick from https://github.com/baldurk/renderdoc/commit/4232736fc21fc6a13a4de6997a5ae106598b225f
* This prevents unnecessary conversions back and forth between rdcstr and const
char * when going through interfaces. In the OS specific layer this is rarely
an issue because most of the implementations don't convert to rdcstr, but it
is convenient to be able to pass in an rdcstr directly. The few cases where
there's an unecessary construction of an rdcstr is acceptable.
* A couple of places in the public API need to return a string from a global
function, so can't return an rdcstr due to C ABI, so they still return a const
char *.
* Similarly const char * is kept for logging, to avoid a dependency on rdcstr
and because that's one place where unnecessary conversions/constructions may
be impactful.
* Comma operator problems when doing math functions that return two parameters
(e.g quotient).
* Passing bool tag type through varargs - the varargs aren't actually used and
there's an overload for true_type, so we can instead accept false_type.
* gcc seems to declare numeric_limits as a struct, so friend'ing it as a class
throws a warning. Since we only care about C++11 we can omit the tag from the
friend declaration.