This is done by collecting bounding volumes for each camera in a scene, and then only rendering a shadow camera if at least one of those bounding volumes overlaps with the shadow camera bounding volume.
Closes#560
This is an extension of the fix in 9a40febdb9ce40a0936d164a2ed3d72ddf7dcc8a, but that only applied when the light was passed to the shader via LightAttrib, and not via shader inputs.
ParamNodePath is not the ideal place to put this, but it's convenient (and probably more efficient than putting it into ShaderAttrib).
We actually need to leak this lock, because we need to call this at static destruction time, and we can't guarantee static destruction order.
This reverts commit afed80e83a5c033f03497bcf38353794e662eedf.
See #550. Now that we use the Vista API for condition variables, the only place where the distinction is still relevant is Windows XP, and it's just not worth it for that one corner case.
Since in Python 3 `str == bytes` no longer holds true, I modified
the source to write a text file, which it actually is, instead of a
binary file.
Closes#553Fixes#543
Checks if the value of Config.prc for `depth-bits` is `1` and sets it
manually to 24.
This prevents getting a 16 bit depth buffer on macos
Intended to address #501Closes#551
This uses SRWLock on Vista and above, and uses a hand-rolled implementation on Windows XP that uses Events (and a spinlock, if this is a multi-core system).
Since SRWLocks aren't recursive, ReMutexWin32Impl has been added to implement recursive mutices, using old-fashioned critical sections.
MutexImpl now has a constexpr constructor on all implementations.
As far as I know, none of the implementations strictly require this, and this may cause the waiting thread to wake up only for it to immediately have to wait for the lock again.
This change brings our implementation closer to C++11 std::condition_variable semantics.