diff --git a/src/debugrecord.cpp b/src/debugrecord.cpp index 6cf2ab58..8ea8a22e 100644 --- a/src/debugrecord.cpp +++ b/src/debugrecord.cpp @@ -45,6 +45,8 @@ private: DebugRecord::DebugRecord(char const *path, float fps) : data(new DebugRecordData()) { + Ticker::StartRecording(); + data->path = strdup(path); data->width = 0; data->height = 0; @@ -96,5 +98,7 @@ void DebugRecord::TickDraw(float deltams) DebugRecord::~DebugRecord() { + Ticker::StopRecording(); + delete data; } diff --git a/src/ticker.cpp b/src/ticker.cpp index cc54787a..f8135186 100644 --- a/src/ticker.cpp +++ b/src/ticker.cpp @@ -30,7 +30,7 @@ public: TickerData() : todolist(0), autolist(0), nentities(0), - frame(0), benchmark(0), deltams(0), bias(0), fps(0), + frame(0), benchmark(0), recording(0), deltams(0), bias(0), fps(0), quit(0), quitframe(0), quitdelay(20), panic(0) { for (int i = 0; i < Entity::ALLGROUP_END; i++) @@ -61,7 +61,7 @@ private: int nentities; /* Fixed framerate management */ - int frame, benchmark; + int frame, benchmark, recording; Timer timer; float deltams, bias, fps; @@ -168,7 +168,7 @@ void Ticker::TickGame() data->frame++; - if (data->benchmark && data->fps) + if (data->recording && data->fps) { data->deltams = 1000.0f / data->fps; } @@ -324,20 +324,21 @@ void Ticker::ClampFps() { Profiler::Stop(Profiler::STAT_TICK_BLIT); - if (data->benchmark) + /* If benchmarking, set wait time to 0. If FPS are fixed, force wait + * time to 1/FPS. Otherwise, set wait time to 0. */ + float framems = (!data->benchmark && data->fps) ? 1000.0f / data->fps + : 0.0f; + + if (!data->benchmark) { - data->bias = 0.0f; + if (framems > data->bias + 200.0f) + framems = data->bias + 200.0f; // Don't go below 5 fps + if (framems > data->bias) + data->timer.WaitMs(framems - data->bias); } - else - { - float deltams = data->fps ? 1000.0f / data->fps : 0.0f; - if (deltams > data->bias + 200.0f) - deltams = data->bias + 200.0f; // Don't go below 5 fps - if (deltams > data->bias) - data->timer.WaitMs(deltams - data->bias); - data->bias -= deltams; - } + if (!data->recording) + data->bias -= framems; } void Ticker::StartBenchmark() @@ -350,6 +351,16 @@ void Ticker::StopBenchmark() data->benchmark--; } +void Ticker::StartRecording() +{ + data->recording++; +} + +void Ticker::StopRecording() +{ + data->recording--; +} + int Ticker::GetFrameNum() { return data->frame; diff --git a/src/ticker.h b/src/ticker.h index 02052b7a..cec2e735 100644 --- a/src/ticker.h +++ b/src/ticker.h @@ -34,6 +34,8 @@ public: static void ClampFps(); static void StartBenchmark(); static void StopBenchmark(); + static void StartRecording(); + static void StopRecording(); static int GetFrameNum(); static void Shutdown();