Pablo Escobar
daa6d9125e
Math: add fmod function
6 years ago
Vladimír Vondruš
ca8172311d
Math: FFS, GCC.
6 years ago
Vladimír Vondruš
12577ce07f
Math: verify normal matrix calculation against the ground truth code.
...
It gives the same result, nevertheless something is not right when it
comes to negatively scaled meshes. Postponing the rest of the
investigation to later.
6 years ago
Vladimír Vondruš
1026aee80e
Moved the NoInit tag from Math to the root namespace.
...
The old one is deprecated, and will be removed in a future release.
Unfortunately, to avoid deprecation warnings, all use of NoInit in the
Math library temporarily have to be Magnum::NoInit This will be cleaned
up when the deprecated alias is removed.
6 years ago
Vladimír Vondruš
19e0e96d74
Updated copyright year.
6 years ago
Vladimír Vondruš
5be7fbe1e8
Math: make Range2D and Range3D properly convertible from std::pair.
...
Not sure what was I doing in 64f8a90095 .
6 years ago
Vladimír Vondruš
060d8548c6
Math: benchmark some sqrt variants.
6 years ago
Vladimír Vondruš
e05fda0db4
Math: this got forgotten.
6 years ago
Vladimír Vondruš
573125d0a9
Math: make cross() 10x faster in Debug.
...
And the Vector3 version 5% slower in Release, on GCC at least. FFS,
what was I thinking with the gather() things. Nice in user code,
extremely bad in library code.
6 years ago
Vladimír Vondruš
341a497932
Math: benchmark vector dot() and cross().
...
Have to do some precision improvements, so a baseline is needed. The
debug perf is beyond awful, actually.
6 years ago
Vladimír Vondruš
65a2ced2a7
Make this compile and test cleanly with CORRADE_NO_ASSERT defined.
6 years ago
Vladimír Vondruš
99a5e1d246
Math: test that slerp() is immune against too long quats as well.
6 years ago
Vladimír Vondruš
498f4c59e1
Math: fix angle() returning NaN for close arguments.
6 years ago
Vladimír Vondruš
94cba139ff
Math: improve and clean up angle() tests.
6 years ago
Vladimír Vondruš
f2f66d764f
Math: make TypeTraits::epsilon() consistent with Corrade.
...
The precision stays the same, but the long double variant is now exposed
on Emscripten as well, following a similar change in Corrade.
Additionally, the alien-looking _EQUALITY_PRECISION macros are now
unused and deprecated. For some reason these weren't ever prefixed with
MAGNUM_, and the ability to override those is an extremely rare use case
that would break half of the assumptions everywhere, so better not allow
that at all.
The TypeTraits test is further extended to compare directly the epsilons
between Magnum and Corrade, in addition to verifying that TestSuite and
TypeTraits have the same comparison results.
6 years ago
Vladimír Vondruš
f3566f637f
Math: add integer-to-integer castInto() variants also.
...
Currently one of the types is always 32-bit and preserving signedness,
because that's what I need right now. Other variants might get added
later.
6 years ago
Vladimír Vondruš
881003d90b
Test: adapt tests to change in TestSuite float epsilon precisions.
6 years ago
Vladimír Vondruš
ab0cba2573
Math: minor cleanup.
6 years ago
Vladimír Vondruš
53151f606a
Math: ensure TypeTraits fuzzy compare is consistent with TestSuite.
...
It wasn't until now (TestSuite was wrong), so prevent similar issues
from happening in the future.
6 years ago
Vladimír Vondruš
526254912e
doc: updated credits and changelog.
6 years ago
Squareys
a0e6ac1ed0
Math: Non-const overloads for Frustum::(left|right|top|bottom|near|far|[])
...
Signed-off-by: Squareys <squareys@googlemail.com>
6 years ago
Vladimír Vondruš
d2513cac3c
Math: make Color default alpha values work with Half.
...
There's some fugliness needed for the MSVC 2017 crash workaround but
otherwise all good.
6 years ago
Vladimír Vondruš
c8afe0f732
Math: make Vector::pad() default argument work with Half.
...
Got lucky enough that the default zero-initialization constructor does
exactly what I need. Otherwise ugh I don't know what I would do.
6 years ago
Vladimír Vondruš
50e21015eb
Math: make it possible to construct Half from a double.
...
A lot of generic code uses T(1.0) and right now that caused an ambiguity
between the Float and UnsignedShort constructors.
6 years ago
Vladimír Vondruš
10dd468eca
Math: minimal support for Half in TypeTraits.
6 years ago
Vladimír Vondruš
f5a5e10c50
Math: batch table-based half-float packing/unpacking.
...
It's a lot of code, but it still seems to be the fastest option of all
we have. This was the original idea when implementing half-float support
in 2016 but then I shelved it in favor of a simpler (but slower) code,
keeping the table only for the benchmark, calculated at runtime. But now
we need a batch version of this, so this comes handy.
6 years ago
Vladimír Vondruš
69e370c4c7
GCC 4.8, happy to see you're still around, causing problems.
6 years ago
Vladimír Vondruš
88fabb1ef6
Math: reduce header dependencies a bit.
6 years ago
Vladimír Vondruš
daf471381e
Math: add batch integer packing/unpacking and casting functions.
...
To be used for conversion of the upcoming mesh attribute types.
6 years ago
Vladimír Vondruš
c85b537937
Revert "Math: preserve signs in the Matrix[34]::scaling() getter."
...
Turns out this seriously broke properites that should always hold, such
as that R*S = M for a R and S extracted out of M. Another way to fix
this would be flipping signs in the rotation() / rotationShear() / ...
queries as well, but that adds extra operations to both rotation() and
scaling() and at that point it's just better to do what was done the
whole decade before.
To ensure this doesn't happen again and doesn't cost me a whole day of
debugging in an end-user app (SceneGraph TRS transformations got broken
because those assume that rotation() and scaling() *do* combine back,
which is a reasonable thing to assume), the docs are extended to note
this and there's an explicit test for both negative scale and large
angle corner cases as well.
This reverts commit 9aa68715db .
6 years ago
Nghia Truong
1ef813fdad
Math: add reflect() and refract() functions.
...
Co-authored-by: Vladimír Vondruš <mosra@centrum.cz>
6 years ago
Vladimír Vondruš
b2328f57cd
Math: fall back to lerp when slerp'd quaternions are too close.
...
Returning just the first argument had several issues, one of them was
causing iterative interpolations to get stuck at the initial position
forever.
6 years ago
Vladimír Vondruš
c4a3b273e6
Math: provide transformVector() also on the DualThing classes.
...
To make them more consistent with Matrix3/4, making switching from one
to the other easier.
6 years ago
Vladimír Vondruš
ea92c5b36f
Math: clarify that implicit conversion of Foo to a DualFoo is rotation.
...
Had to remind myself about that.
6 years ago
Vladimír Vondruš
a6dd63af0f
Math: make batch functions actually usable.
...
No longer it's needed to add ugly explicit template types or casts.
6 years ago
Vladimír Vondruš
d69b6f8c40
Math: test and fix array-taking isInf()/isNan() also with vectors.
...
Next time I need to test properly.
6 years ago
Vladimír Vondruš
71b775aeb1
Math: minor test cleanup.
6 years ago
Vladimír Vondruš
9aa68715db
Math: preserve signs in the Matrix[34]::scaling() getter.
...
This is a breaking change, but I think it is worth doing. Because now
Matrix4::scaling(vec).scaling() == vec
which was true also for translation and other.
6 years ago
Vladimír Vondruš
15e5bfa09e
Update credits and changelog, minor cleanup.
7 years ago
Marco Melorio
097289850a
Add toEuler() to Quaternion
7 years ago
Vladimír Vondruš
515637c76a
Math: implement a robust and faster Matrix4::normalMatrix().
...
This change makes the operations split into a bunch of separate
functions, making the parts easier to document, however with a slight
negative effect on debug performance:
Starting Magnum::Math::Test::MatrixBenchmark with 16 test cases...
INFO Benchmarking a debug build.
BENCH [01] 94.54 ± 3.62 ns multiply3()@499x10000 (wall time)
BENCH [02] 183.47 ± 7.50 ns multiply4()@499x10000 (wall time)
BENCH [03] 318.11 ± 11.59 ns comatrix3()@49x10000 (wall time)
BENCH [04] 379.51 ± 12.17 ns invert3()@49x10000 (wall time)
BENCH [05] 448.23 ± 17.61 ns invert3GaussJordan()@49x10000 (wall time)
BENCH [06] 338.96 ± 11.61 ns invert3Rigid()@49x10000 (wall time)
BENCH [07] 206.37 ± 10.59 ns invert3Orthogonal()@49x10000 (wall time)
BENCH [08] 879.40 ± 20.03 ns comatrix4()@49x10000 (wall time)
BENCH [09] 1.16 ± 0.03 µs invert4()@49x10000 (wall time)
BENCH [10] 825.40 ± 17.34 ns invert4GaussJordan()@49x10000 (wall time)
BENCH [11] 534.86 ± 15.73 ns invert4Rigid()@49x10000 (wall time)
BENCH [12] 347.36 ± 11.62 ns invert4Orthogonal()@49x10000 (wall time)
BENCH [13] 65.70 ± 6.73 ns transformVector3()@999x10000 (wall time)
BENCH [14] 62.56 ± 3.09 ns transformPoint3()@999x10000 (wall time)
BENCH [15] 81.25 ± 2.78 ns transformVector4()@999x10000 (wall time)
BENCH [16] 82.14 ± 4.26 ns transformPoint4()@999x10000 (wall time)
Finished Magnum::Math::Test::MatrixBenchmark with 0 errors out of 5500 checks.
7 years ago
Vladimír Vondruš
e3a820f468
Math: benchmark basic Matrix operations.
...
So I'm sure the next additions don't make things worse -- in the debug
build, in particular. Current state:
Starting Magnum::Math::Test::MatrixBenchmark with 14 test cases...
INFO Benchmarking a debug build.
BENCH [01] 102.25 ± 4.58 ns multiply3()@499x10000 (wall time)
BENCH [02] 183.84 ± 7.75 ns multiply4()@499x10000 (wall time)
BENCH [03] 329.84 ± 20.50 ns invert3()@49x10000 (wall time)
BENCH [04] 442.08 ± 13.47 ns invert3GaussJordan()@49x10000 (wall time)
BENCH [05] 331.23 ± 13.85 ns invert3Rigid()@49x10000 (wall time)
BENCH [06] 206.01 ± 11.13 ns invert3Orthogonal()@49x10000 (wall time)
BENCH [07] 1.01 ± 0.03 µs invert4()@49x10000 (wall time)
BENCH [08] 826.77 ± 19.33 ns invert4GaussJordan()@49x10000 (wall time)
BENCH [09] 520.12 ± 21.97 ns invert4Rigid()@49x10000 (wall time)
BENCH [10] 344.20 ± 13.32 ns invert4Orthogonal()@49x10000 (wall time)
BENCH [11] 61.00 ± 2.89 ns transformVector3()@999x10000 (wall time)
BENCH [12] 61.55 ± 3.35 ns transformPoint3()@999x10000 (wall time)
BENCH [13] 80.65 ± 2.99 ns transformVector4()@999x10000 (wall time)
BENCH [14] 80.86 ± 3.32 ns transformPoint4()@999x10000 (wall time)
Finished Magnum::Math::Test::MatrixBenchmark with 0 errors out of 5400 checks.
7 years ago
Vladimír Vondruš
7f70dc7385
Math: XFAIL most (all?) NoInit tests in Release builds.
7 years ago
Vladimír Vondruš
17b3c8fac5
Math: support numeric indexing in gather() / scatter() as well.
7 years ago
Vladimír Vondruš
acc8d8994b
Math: added scatter(), renamed swizzle() to gather().
...
The swizzle() function is still present, only marked as deprecated and
scheduled to be removed in some future release.
7 years ago
Vladimír Vondruš
4bc84f6815
Math: expand UnderlyingTypeOf to support vectors and matrices.
...
This allows getting underlying type of those without needing to include
them. Yay.
7 years ago
Vladimír Vondruš
1887fe0ab9
Math: added a scalar equal() / notEqual() variant.
7 years ago
Vladimír Vondruš
13b4bf8461
Math: use __builtin_sincos for sincos() on GCC.
...
Makes this thing faster on Debug. But I'm not sure whether it's due to
less function calls or this intrinsic being actually faster, heh.
Probably a combination of both.
7 years ago
Vladimír Vondruš
a28e14491c
Math: verify that TypeTraits work correctly for signed infinities.
7 years ago
Vladimír Vondruš
3cf9dbf409
Math: added component-wise equal()/notEqual() for vectors.
7 years ago