33#include < vector>
44
55#include " engine.h"
6- #include " interpolationTimingCorrector.h"
76
87#include < cage-core/assetsManager.h>
98#include < cage-core/assetsOnDemand.h>
109#include < cage-core/camera.h>
1110#include < cage-core/config.h>
1211#include < cage-core/entitiesVisitor.h>
1312#include < cage-core/hashString.h>
13+ #include < cage-core/math.h>
1414#include < cage-core/profiling.h>
1515#include < cage-core/scopeGuard.h>
1616#include < cage-core/swapBufferGuard.h>
1717#include < cage-core/tasks.h>
18+ #include < cage-core/variableSmoothingBuffer.h>
1819#include < cage-engine/frameBuffer.h>
1920#include < cage-engine/graphicsError.h>
2021#include < cage-engine/model.h>
@@ -36,6 +37,19 @@ namespace cage
3637 {
3738 const ConfigFloat confRenderGamma (" cage/graphics/gamma" , 2.2 );
3839
40+ struct InterpolationTimingCorrector
41+ {
42+ uint64 operator ()(uint64 emit, uint64 dispatch, uint64 step)
43+ {
44+ CAGE_ASSERT (step > 0 );
45+ corrections.add ((sint64)emit - (sint64)dispatch);
46+ const sint64 c = corrections.smooth ();
47+ return max (emit, dispatch + c + step / 2 );
48+ }
49+
50+ VariableSmoothingBuffer<sint64, 60 > corrections;
51+ };
52+
3953 struct TimeQuery : Noncopyable
4054 {
4155 private:
0 commit comments