diff options
Diffstat (limited to 'src/textures.c')
| -rw-r--r-- | src/textures.c | 71 |
1 files changed, 40 insertions, 31 deletions
diff --git a/src/textures.c b/src/textures.c index 52177b43..087352c7 100644 --- a/src/textures.c +++ b/src/textures.c @@ -170,9 +170,6 @@ //---------------------------------------------------------------------------------- // Module specific Functions Declaration //---------------------------------------------------------------------------------- -#if defined(SUPPORT_FILEFORMAT_GIF) -static Image LoadAnimatedGIF(const char *fileName, int *frames, int **delays); // Load animated GIF file -#endif #if defined(SUPPORT_FILEFORMAT_DDS) static Image LoadDDS(const char *fileName); // Load DDS file #endif @@ -363,6 +360,46 @@ Image LoadImageRaw(const char *fileName, int width, int height, int format, int return image; } +// Load animated image data +// - Image.data buffer includes all frames: [image#0][image#1][image#2][...] +// - Number of frames is returned through 'frames' parameter +// - All frames are returned in RGBA format +// - Frames delay data is discarded +Image LoadImageAnim(const char *fileName, int *frames) +{ + Image image = { 0 }; + int framesCount = 1; + +#if defined(SUPPORT_FILEFORMAT_GIF) + if (IsFileExtension(fileName, ".gif")) +#else + if (false) +#endif + { + unsigned int dataSize = 0; + unsigned char *fileData = LoadFileData(fileName, &dataSize); + + if (fileData != NULL) + { + int comp = 0; + int **delays = NULL; + image.data = stbi_load_gif_from_memory(fileData, dataSize, delays, &image.width, &image.height, &framesCount, &comp, 4); + + image.mipmaps = 1; + image.format = UNCOMPRESSED_R8G8B8A8; + + RL_FREE(fileData); + RL_FREE(delays); // NOTE: Frames delays are discarded + } + } + else image = LoadImage(fileName); + + // TODO: Support APNG animated images? + + *frames = framesCount; + return image; +} + // Unload image from CPU memory (RAM) void UnloadImage(Image image) { @@ -3706,34 +3743,6 @@ int GetPixelDataSize(int width, int height, int format) //---------------------------------------------------------------------------------- // Module specific Functions Definition //---------------------------------------------------------------------------------- -#if defined(SUPPORT_FILEFORMAT_GIF) -// Load animated GIF data -// - Image.data buffer includes all frames: [image#0][image#1][image#2][...] -// - Number of frames is returned through 'frames' parameter -// - Frames delay is returned through 'delays' parameter (int array) -// - All frames are returned in RGBA format -static Image LoadAnimatedGIF(const char *fileName, int *frames, int **delays) -{ - Image image = { 0 }; - - unsigned int dataSize = 0; - unsigned char *fileData = LoadFileData(fileName, &dataSize); - - if (fileData != NULL) - { - int comp = 0; - image.data = stbi_load_gif_from_memory(fileData, dataSize, delays, &image.width, &image.height, frames, &comp, 4); - - image.mipmaps = 1; - image.format = UNCOMPRESSED_R8G8B8A8; - - RL_FREE(fileData); - } - - return image; -} -#endif - #if defined(SUPPORT_FILEFORMAT_DDS) // Loading DDS image data (compressed or uncompressed) static Image LoadDDS(const char *fileName) |
