Browse Source

Math: micro-optimize vector isInf() and isNan() on Debug builds.

The change won't make any difference in Release, but in Debug builds it
avoids calling into set() for every element. This function showed up
pretty high in profiler output for DebugTools::CompareImage, now it
doesn't anymore. In particular, for ShadersMeshVisualizerGLTest it
results in ~10% reduction in run time, which is quite significant.
pull/617/head
Vladimír Vondruš 3 years ago
parent
commit
d41ab08880
  1. 4
      src/Magnum/Math/Functions.h

4
src/Magnum/Math/Functions.h

@ -256,7 +256,7 @@ template<class T> inline typename std::enable_if<IsScalar<T>::value, bool>::type
template<std::size_t size, class T> inline BitVector<size> isInf(const Vector<size, T>& value) { template<std::size_t size, class T> inline BitVector<size> isInf(const Vector<size, T>& value) {
BitVector<size> out; BitVector<size> out;
for(std::size_t i = 0; i != size; ++i) for(std::size_t i = 0; i != size; ++i)
out.set(i, Math::isInf(value[i])); if(Math::isInf(value[i])) out.set(i);
return out; return out;
} }
@ -278,7 +278,7 @@ template<class T> typename std::enable_if<IsScalar<T>::value, bool>::type isNan(
template<std::size_t size, class T> inline BitVector<size> isNan(const Vector<size, T>& value) { template<std::size_t size, class T> inline BitVector<size> isNan(const Vector<size, T>& value) {
BitVector<size> out; BitVector<size> out;
for(std::size_t i = 0; i != size; ++i) for(std::size_t i = 0; i != size; ++i)
out.set(i, Math::isNan(value[i])); if(Math::isNan(value[i])) out.set(i);
return out; return out;
} }

Loading…
Cancel
Save