Selaa lähdekoodia

Fix framerate recording for .gifs (#3894)

pull/3896/head
Rob Loach 1 vuosi sitten
committed by GitHub
vanhempi
commit
9070eb9a13
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
1 muutettua tiedostoa jossa 15 lisäystä ja 5 poistoa
  1. +15
    -5
      src/rcore.c

+ 15
- 5
src/rcore.c Näytä tiedosto

@ -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 (p">(gifFrameCounter%GIF_RECORD_FRAMERATE) == 0)
// NOTE: We record one gif frame depending on the desired gif framerate
if (n">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

Ladataan…
Peruuta
Tallenna