summaryrefslogtreecommitdiffhomepage
path: root/src/rtextures.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rtextures.c')
-rw-r--r--src/rtextures.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/rtextures.c b/src/rtextures.c
index ceb1586c..675cdc34 100644
--- a/src/rtextures.c
+++ b/src/rtextures.c
@@ -9,6 +9,7 @@
* #define SUPPORT_FILEFORMAT_TGA
* #define SUPPORT_FILEFORMAT_JPG
* #define SUPPORT_FILEFORMAT_GIF
+* #define SUPPORT_FILEFORMAT_QOI
* #define SUPPORT_FILEFORMAT_PSD
* #define SUPPORT_FILEFORMAT_PIC
* #define SUPPORT_FILEFORMAT_HDR
@@ -124,6 +125,14 @@
// NOTE: Used to read image data (multiple formats support)
#endif
+#if defined(SUPPORT_FILEFORMAT_QOI)
+ #define QOI_MALLOC RL_MALLOC
+ #define QOI_FREE RL_FREE
+
+ #define QOI_IMPLEMENTATION
+ #include "external/qoi.h"
+#endif
+
#if defined(SUPPORT_IMAGE_EXPORT)
#define STBIW_MALLOC RL_MALLOC
#define STBIW_FREE RL_FREE
@@ -202,7 +211,8 @@ Image LoadImage(const char *fileName)
defined(SUPPORT_FILEFORMAT_PIC) || \
defined(SUPPORT_FILEFORMAT_HDR) || \
defined(SUPPORT_FILEFORMAT_PSD)
-#define STBI_REQUIRED
+
+ #define STBI_REQUIRED
#endif
// Loading file to memory
@@ -362,6 +372,14 @@ Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, i
#endif
}
#endif
+#if defined(SUPPORT_FILEFORMAT_QOI)
+ else if (TextIsEqual(fileExtLower, ".qoi"))
+ {
+ image.data = qoi_decode(fileData, dataSize, &image.width, &image.height, 4);
+ image.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8;
+ image.mipmaps = 1;
+ }
+#endif
#if defined(SUPPORT_FILEFORMAT_DDS)
else if (TextIsEqual(fileExtLower, ".dds")) image = LoadDDS(fileData, dataSize);
#endif
@@ -479,6 +497,17 @@ bool ExportImage(Image image, const char *fileName)
#if defined(SUPPORT_FILEFORMAT_JPG)
else if (IsFileExtension(fileName, ".jpg")) success = stbi_write_jpg(fileName, image.width, image.height, channels, imgData, 90); // JPG quality: between 1 and 100
#endif
+#if defined(SUPPORT_FILEFORMAT_QOI)
+ else if (IsFileExtension(fileName, ".qoi"))
+ {
+ channels = 0;
+ if (image.format == PIXELFORMAT_UNCOMPRESSED_R8G8B8) channels = 3;
+ else if (image.format == PIXELFORMAT_UNCOMPRESSED_R8G8B8A8) channels = 4;
+ else TRACELOG(LOG_WARNING, "IMAGE: Image pixel format must be R8G8B8 or R8G8B8A8");
+
+ if ((channels == 3) || (channels == 4)) success = qoi_write(fileName, imgData, image.width, image.height, channels);
+ }
+#endif
#if defined(SUPPORT_FILEFORMAT_KTX)
else if (IsFileExtension(fileName, ".ktx")) success = SaveKTX(image, fileName);
#endif