diff options
| -rw-r--r-- | API.md | 21 | ||||
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | ReiLua_API.lua | 23 | ||||
| -rw-r--r-- | changelog | 1 | ||||
| -rw-r--r-- | include/core.h | 2 | ||||
| -rw-r--r-- | src/core.c | 151 | ||||
| -rw-r--r-- | src/lua_core.c | 2 |
7 files changed, 120 insertions, 82 deletions
@@ -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 --- @@ -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 @@ -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 ); @@ -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. */ |
