From 0b4815b8fe861f8fbeac35f46f7e1ff78891b7b5 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 9 Nov 2025 13:43:08 +0100 Subject: [PATCH] WARNING: REMOVED: GIT recording option, added example --- examples/README.md | 2 +- examples/core/core_screen_recording.c | 118 ++++++++++++++++++++-- examples/core/core_screen_recording.png | Bin 17323 -> 17353 bytes {src/external => examples/core}/msf_gif.h | 0 examples/examples_list.txt | 2 +- src/config.h | 2 - src/raylib.h | 1 - src/rcore.c | 102 +------------------ tools/rexm/examples_report.md | 2 +- tools/rexm/examples_report_issues.md | 1 - 10 files changed, 112 insertions(+), 118 deletions(-) rename {src/external => examples/core}/msf_gif.h (100%) diff --git a/examples/README.md b/examples/README.md index f1f6c80b3..9a208f599 100644 --- a/examples/README.md +++ b/examples/README.md @@ -68,7 +68,7 @@ Examples using raylib[core](../src/rcore.c) platform functionality like window c | [core_input_actions](core/core_input_actions.c) | core_input_actions | ⭐⭐☆☆ | 5.5 | 5.6 | [Jett](https://github.com/JettMonstersGoBoom) | | [core_directory_files](core/core_directory_files.c) | core_directory_files | ⭐☆☆☆ | 5.5 | 5.6 | [Hugo ARNAL](https://github.com/hugoarnal) | | [core_highdpi_testbed](core/core_highdpi_testbed.c) | core_highdpi_testbed | ⭐☆☆☆ | 5.6-dev | 5.6-dev | [Ramon Santamaria](https://github.com/raysan5) | -| [core_screen_recording](core/core_screen_recording.c) | core_screen_recording | ⭐☆☆☆ | 5.6-dev | 5.6-dev | [Ramon Santamaria](https://github.com/raysan5) | +| [core_screen_recording](core/core_screen_recording.c) | core_screen_recording | ⭐⭐☆☆ | 5.6-dev | 5.6-dev | [Ramon Santamaria](https://github.com/raysan5) | | [core_clipboard_text](core/core_clipboard_text.c) | core_clipboard_text | ⭐☆☆☆ | 5.6-dev | 5.6-dev | [Robin](https://github.com/RobinsAviary) | | [core_text_file_loading](core/core_text_file_loading.c) | core_text_file_loading | ⭐☆☆☆ | 5.5 | 5.6 | [Aanjishnu Bhattacharyya](https://github.com/NimComPoo-04) | | [core_compute_hash](core/core_compute_hash.c) | core_compute_hash | ⭐⭐☆☆ | 5.6-dev | 5.6-dev | [Ramon Santamaria](https://github.com/raysan5) | diff --git a/examples/core/core_screen_recording.c b/examples/core/core_screen_recording.c index 43c90eec5..633ddcf81 100644 --- a/examples/core/core_screen_recording.c +++ b/examples/core/core_screen_recording.c @@ -2,12 +2,10 @@ * * raylib [core] example - screen recording * -* Example complexity rating: [★☆☆☆] 1/4 +* Example complexity rating: [★★☆☆] 2/4 * * Example originally created with raylib 5.6-dev, last time updated with raylib 5.6-dev * -* Example contributed by Ramon Santamaria (@raysan5) and reviewed by Ramon Santamaria (@raysan5) -* * Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, * BSD-like license that allows static linking with closed source software * @@ -17,6 +15,16 @@ #include "raylib.h" +// Using msf_gif library to record frames into GIF +#define MSF_GIF_IMPL +#include "msf_gif.h" // GIF recording functionality + +#include // Required for: sinf() + +#define GIF_RECORD_FRAMERATE 5 // Record framerate, we get a frame every N frames + +#define MAX_SINEWAVE_POINTS 256 + //------------------------------------------------------------------------------------ // Program main entry point //------------------------------------------------------------------------------------ @@ -29,7 +37,20 @@ int main(void) InitWindow(screenWidth, screenHeight, "raylib [core] example - screen recording"); - // TODO: Load resources / Initialize variables at this point + bool gifRecording = false; // GIF recording state + unsigned int gifFrameCounter = 0; // GIF frames counter + MsfGifState gifState = { 0 }; // MSGIF context state + + Vector2 circlePosition = { 0.0f, screenHeight/2.0f }; + float timeCounter = 0.0f; + + // Get sine wave points for line drawing + Vector2 sinePoints[MAX_SINEWAVE_POINTS] = { 0 }; + for (int i = 0; i < MAX_SINEWAVE_POINTS; i++) + { + sinePoints[i].x = i*GetScreenWidth()/180.0f; + sinePoints[i].y = screenHeight/2.0f + 150*sinf((2*PI/1.5f)*(1.0f/60.0f)*(float)i); // Calculate for 60 fps + } SetTargetFPS(60); //-------------------------------------------------------------------------------------- @@ -39,7 +60,59 @@ int main(void) { // Update //---------------------------------------------------------------------------------- - // TODO: Update variables / Implement example logic at this point + // Update circle sinusoidal movement + timeCounter += GetFrameTime(); + circlePosition.x += GetScreenWidth()/180.0f; + circlePosition.y = screenHeight/2.0f + 150*sinf((2*PI/1.5f)*timeCounter); + if (circlePosition.x > screenWidth) + { + circlePosition.x = 0.0f; + circlePosition.y = screenHeight/2.0f; + timeCounter = 0.0f; + } + + // Start-Stop GIF recording on CTRL+R + if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_R)) + { + if (gifRecording) + { + // Stop current recording and save file + gifRecording = false; + MsfGifResult result = msf_gif_end(&gifState); + SaveFileData(TextFormat("%s/screenrecording.gif", GetApplicationDirectory()), result.data, (unsigned int)result.dataSize); + msf_gif_free(result); + + TraceLog(LOG_INFO, "Finish animated GIF recording"); + } + else + { + // Start a new recording + gifRecording = true; + gifFrameCounter = 0; + msf_gif_begin(&gifState, GetRenderWidth(), GetRenderHeight()); + + TraceLog(LOG_INFO, "Start animated GIF recording"); + } + } + + if (gifRecording) + { + gifFrameCounter++; + + // NOTE: We record one gif frame depending on the desired gif framerate + if (gifFrameCounter > GIF_RECORD_FRAMERATE) + { + // Get image data for the current frame (from backbuffer) + // WARNING: This process is quite slow, it can generate stuttering + Image imScreen = LoadImageFromScreen(); + + // Add the frame to the gif recording, providing and "estimated" time for display in centiseconds + msf_gif_frame(&gifState, imScreen.data, (int)((1.0f/60.0f)*GIF_RECORD_FRAMERATE)/10, 16, imScreen.width*4); + gifFrameCounter = 0; + + UnloadImage(imScreen); // Free image data + } + } //---------------------------------------------------------------------------------- // Draw @@ -48,20 +121,43 @@ int main(void) ClearBackground(RAYWHITE); - // TODO: Draw everything that requires to be drawn at this point + for (int i = 0; i < (MAX_SINEWAVE_POINTS - 1); i++) + { + DrawLineV(sinePoints[i], sinePoints[i + 1], MAROON); + DrawCircleV(sinePoints[i], 3, MAROON); + } + + DrawCircleV(circlePosition, 30, RED); - DrawLineEx((Vector2){ 0, 0 }, (Vector2){ screenWidth, screenHeight }, 2.0f, RED); - DrawLineEx((Vector2){ 0, screenHeight }, (Vector2){ screenWidth, 0 }, 2.0f, RED); - DrawText("example base code template", 260, 400, 20, LIGHTGRAY); + DrawFPS(10, 10); + /* + // Draw record indicator + // WARNING: If drawn here, it will appear in the recorded image, + // use a render texture instead for the recording and LoadImageFromTexture(rt.texture) + if (gifRecording) + { + // Display the recording indicator every half-second + if ((int)(GetTime()/0.5)%2 == 1) + { + DrawCircle(30, GetScreenHeight() - 20, 10, MAROON); + DrawText("GIF RECORDING", 50, GetScreenHeight() - 25, 10, RED); + } + } + */ EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- - - // TODO: Unload all loaded resources at this point + // If still recording a GIF on close window, just finish + if (gifRecording) + { + MsfGifResult result = msf_gif_end(&gifState); + msf_gif_free(result); + gifRecording = false; + } CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/core/core_screen_recording.png b/examples/core/core_screen_recording.png index da99bbb0d97118eef3ca41c16b62182acced63f9..9b14af24d5f8472e403671d78ac8c629f3612bc2 100644 GIT binary patch literal 17353 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 aXx{Fh`%kLYY!czW3FF=h-xU_U{Qm(sHl%3) diff --git a/src/external/msf_gif.h b/examples/core/msf_gif.h similarity index 100% rename from src/external/msf_gif.h rename to examples/core/msf_gif.h diff --git a/examples/examples_list.txt b/examples/examples_list.txt index 1804d7edc..e5e82fbd4 100644 --- a/examples/examples_list.txt +++ b/examples/examples_list.txt @@ -50,7 +50,7 @@ core;core_viewport_scaling;★★☆☆;5.5;5.5;2025;2025;"Agnis Aldins";@nezver core;core_input_actions;★★☆☆;5.5;5.6;2025;2025;"Jett";@JettMonstersGoBoom core;core_directory_files;★☆☆☆;5.5;5.6;2025;2025;"Hugo ARNAL";@hugoarnal core;core_highdpi_testbed;★☆☆☆;5.6-dev;5.6-dev;2025;2025;"Ramon Santamaria";@raysan5 -core;core_screen_recording;★☆☆☆;5.6-dev;5.6-dev;2025;2025;"Ramon Santamaria";@raysan5 +core;core_screen_recording;★★☆☆;5.6-dev;5.6-dev;2025;2025;"Ramon Santamaria";@raysan5 core;core_clipboard_text;★☆☆☆;5.6-dev;5.6-dev;2025;2025;"Robin";@RobinsAviary core;core_text_file_loading;★☆☆☆;5.5;5.6;0;0;"Aanjishnu Bhattacharyya";@NimComPoo-04 core;core_compute_hash;★★☆☆;5.6-dev;5.6-dev;2025;2025;"Ramon Santamaria";@raysan5 diff --git a/src/config.h b/src/config.h index b87e199dc..8e6e6a5fa 100644 --- a/src/config.h +++ b/src/config.h @@ -60,8 +60,6 @@ #define SUPPORT_PARTIALBUSY_WAIT_LOOP 1 // Allow automatic screen capture of current screen pressing F12, defined in KeyCallback() #define SUPPORT_SCREEN_CAPTURE 1 -// Allow automatic gif recording of current screen pressing CTRL+F12, defined in KeyCallback() -#define SUPPORT_GIF_RECORDING 1 // Support CompressData() and DecompressData() functions #define SUPPORT_COMPRESSION_API 1 // Support automatic generated events, loading and recording of those events when required diff --git a/src/raylib.h b/src/raylib.h index e4be11084..2f9ec2268 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -33,7 +33,6 @@ * [raudio] miniaudio (David Reid - github.com/mackron/miniaudio) for audio device/context management * * OPTIONAL DEPENDENCIES (included): -* [rcore] msf_gif (Miles Fogle) for GIF recording * [rcore] sinfl (Micha Mettke) for DEFLATE decompression algorithm * [rcore] sdefl (Micha Mettke) for DEFLATE compression algorithm * [rcore] rprand (Ramon Santamaria) for pseudo-random numbers generation diff --git a/src/rcore.c b/src/rcore.c index cb6c89881..706cb2028 100644 --- a/src/rcore.c +++ b/src/rcore.c @@ -52,9 +52,6 @@ * #define SUPPORT_SCREEN_CAPTURE * Allow automatic screen capture of current screen pressing F12, defined in KeyCallback() * -* #define SUPPORT_GIF_RECORDING -* Allow automatic gif recording of current screen pressing CTRL+F12, defined in KeyCallback() -* * #define SUPPORT_COMPRESSION_API * Support CompressData() and DecompressData() functions, those functions use zlib implementation * provided by stb_image and stb_image_write libraries, so, those libraries must be enabled on textures module @@ -134,15 +131,6 @@ #include "rcamera.h" // Camera system functionality #endif -#if defined(SUPPORT_GIF_RECORDING) - #define MSF_GIF_MALLOC(contextPointer, newSize) RL_MALLOC(newSize) - #define MSF_GIF_REALLOC(contextPointer, oldMemory, oldSize, newSize) RL_REALLOC(oldMemory, newSize) - #define MSF_GIF_FREE(contextPointer, oldMemory, oldSize) RL_FREE(oldMemory) - - #define MSF_GIF_IMPL - #include "external/msf_gif.h" // GIF recording functionality -#endif - #if defined(SUPPORT_COMPRESSION_API) #define SINFL_IMPLEMENTATION #define SINFL_NO_SIMD @@ -402,12 +390,6 @@ bool isGpuReady = false; static int screenshotCounter = 0; // Screenshots counter #endif -#if defined(SUPPORT_GIF_RECORDING) -static unsigned int gifFrameCounter = 0; // GIF frames counter -static bool gifRecording = false; // GIF recording state -static MsfGifState gifState = { 0 }; // MSGIF context state -#endif - #if defined(SUPPORT_AUTOMATION_EVENTS) // Automation events type typedef enum AutomationEventType { @@ -758,15 +740,6 @@ void InitWindow(int width, int height, const char *title) // Close window and unload OpenGL context void CloseWindow(void) { -#if defined(SUPPORT_GIF_RECORDING) - if (gifRecording) - { - MsfGifResult result = msf_gif_end(&gifState); - msf_gif_free(result); - gifRecording = false; - } -#endif - #if defined(SUPPORT_MODULE_RTEXT) && defined(SUPPORT_DEFAULT_FONT) UnloadFontDefault(); // WARNING: Module required: rtext #endif @@ -929,47 +902,6 @@ void EndDrawing(void) { rlDrawRenderBatchActive(); // Update and draw internal render batch -#if defined(SUPPORT_GIF_RECORDING) - // Draw record indicator - if (gifRecording) - { - #ifndef GIF_RECORD_FRAMERATE - #define GIF_RECORD_FRAMERATE 10 - #endif - gifFrameCounter += (unsigned int)(GetFrameTime()*1000); - - // 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)); - - #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) - // 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 - } - #endif - - rlDrawRenderBatchActive(); // Update and draw internal render batch - } -#endif - #if defined(SUPPORT_AUTOMATION_EVENTS) if (automationEventRecording) RecordAutomationEvent(); // Event recording #endif @@ -1002,38 +934,8 @@ void EndDrawing(void) #if defined(SUPPORT_SCREEN_CAPTURE) if (IsKeyPressed(KEY_F12)) { -#if defined(SUPPORT_GIF_RECORDING) - if (IsKeyDown(KEY_LEFT_CONTROL)) - { - if (gifRecording) - { - gifRecording = false; - - MsfGifResult result = msf_gif_end(&gifState); - - SaveFileData(TextFormat("%s/screenrec%03i.gif", CORE.Storage.basePath, screenshotCounter), result.data, (unsigned int)result.dataSize); - msf_gif_free(result); - - TRACELOG(LOG_INFO, "SYSTEM: Finish animated GIF recording"); - } - else - { - gifRecording = true; - gifFrameCounter = 0; - - Vector2 scale = GetWindowScaleDPI(); - msf_gif_begin(&gifState, (int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y)); - screenshotCounter++; - - TRACELOG(LOG_INFO, "SYSTEM: Start animated GIF recording: %s", TextFormat("screenrec%03i.gif", screenshotCounter)); - } - } - else -#endif // SUPPORT_GIF_RECORDING - { - TakeScreenshot(TextFormat("screenshot%03i.png", screenshotCounter)); - screenshotCounter++; - } + TakeScreenshot(TextFormat("screenshot%03i.png", screenshotCounter)); + screenshotCounter++; } #endif // SUPPORT_SCREEN_CAPTURE diff --git a/tools/rexm/examples_report.md b/tools/rexm/examples_report.md index 24977e38e..e3d64137b 100644 --- a/tools/rexm/examples_report.md +++ b/tools/rexm/examples_report.md @@ -63,7 +63,7 @@ Example elements validated: | core_input_actions | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | core_directory_files | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | core_highdpi_testbed | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| core_screen_recording | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| core_screen_recording | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | core_clipboard_text | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | core_text_file_loading | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | core_compute_hash | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | diff --git a/tools/rexm/examples_report_issues.md b/tools/rexm/examples_report_issues.md index 8d24a251d..081170806 100644 --- a/tools/rexm/examples_report_issues.md +++ b/tools/rexm/examples_report_issues.md @@ -21,7 +21,6 @@ Example elements validated: | **EXAMPLE NAME** | [C] | [CAT]| [INFO]|[PNG]|[WPNG]| [RES]| [MK] |[MKWEB]| [VCX]| [SOL]|[RDME]|[JS] | [WOUT]|[WMETA]| |:---------------------------------|:---:|:----:|:-----:|:---:|:----:|:----:|:----:|:-----:|:----:|:----:|:----:|:---:|:-----:|:-----:| | core_highdpi_testbed | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| core_screen_recording | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | rlgl_standalone | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | rlgl_compute_shader | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | easings_testbed | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |