diff --git a/src/Magnum/DebugTools/FrameProfiler.cpp b/src/Magnum/DebugTools/FrameProfiler.cpp index 2ac005fe0..b5522560d 100644 --- a/src/Magnum/DebugTools/FrameProfiler.cpp +++ b/src/Magnum/DebugTools/FrameProfiler.cpp @@ -560,6 +560,13 @@ void FrameProfilerGL::setup(const Values values, const UnsignedInt maxFrameCount const auto input = static_cast(state)->clippingInputPrimitivesQueries[previous].result(); if(!input) return UnsignedLong{}; + /* If we have more output primitives than input, it's because + a triangle got split into multiple. To avoid an underflow, + return zero as well. A corresponding test case is in + FrameProfilerGLTest::primitiveClipRatioNegative(). */ + const auto output = static_cast(state)->clippingOutputPrimitivesQueries[previous].result(); + if(input < output) return UnsignedLong{}; + return 100000 - static_cast(state)->clippingOutputPrimitivesQueries[previous].result()*100000/input; }, _state.get()); _state->primitiveClipRatioIndex = index++;