diff options
| author | Rob Loach <[email protected]> | 2024-04-03 06:10:52 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-04-03 12:10:52 +0200 |
| commit | 9070eb9a132a4404e7d5247ff7bd2d2c2d77f3ad (patch) | |
| tree | ea5320d546fd00e29ea70e091372429a4dd6401a /src | |
| parent | c9d71689edb2ea7bae79b204337a3f3dadac1b43 (diff) | |
| download | raylib-9070eb9a132a4404e7d5247ff7bd2d2c2d77f3ad.tar.gz raylib-9070eb9a132a4404e7d5247ff7bd2d2c2d77f3ad.zip | |
Fix framerate recording for .gifs (#3894)
Diffstat (limited to 'src')
| -rw-r--r-- | src/rcore.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/rcore.c b/src/rcore.c index b7147745..3645c617 100644 --- a/src/rcore.c +++ b/src/rcore.c @@ -849,23 +849,33 @@ void EndDrawing(void) // Draw record indicator if (gifRecording) { + #ifndef GIF_RECORD_FRAMERATE #define GIF_RECORD_FRAMERATE 10 - gifFrameCounter++; + #endif + gifFrameCounter += GetFrameTime()*1000; - // NOTE: We record one gif frame every 10 game frames - if ((gifFrameCounter%GIF_RECORD_FRAMERATE) == 0) + // NOTE: We record one gif frame depending on the desired gif framerate + if (gifFrameCounter > 1000/GIF_RECORD_FRAMERATE) { // Get image data for the current frame (from backbuffer) // NOTE: This process is quite slow... :( Vector2 scale = GetWindowScaleDPI(); unsigned char *screenData = rlReadScreenPixels((int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y)); - msf_gif_frame(&gifState, screenData, 10, 16, (int)((float)CORE.Window.render.width*scale.x)*4); + + #ifndef GIF_RECORD_BITRATE + #define GIF_RECORD_BITRATE 16 + #endif + + // Add the frame to the gif recording, given how many frames have passed in centiseconds + msf_gif_frame(&gifState, screenData, gifFrameCounter/10, GIF_RECORD_BITRATE, (int)((float)CORE.Window.render.width*scale.x)*4); + gifFrameCounter -= 1000/GIF_RECORD_FRAMERATE; RL_FREE(screenData); // Free image data } #if defined(SUPPORT_MODULE_RSHAPES) && defined(SUPPORT_MODULE_RTEXT) - if (((gifFrameCounter/15)%2) == 1) + // Display the recording indicator every half-second + if ((int)(GetTime()/0.5)%2 == 1) { DrawCircle(30, CORE.Window.screen.height - 20, 10, MAROON); // WARNING: Module required: rshapes DrawText("GIF RECORDING", 50, CORE.Window.screen.height - 25, 10, RED); // WARNING: Module required: rtext |
