summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--API.md21
-rw-r--r--README.md2
-rw-r--r--ReiLua_API.lua23
-rw-r--r--changelog1
-rw-r--r--include/core.h2
-rw-r--r--src/core.c151
-rw-r--r--src/lua_core.c2
7 files changed, 120 insertions, 82 deletions
diff --git a/API.md b/API.md
index a057dde..c87b58a 100644
--- a/API.md
+++ b/API.md
@@ -4508,7 +4508,7 @@ Get file modification time (Last write time)
---
-> compData = RL.CompressData( string data )
+> compData = RL.CompressData( Buffer buffer )
Compress data (DEFLATE algorithm)
@@ -4516,11 +4516,11 @@ Compress data (DEFLATE algorithm)
---
-> data, dataSize = RL.DecompressData( Buffer compData )
+> decompData = RL.DecompressData( Buffer compData )
Decompress data (DEFLATE algorithm).
-- Success return string, int
+- Success Buffer
---
@@ -4920,6 +4920,21 @@ Get buffer size
---
+> RL.ExportBuffer( Buffer buffer, string path )
+
+Write buffer data to binary file
+
+---
+
+> buffer = RL.LoadBufferFromFile( string path, type int )
+
+Read buffer data from binary file
+
+- Failure return nil
+- Success return Buffer
+
+---
+
## Shapes - Drawing
---
diff --git a/README.md b/README.md
index c8ad1ce..b67dc96 100644
--- a/README.md
+++ b/README.md
@@ -58,7 +58,7 @@ end
function RL.draw()
RL.ClearBackground( RL.RAYWHITE )
- RL.DrawText( RL.defaultFont, "Congrats! You created your first window!", textPos, 20, 2, textColor )
+ RL.DrawText( RL.GetFontDefault(), "Congrats! You created your first window!", textPos, 20, 2, textColor )
end
```
diff --git a/ReiLua_API.lua b/ReiLua_API.lua
index 1341931..cefb0ee 100644
--- a/ReiLua_API.lua
+++ b/ReiLua_API.lua
@@ -1951,15 +1951,14 @@ function RL.GetFileModTime( fileName ) end
---Compress data (DEFLATE algorithm)
---- Success return Buffer
----@param data string
+---@param buffer any
---@return any compData
-function RL.CompressData( data ) end
+function RL.CompressData( buffer ) end
---Decompress data (DEFLATE algorithm).
----- Success return string, int
+---- Success Buffer
---@param compData any
----@return any data
----@return any dataSize
+---@return any decompData
function RL.DecompressData( compData ) end
---Encode data to Base64 string
@@ -2301,6 +2300,20 @@ function RL.GetBufferType( buffer ) end
---@return any size
function RL.GetBufferSize( buffer ) end
+---Write buffer data to binary file
+---@param buffer any
+---@param path string
+---@return any RL.ExportBuffer
+function RL.ExportBuffer( buffer, path ) end
+
+---Read buffer data from binary file
+---- Failure return nil
+---- Success return Buffer
+---@param path string
+---@param int any
+---@return any buffer
+function RL.LoadBufferFromFile( path, int ) end
+
-- Shapes - Drawing
---Set texture and rectangle to be used on shapes drawing
diff --git a/changelog b/changelog
index a314732..c15a914 100644
--- a/changelog
+++ b/changelog
@@ -39,6 +39,7 @@ DETAILED CHANGES:
- ADDED: CompressData, DecompressData, EncodeDataBase64 and DecodeDataBase64.
- ADDED: GetBufferType and GetBufferSize.
- ADDED: Compress data example.
+ - ADDED: ExportBuffer and LoadBufferFromFile.
------------------------------------------------------------------------
Release: ReiLua version 0.5.0 Using Raylib 4.5
diff --git a/include/core.h b/include/core.h
index ffed469..ad50f1b 100644
--- a/include/core.h
+++ b/include/core.h
@@ -201,3 +201,5 @@ int lcoreUnloadBuffer( lua_State *L );
int lcoreGetBufferData( lua_State *L );
int lcoreGetBufferType( lua_State *L );
int lcoreGetBufferSize( lua_State *L );
+int lcoreExportBuffer( lua_State *L );
+int lcoreLoadBufferFromFile( lua_State *L );
diff --git a/src/core.c b/src/core.c
index c4fbf50..a32b226 100644
--- a/src/core.c
+++ b/src/core.c
@@ -4,6 +4,20 @@
#include "textures.h"
#include "lua_core.h"
+static int getBufferElementSize( Buffer *buffer ) {
+ switch ( buffer->type ) {
+ case BUFFER_UNSIGNED_CHAR: return sizeof( unsigned char );
+ case BUFFER_UNSIGNED_SHORT: return sizeof( unsigned short );
+ case BUFFER_UNSIGNED_INT: return sizeof( unsigned int );
+ case BUFFER_CHAR: return sizeof( char );
+ case BUFFER_SHORT: return sizeof( short );
+ case BUFFER_INT: return sizeof( int );
+ case BUFFER_FLOAT: return sizeof( float );
+ case BUFFER_DOUBLE: return sizeof( double );
+ default: 1;
+ }
+}
+
void unloadBuffer( Buffer *buffer ) {
free( buffer->data );
@@ -790,30 +804,12 @@ int lcoreLoadShader( lua_State *L ) {
lua_pushnil( L );
return 1;
}
- char *vsFileName = NULL;
- char *fsFileName = NULL;
+ /* Will result to NULL if given nil. */
+ const char *vsFileName = lua_tostring( L, 1 );
+ const char *fsFileName = lua_tostring( L, 2 );
- if ( lua_isstring( L, 1 ) ) {
- if ( FileExists( lua_tostring( L, 1 ) ) ) {
- vsFileName = malloc( STRING_LEN * sizeof( char ) );
- strcpy( vsFileName, lua_tostring( L, 1 ) );
- }
- }
- if ( lua_isstring( L, 2 ) ) {
- if ( FileExists( lua_tostring( L, 2 ) ) ) {
- fsFileName = malloc( STRING_LEN * sizeof( char ) );
- strcpy( fsFileName, lua_tostring( L, 2 ) );
- }
- }
uluaPushShader( L, LoadShader( vsFileName, fsFileName ) );
- if ( vsFileName != NULL ) {
- free( vsFileName );
- }
- if ( fsFileName != NULL ) {
- free( fsFileName );
- }
-
return 1;
}
@@ -833,30 +829,12 @@ int lcoreLoadShaderFromMemory( lua_State *L ) {
lua_pushnil( L );
return 1;
}
- char *vs = NULL;
- char *fs = NULL;
-
- if ( lua_isstring( L, 1 ) ) {
- size_t vsLen = uluaGetTableLen( L, 1 ) + 1;
-
- vs = malloc( vsLen * sizeof( char ) );
- strcpy( vs, lua_tostring( L, 1 ) );
- }
- if ( lua_isstring( L, 2 ) ) {
- size_t fsLen = uluaGetTableLen( L, 2 ) + 1;
+ /* Will result to NULL if given nil. */
+ const char *vs = lua_tostring( L, 1 );
+ const char *fs = lua_tostring( L, 2 );
- fs = malloc( fsLen * sizeof( char ) );
- strcpy( fs, lua_tostring( L, 2 ) );
- }
uluaPushShader( L, LoadShaderFromMemory( vs, fs ) );
- if ( vs != NULL ) {
- free( vs );
- }
- if ( fs != NULL ) {
- free( fs );
- }
-
return 1;
}
@@ -1935,7 +1913,7 @@ int lcoreGetFileModTime( lua_State *L ) {
*/
/*
-> compData = RL.CompressData( string data )
+> compData = RL.CompressData( Buffer buffer )
Compress data (DEFLATE algorithm)
@@ -1959,11 +1937,11 @@ int lcoreCompressData( lua_State *L ) {
}
/*
-> data, dataSize = RL.DecompressData( Buffer compData )
+> decompData = RL.DecompressData( Buffer compData )
Decompress data (DEFLATE algorithm).
-- Success return string, int
+- Success Buffer
*/
int lcoreDecompressData( lua_State *L ) {
Buffer *inBuffer = uluaGetBuffer( L, 1 );
@@ -2733,34 +2711,7 @@ int lcoreLoadBuffer( lua_State *L ) {
};
int len = uluaGetTableLen( L, 1 );
- switch ( type ) {
- case BUFFER_UNSIGNED_CHAR:
- buffer.size = len * sizeof( unsigned char );
- break;
- case BUFFER_UNSIGNED_SHORT:
- buffer.size = len * sizeof( unsigned short );
- break;
- case BUFFER_UNSIGNED_INT:
- buffer.size = len * sizeof( unsigned int );
- break;
- case BUFFER_CHAR:
- buffer.size = len * sizeof( char );
- break;
- case BUFFER_SHORT:
- buffer.size = len * sizeof( short );
- break;
- case BUFFER_INT:
- buffer.size = len * sizeof( int );
- break;
- case BUFFER_FLOAT:
- buffer.size = len * sizeof( float );
- break;
- case BUFFER_DOUBLE:
- buffer.size = len * sizeof( double );
- break;
- default:
- break;
- }
+ buffer.size = len * getBufferElementSize( &buffer );
buffer.data = malloc( buffer.size );
int t = 1;
@@ -2965,3 +2916,57 @@ int lcoreGetBufferSize( lua_State *L ) {
return 1;
}
+
+/*
+> RL.ExportBuffer( Buffer buffer, string path )
+
+Write buffer data to binary file
+*/
+int lcoreExportBuffer( lua_State *L ) {
+ Buffer *buffer = uluaGetBuffer( L, 1 );
+ const char *path = luaL_checkstring( L, 2 );
+
+ size_t elementSize = getBufferElementSize( buffer );
+ FILE *file;
+ file = fopen( path, "wb" );
+
+ fwrite( buffer->data, elementSize, buffer->size / elementSize, file ) ;
+ fclose( file );
+
+ return 0;
+}
+
+/*
+> buffer = RL.LoadBufferFromFile( string path, type int )
+
+Read buffer data from binary file
+
+- Failure return nil
+- Success return Buffer
+*/
+int lcoreLoadBufferFromFile( lua_State *L ) {
+ int type = luaL_checkinteger( L, 2 );
+ const char *path = luaL_checkstring( L, 1 );
+
+ int fileLen = GetFileLength( path );
+ Buffer buffer = {
+ .type = type,
+ .size = fileLen,
+ .data = malloc( fileLen )
+ };
+ size_t elementSize = getBufferElementSize( &buffer );
+ FILE *file;
+ file = fopen( path, "rb" );
+
+ if ( file == NULL ) {
+ TraceLog( LOG_WARNING, "Invalid file %s\n", path );
+ lua_pushnil( L );
+ return 1;
+ }
+ fread( buffer.data, elementSize, buffer.size / elementSize, file );
+ fclose( file );
+
+ uluaPushBuffer( L, buffer );
+
+ return 1;
+}
diff --git a/src/lua_core.c b/src/lua_core.c
index 37d34fc..60f7f7b 100644
--- a/src/lua_core.c
+++ b/src/lua_core.c
@@ -1698,6 +1698,8 @@ void luaRegister() {
assingGlobalFunction( "GetBufferData", lcoreGetBufferData );
assingGlobalFunction( "GetBufferType", lcoreGetBufferType );
assingGlobalFunction( "GetBufferSize", lcoreGetBufferSize );
+ assingGlobalFunction( "ExportBuffer", lcoreExportBuffer );
+ assingGlobalFunction( "LoadBufferFromFile", lcoreLoadBufferFromFile );
/* Shapes. */
/* Drawing. */