aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2019-09-09 21:56:16 +0200
committerRay <raysan5@gmail.com>2019-09-09 21:56:16 +0200
commitae2452d280a07952529ea82bcc2288d73bc3ccdf (patch)
treea5c7d94b2a34392e11855e4abd17b094ead9491a /src
parent2d6bc1ff429a25313415c55f6683956cf6f5ebdc (diff)
downloadraylib-ae2452d280a07952529ea82bcc2288d73bc3ccdf.tar.gz
raylib-ae2452d280a07952529ea82bcc2288d73bc3ccdf.zip
ADDED small compression API
- ADDED: CompressData() - ADDED: DecompressData()
Diffstat (limited to 'src')
-rw-r--r--src/config.h3
-rw-r--r--src/config.h.in2
-rw-r--r--src/core.c37
-rw-r--r--src/raylib.h3
4 files changed, 44 insertions, 1 deletions
diff --git a/src/config.h b/src/config.h
index 250b702a..068e2c43 100644
--- a/src/config.h
+++ b/src/config.h
@@ -56,7 +56,8 @@
#define SUPPORT_GIF_RECORDING 1
// Allow scale all the drawn content to match the high-DPI equivalent size (only PLATFORM_DESKTOP)
//#define SUPPORT_HIGH_DPI 1
-
+// Support CompressData() and DecompressData() functions
+#define SUPPORT_COMPRESSION_API 1
//------------------------------------------------------------------------------------
// Module: rlgl - Configuration Flags
diff --git a/src/config.h.in b/src/config.h.in
index 10e37726..6a71b77b 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -19,6 +19,8 @@
#cmakedefine SUPPORT_GIF_RECORDING 1
// Support high DPI displays
#cmakedefine SUPPORT_HIGH_DPI 1
+// Support CompressData() and DecompressData() functions
+#cmakedefine SUPPORT_COMPRESSION_API 1
// rlgl.h
// Support VR simulation functionality (stereo rendering)
diff --git a/src/core.c b/src/core.c
index 44ac12b5..1506a4fa 100644
--- a/src/core.c
+++ b/src/core.c
@@ -74,6 +74,11 @@
* Allow scale all the drawn content to match the high-DPI equivalent size (only PLATFORM_DESKTOP)
* NOTE: This flag is forced on macOS, since most displays are high-DPI
*
+* #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
+* for linkage
+*
* DEPENDENCIES:
* rglfw - Manage graphic device, OpenGL context and inputs on PLATFORM_DESKTOP (Windows, Linux, OSX. FreeBSD, OpenBSD, NetBSD, DragonFly)
* raymath - 3D math functionality (Vector2, Vector3, Matrix, Quaternion)
@@ -252,6 +257,12 @@
#include <emscripten/html5.h> // Emscripten HTML5 library
#endif
+#if defined(SUPPORT_COMPRESSION_API)
+ // NOTE: Those declarations require stb_image and stb_image_write definitions, included in textures module
+ unsigned char *stbi_zlib_compress(unsigned char *data, int data_len, int *out_len, int quality);
+ char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen);
+#endif
+
//----------------------------------------------------------------------------------
// Defines and Macros
//----------------------------------------------------------------------------------
@@ -2019,6 +2030,32 @@ long GetFileModTime(const char *fileName)
return 0;
}
+// Compress data (DEFLATE algorythm)
+unsigned char *CompressData(unsigned char *data, int dataLength, int *compDataLength)
+{
+ #define COMPRESSION_QUALITY_DEFLATE 8
+
+ unsigned char *compData = NULL;
+
+#if defined(SUPPORT_COMPRESSION_API)
+ compData = stbi_zlib_compress(data, dataLength, compDataLength, COMPRESSION_QUALITY_DEFLATE);
+#endif
+
+ return compData;
+}
+
+// Decompress data (DEFLATE algorythm)
+char *DecompressData(char *compData, int compDataLength, int *dataLength)
+{
+ char *data = NULL;
+
+#if defined(SUPPORT_COMPRESSION_API)
+ data = stbi_zlib_decode_malloc(compData, compDataLength, dataLength);
+#endif
+
+ return data;
+}
+
// Save integer value to storage file (to defined position)
// NOTE: Storage positions is directly related to file memory layout (4 bytes each integer)
void StorageSaveValue(int position, int value)
diff --git a/src/raylib.h b/src/raylib.h
index ed0314d3..3bbf471b 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -955,6 +955,9 @@ RLAPI char **GetDroppedFiles(int *count); // Get dropped
RLAPI void ClearDroppedFiles(void); // Clear dropped files paths buffer (free memory)
RLAPI long GetFileModTime(const char *fileName); // Get file modification time (last write time)
+RLAPI unsigned char *CompressData(unsigned char *data, int dataLength, int *compDataLength); // Compress data (DEFLATE algorythm)
+RLAPI char *DecompressData(char *compData, int compDataLength, int *dataLength); // Decompress data (DEFLATE algorythm)
+
// Persistent storage management
RLAPI void StorageSaveValue(int position, int value); // Save integer value to storage file (to defined position)
RLAPI int StorageLoadValue(int position); // Load integer value from storage file (from defined position)