#pragma once #include #include #include #include using Uuid = std::vector; template void endswap(T *objp) { unsigned char *memp = reinterpret_cast(objp); std::reverse(memp, memp + sizeof(T)); } template void endswap(T &obj) { unsigned char *raw = reinterpret_cast(&obj); std::reverse(raw, raw + sizeof(T)); } template T _min(T a, T b) { return (a > b) ? b : a; } template T _min(T a, T b, Args... args) { return _min(a > b ? b : a, args...); } template T _max(T a, T b) { return (a > b) ? a : b; } template T _max(T a, T b, Args... args) { return _max(a > b ? a : b, args...); } inline void endswap(unsigned char *arr, size_t arrLen) { std::reverse(arr, arr + arrLen); } #define glCheckError() class LoopExecutionTimeController { using clock = std::chrono::steady_clock ; using timePoint = std::chrono::time_point; using duration = std::chrono::duration; timePoint previousUpdate; timePoint previousPreviousUpdate; duration delayLength; unsigned long long iterations=0; public: LoopExecutionTimeController(duration delayLength); void SetDelayLength(duration length); unsigned long long GetIterations(); void Update(); double GetDeltaMs(); duration GetDelta(); double GetDeltaS(); double GetRealDeltaS(); double RemainTimeMs(); };