summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorRob Loach <[email protected]>2024-04-03 06:10:52 -0400
committerGitHub <[email protected]>2024-04-03 12:10:52 +0200
commit9070eb9a132a4404e7d5247ff7bd2d2c2d77f3ad (patch)
treeea5320d546fd00e29ea70e091372429a4dd6401a /src
parentc9d71689edb2ea7bae79b204337a3f3dadac1b43 (diff)
downloadraylib-9070eb9a132a4404e7d5247ff7bd2d2c2d77f3ad.tar.gz
raylib-9070eb9a132a4404e7d5247ff7bd2d2c2d77f3ad.zip
Fix framerate recording for .gifs (#3894)
Diffstat (limited to 'src')
-rw-r--r--src/rcore.c20
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