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š
2a3d02d217
Math: an attempt to fix scatter() on GCC 4.8.
7 years ago
Vladimír Vondruš
7a1162acc7
Math: one more needless operator[] call in scatter().
7 years ago
Vladimír Vondruš
17b3c8fac5
Math: support numeric indexing in gather() / scatter() as well.
7 years ago
Vladimír Vondruš
f2f1cac598
Math: directly access Vector components in gather() / scatter().
...
Speeding up debug builds a bit.
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š
0408671e8f
Math: silence an annoying warning from MSVC about 64-to-32bit conversion.
7 years ago
Vladimír Vondruš
bc88faa215
Math: no Vector::operator-() and Vector2::perpendicular() on unsigned.
...
Reported by MSVC on Magnum Python Bindings.
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š
9def7ba7f6
Math: add a long double pi for sincos tests.
...
I hope nobody needs the others, haha.
7 years ago
Vladimír Vondruš
efe2f14284
Math: improve precision of double constants by one more digit.
...
And add comments to make sure we are not too imprecise.
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
Vladimír Vondruš
c158cfa2dd
Math: you need to know this.
7 years ago
Vladimír Vondruš
1b37d22006
Doc++
7 years ago
Vladimír Vondruš
bd1ce7d316
Math: return proper type from Range3D::xy().
7 years ago
Vladimír Vondruš
0de0104abe
Math: return proper type from Range*D::scaledFromCenter().
7 years ago
Vladimír Vondruš
2030e7cfef
Math: clarify how quaternion data are ordered.
7 years ago
Vladimír Vondruš
3d5f50ac49
Test: use the new setTestCaseTemplateName().
7 years ago
Vladimír Vondruš
a1cc0cb62d
Math: off-center Matrix4::perspectiveProjection().
7 years ago
Vladimír Vondruš
637e8ecd44
Math: de-duplicate code in Matrix4::perspectiveProjection().
7 years ago
Vladimír Vondruš
ad291c2afe
Math: mention planeEquation() in Frustum docs and vice versa.
7 years ago
Vladimír Vondruš
b83c4366e7
Math: fix a build issue with CUDA on Windows.
7 years ago
Vladimír Vondruš
1253a60046
Math: doc++
7 years ago
Vladimír Vondruš
8e5ecfacac
Math: ignore NaNs also in Vector::min(), max() and minmax().
...
To have the API consistent.
7 years ago
Vladimír Vondruš
bd4ed9ae0e
Math: make batch functions accept strided array views.
...
The obvious improvement.
7 years ago
Vladimír Vondruš
51f9fd3a5f
Math: clarifying comment for future self.
...
Reverted all of this and then spent hours rediscovering these errors.
7 years ago
Vladimír Vondruš
2a9f4a1fed
Math: hint that lerpInverted() can be used for rane mapping.
7 years ago
Vladimír Vondruš
46fdb38cd2
Math: make batch min() / max() / minmax() ignore NaNs.
7 years ago
Vladimír Vondruš
d38303505d
Math: added batch isInf() and isNan().
7 years ago
Vladimír Vondruš
da43af403e
Math: minor cleanup and code simplification.
7 years ago
Vladimír Vondruš
571ba7b17f
Math: group the free functions to make them easier to look up.
7 years ago
Vladimír Vondruš
d9da018af7
Math: don't hide the vector/scalar overloads from docs.
...
People should be able to see the IsScalar requirements and how the
vector types are passed around as well.
7 years ago
Vladimír Vondruš
28f12f9a5e
Math: improve the NaN propagation tests even more.
7 years ago
Vladimír Vondruš
75ffd39fe0
Math: make it possible to use Deg/Rad in all functions.
...
This should have been here ages ago, haha.
7 years ago
Vladimír Vondruš
7941a769cd
Math: added IsUnitless type trait.
7 years ago
Vladimír Vondruš
ab0d7c5485
Math: be consistent with not using long double on Emscripten.
7 years ago
Vladimír Vondruš
19844352ff
Math: added UnderlyingTypeOf.
7 years ago
Vladimír Vondruš
aa2adb7222
Math: add IsScalar, IsVector, IsIntegral and IsFloatingPoint type traits.
...
The standard ones are not good enough, so let's roll out my own.
7 years ago
Vladimír Vondruš
4b4b8efc1b
Math: doc++
...
Fixing Engrish while doing the Python bindings.
7 years ago
Vladimír Vondruš
442d5576d0
Math: change the way BoolVector is printed to Debug.
...
Found while working on the Python bindings --- BoolVector4(0b1010) got
printed as BoolVector(0101), which is totally confusing. Now it prints
it in a way that looks exactly the same as when constructing the vector
with binary literals.
7 years ago
Vladimír Vondruš
4b6fabb004
Math: ability to Debug colors as actual colored squares.
7 years ago
Vladimír Vondruš
988a33c000
Added convenience BoolVector2, BoolVector3 and BoolVector4 typedefs.
7 years ago
Vladimír Vondruš
3fb90cdf5c
Math: remove obsolete Doxygen workarounds.
7 years ago
Vladimír Vondruš
36ba5f4333
Math: ensure ZeroInit and IdentityInit constructors are explicit.
...
Like NoInit ones. Not sure what I was doing there.
7 years ago
Vladimír Vondruš
3626562e1d
Adapted to Corrade changes.
...
Mostly missing includes now.
7 years ago