ExportBuffer and LoadBufferFromFile.

This commit is contained in:
jussi
2023-11-05 22:43:03 +02:00
parent d74a505d40
commit 7b8ef2cd90
7 changed files with 120 additions and 82 deletions

21
API.md
View File

@@ -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) 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). 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 ## Shapes - Drawing
--- ---

View File

@@ -58,7 +58,7 @@ end
function RL.draw() function RL.draw()
RL.ClearBackground( RL.RAYWHITE ) 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 end
``` ```

View File

@@ -1951,15 +1951,14 @@ function RL.GetFileModTime( fileName ) end
---Compress data (DEFLATE algorithm) ---Compress data (DEFLATE algorithm)
---- Success return Buffer ---- Success return Buffer
---@param data string ---@param buffer any
---@return any compData ---@return any compData
function RL.CompressData( data ) end function RL.CompressData( buffer ) end
---Decompress data (DEFLATE algorithm). ---Decompress data (DEFLATE algorithm).
---- Success return string, int ---- Success Buffer
---@param compData any ---@param compData any
---@return any data ---@return any decompData
---@return any dataSize
function RL.DecompressData( compData ) end function RL.DecompressData( compData ) end
---Encode data to Base64 string ---Encode data to Base64 string
@@ -2301,6 +2300,20 @@ function RL.GetBufferType( buffer ) end
---@return any size ---@return any size
function RL.GetBufferSize( buffer ) end 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 -- Shapes - Drawing
---Set texture and rectangle to be used on shapes drawing ---Set texture and rectangle to be used on shapes drawing

View File

@@ -39,6 +39,7 @@ DETAILED CHANGES:
- ADDED: CompressData, DecompressData, EncodeDataBase64 and DecodeDataBase64. - ADDED: CompressData, DecompressData, EncodeDataBase64 and DecodeDataBase64.
- ADDED: GetBufferType and GetBufferSize. - ADDED: GetBufferType and GetBufferSize.
- ADDED: Compress data example. - ADDED: Compress data example.
- ADDED: ExportBuffer and LoadBufferFromFile.
------------------------------------------------------------------------ ------------------------------------------------------------------------
Release: ReiLua version 0.5.0 Using Raylib 4.5 Release: ReiLua version 0.5.0 Using Raylib 4.5

View File

@@ -201,3 +201,5 @@ int lcoreUnloadBuffer( lua_State *L );
int lcoreGetBufferData( lua_State *L ); int lcoreGetBufferData( lua_State *L );
int lcoreGetBufferType( lua_State *L ); int lcoreGetBufferType( lua_State *L );
int lcoreGetBufferSize( lua_State *L ); int lcoreGetBufferSize( lua_State *L );
int lcoreExportBuffer( lua_State *L );
int lcoreLoadBufferFromFile( lua_State *L );

View File

@@ -4,6 +4,20 @@
#include "textures.h" #include "textures.h"
#include "lua_core.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 ) { void unloadBuffer( Buffer *buffer ) {
free( buffer->data ); free( buffer->data );
@@ -790,30 +804,12 @@ int lcoreLoadShader( lua_State *L ) {
lua_pushnil( L ); lua_pushnil( L );
return 1; return 1;
} }
char *vsFileName = NULL; /* Will result to NULL if given nil. */
char *fsFileName = NULL; 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 ) ); uluaPushShader( L, LoadShader( vsFileName, fsFileName ) );
if ( vsFileName != NULL ) {
free( vsFileName );
}
if ( fsFileName != NULL ) {
free( fsFileName );
}
return 1; return 1;
} }
@@ -833,30 +829,12 @@ int lcoreLoadShaderFromMemory( lua_State *L ) {
lua_pushnil( L ); lua_pushnil( L );
return 1; return 1;
} }
char *vs = NULL; /* Will result to NULL if given nil. */
char *fs = NULL; const char *vs = lua_tostring( L, 1 );
const char *fs = lua_tostring( L, 2 );
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;
fs = malloc( fsLen * sizeof( char ) );
strcpy( fs, lua_tostring( L, 2 ) );
}
uluaPushShader( L, LoadShaderFromMemory( vs, fs ) ); uluaPushShader( L, LoadShaderFromMemory( vs, fs ) );
if ( vs != NULL ) {
free( vs );
}
if ( fs != NULL ) {
free( fs );
}
return 1; 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) 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). Decompress data (DEFLATE algorithm).
- Success return string, int - Success Buffer
*/ */
int lcoreDecompressData( lua_State *L ) { int lcoreDecompressData( lua_State *L ) {
Buffer *inBuffer = uluaGetBuffer( L, 1 ); Buffer *inBuffer = uluaGetBuffer( L, 1 );
@@ -2733,34 +2711,7 @@ int lcoreLoadBuffer( lua_State *L ) {
}; };
int len = uluaGetTableLen( L, 1 ); int len = uluaGetTableLen( L, 1 );
switch ( type ) { buffer.size = len * getBufferElementSize( &buffer );
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.data = malloc( buffer.size ); buffer.data = malloc( buffer.size );
int t = 1; int t = 1;
@@ -2965,3 +2916,57 @@ int lcoreGetBufferSize( lua_State *L ) {
return 1; 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;
}

View File

@@ -1698,6 +1698,8 @@ void luaRegister() {
assingGlobalFunction( "GetBufferData", lcoreGetBufferData ); assingGlobalFunction( "GetBufferData", lcoreGetBufferData );
assingGlobalFunction( "GetBufferType", lcoreGetBufferType ); assingGlobalFunction( "GetBufferType", lcoreGetBufferType );
assingGlobalFunction( "GetBufferSize", lcoreGetBufferSize ); assingGlobalFunction( "GetBufferSize", lcoreGetBufferSize );
assingGlobalFunction( "ExportBuffer", lcoreExportBuffer );
assingGlobalFunction( "LoadBufferFromFile", lcoreLoadBufferFromFile );
/* Shapes. */ /* Shapes. */
/* Drawing. */ /* Drawing. */