GetBufferData extra arguments. GetBufferElementSize and GetBufferLength.

This commit is contained in:
jussi
2024-02-16 17:28:09 +02:00
parent 48adbe20dc
commit b2b8219295
7 changed files with 102 additions and 26 deletions

20
API.md
View File

@@ -5076,7 +5076,7 @@ Unload buffer data
---
> data = RL.GetBufferData( Buffer buffer )
> data = RL.GetBufferData( Buffer buffer, int position, int length )
Get buffer data as table in the format it was stored
@@ -5094,7 +5094,23 @@ Get buffer type
> size = RL.GetBufferSize( Buffer buffer )
Get buffer size
Get buffer size in bytes
- Success return int
---
> size = RL.GetBufferElementSize( Buffer buffer )
Get buffer element size in bytes
- Success return int
---
> length = RL.GetBufferLength( Buffer buffer )
Get buffer element count
- Success return int

View File

@@ -2430,8 +2430,10 @@ function RL.UnloadBuffer( buffer ) end
---Get buffer data as table in the format it was stored
---- Success return data{}
---@param buffer any
---@param position integer
---@param length integer
---@return any data
function RL.GetBufferData( buffer ) end
function RL.GetBufferData( buffer, position, length ) end
---Get buffer type
---- Success return int
@@ -2439,12 +2441,24 @@ function RL.GetBufferData( buffer ) end
---@return any type
function RL.GetBufferType( buffer ) end
---Get buffer size
---Get buffer size in bytes
---- Success return int
---@param buffer any
---@return any size
function RL.GetBufferSize( buffer ) end
---Get buffer element size in bytes
---- Success return int
---@param buffer any
---@return any size
function RL.GetBufferElementSize( buffer ) end
---Get buffer element count
---- Success return int
---@param buffer any
---@return any length
function RL.GetBufferLength( buffer ) end
---Write buffer data to binary file
---@param buffer any
---@param path string

View File

@@ -2,8 +2,11 @@
Release: ReiLua version 0.8.0 Using Raylib 5.0 and Forked Raygui 4.0
------------------------------------------------------------------------
KEY CHANGES:
- CHANGE: GetBufferData takes also position and length arguments.
DETAILED CHANGES:
- ADDED: GetBufferElementSize and GetBufferLength.
- FIXED: Compress_data example.
------------------------------------------------------------------------
Release: ReiLua version 0.7.0 Using Raylib 5.0 and Forked Raygui 4.0

View File

@@ -21,7 +21,7 @@ local function compressDecompressData()
deCompressedText = ""
for _, c in ipairs( RL.GetBufferData( deCompBuffer ) ) do
for _, c in ipairs( RL.GetBufferData( deCompBuffer, 0, RL.GetBufferLength( deCompBuffer ) ) ) do
deCompressedText = deCompressedText..string.char( c )
end
end
@@ -30,14 +30,14 @@ function RL.draw()
RL.ClearBackground( RL.RAYWHITE )
RL.DrawText( "Decompressed text: "..deCompressedText, { 20, 200 }, 20, textColor )
if RL.GuiButton( { 20, 20, 168, 32 }, "Compress/Decompress Data" ) then
if 0 < RL.GuiButton( { 20, 20, 168, 32 }, "Compress/Decompress Data" ) then
compressDecompressData()
end
local pressed = false
pressed, text = RL.GuiTextBox( { 220, 20, 400, 32 }, text, 64, editMode )
if pressed then
if 0 < pressed then
editMode = not editMode
end
end

View File

@@ -227,4 +227,6 @@ int lcoreUnloadBuffer( lua_State *L );
int lcoreGetBufferData( lua_State *L );
int lcoreGetBufferType( lua_State *L );
int lcoreGetBufferSize( lua_State *L );
int lcoreGetBufferElementSize( lua_State *L );
int lcoreGetBufferLength( lua_State *L );
int lcoreExportBuffer( lua_State *L );

View File

@@ -3119,7 +3119,7 @@ int lcoreUnloadBuffer( lua_State *L ) {
}
/*
> data = RL.GetBufferData( Buffer buffer )
> data = RL.GetBufferData( Buffer buffer, int position, int length )
Get buffer data as table in the format it was stored
@@ -3127,10 +3127,13 @@ Get buffer data as table in the format it was stored
*/
int lcoreGetBufferData( lua_State *L ) {
Buffer *buffer = uluaGetBuffer( L, 1 );
size_t position = luaL_checkinteger( L, 2 );
size_t length = luaL_checkinteger( L, 3 );
if ( buffer->type == BUFFER_UNSIGNED_CHAR ) {
unsigned char *p = buffer->data;
size_t count = buffer->size / sizeof( unsigned char );
unsigned char *p = buffer->data + position * sizeof( unsigned char );
size_t bufLen = buffer->size / sizeof( unsigned char );
size_t count = bufLen < ( position + length ) ? ( position + length ) - bufLen : length;
lua_createtable( L, count, 0 );
for ( int i = 0; i < count; i++ ) {
@@ -3140,8 +3143,9 @@ int lcoreGetBufferData( lua_State *L ) {
}
}
else if ( buffer->type == BUFFER_UNSIGNED_SHORT ) {
unsigned short *p = buffer->data;
size_t count = buffer->size / sizeof( unsigned short );
unsigned short *p = buffer->data + position * sizeof( unsigned short );
size_t bufLen = buffer->size / sizeof( unsigned short );
size_t count = bufLen < ( position + length ) ? ( position + length ) - bufLen : length;
lua_createtable( L, count, 0 );
for ( int i = 0; i < count; i++ ) {
@@ -3151,8 +3155,9 @@ int lcoreGetBufferData( lua_State *L ) {
}
}
else if ( buffer->type == BUFFER_UNSIGNED_INT ) {
unsigned int *p = buffer->data;
size_t count = buffer->size / sizeof( unsigned int );
unsigned int *p = buffer->data + position * sizeof( unsigned int );
size_t bufLen = buffer->size / sizeof( unsigned int );
size_t count = bufLen < ( position + length ) ? ( position + length ) - bufLen : length;
lua_createtable( L, count, 0 );
for ( int i = 0; i < count; i++ ) {
@@ -3162,8 +3167,9 @@ int lcoreGetBufferData( lua_State *L ) {
}
}
else if ( buffer->type == BUFFER_CHAR ) {
char *p = buffer->data;
size_t count = buffer->size / sizeof( char );
char *p = buffer->data + position * sizeof( char );
size_t bufLen = buffer->size / sizeof( char );
size_t count = bufLen < ( position + length ) ? ( position + length ) - bufLen : length;
lua_createtable( L, count, 0 );
for ( int i = 0; i < count; i++ ) {
@@ -3173,8 +3179,9 @@ int lcoreGetBufferData( lua_State *L ) {
}
}
else if ( buffer->type == BUFFER_SHORT ) {
short *p = buffer->data;
size_t count = buffer->size / sizeof( short );
short *p = buffer->data + position * sizeof( short );
size_t bufLen = buffer->size / sizeof( short );
size_t count = bufLen < ( position + length ) ? ( position + length ) - bufLen : length;
lua_createtable( L, count, 0 );
for ( int i = 0; i < count; i++ ) {
@@ -3184,8 +3191,9 @@ int lcoreGetBufferData( lua_State *L ) {
}
}
else if ( buffer->type == BUFFER_INT ) {
int *p = buffer->data;
size_t count = buffer->size / sizeof( int );
int *p = buffer->data + position * sizeof( int );
size_t bufLen = buffer->size / sizeof( int );
size_t count = bufLen < ( position + length ) ? ( position + length ) - bufLen : length;
lua_createtable( L, count, 0 );
for ( int i = 0; i < count; i++ ) {
@@ -3195,8 +3203,9 @@ int lcoreGetBufferData( lua_State *L ) {
}
}
else if ( buffer->type == BUFFER_FLOAT ) {
float *p = buffer->data;
size_t count = buffer->size / sizeof( float );
float *p = buffer->data + position * sizeof( float );
size_t bufLen = buffer->size / sizeof( float );
size_t count = bufLen < ( position + length ) ? ( position + length ) - bufLen : length;
lua_createtable( L, count, 0 );
for ( int i = 0; i < count; i++ ) {
@@ -3206,8 +3215,9 @@ int lcoreGetBufferData( lua_State *L ) {
}
}
else if ( buffer->type == BUFFER_DOUBLE ) {
double *p = buffer->data;
size_t count = buffer->size / sizeof( double );
double *p = buffer->data + position * sizeof( double );
size_t bufLen = buffer->size / sizeof( double );
size_t count = bufLen < ( position + length ) ? ( position + length ) - bufLen : length;
lua_createtable( L, count, 0 );
for ( int i = 0; i < count; i++ ) {
@@ -3216,7 +3226,6 @@ int lcoreGetBufferData( lua_State *L ) {
p++;
}
}
return 1;
}
@@ -3238,7 +3247,7 @@ int lcoreGetBufferType( lua_State *L ) {
/*
> size = RL.GetBufferSize( Buffer buffer )
Get buffer size
Get buffer size in bytes
- Success return int
*/
@@ -3250,6 +3259,36 @@ int lcoreGetBufferSize( lua_State *L ) {
return 1;
}
/*
> size = RL.GetBufferElementSize( Buffer buffer )
Get buffer element size in bytes
- Success return int
*/
int lcoreGetBufferElementSize( lua_State *L ) {
Buffer *buffer = uluaGetBuffer( L, 1 );
lua_pushinteger( L, getBufferElementSize( buffer ) );
return 1;
}
/*
> length = RL.GetBufferLength( Buffer buffer )
Get buffer element count
- Success return int
*/
int lcoreGetBufferLength( lua_State *L ) {
Buffer *buffer = uluaGetBuffer( L, 1 );
lua_pushinteger( L, buffer->size / getBufferElementSize( buffer ) );
return 1;
}
/*
> RL.ExportBuffer( Buffer buffer, string path )

View File

@@ -1419,6 +1419,8 @@ void luaRegister() {
assingGlobalFunction( "GetBufferData", lcoreGetBufferData );
assingGlobalFunction( "GetBufferType", lcoreGetBufferType );
assingGlobalFunction( "GetBufferSize", lcoreGetBufferSize );
assingGlobalFunction( "GetBufferElementSize", lcoreGetBufferElementSize );
assingGlobalFunction( "GetBufferLength", lcoreGetBufferLength );
assingGlobalFunction( "ExportBuffer", lcoreExportBuffer );
/* Shapes. */