diff options
| -rw-r--r-- | API.md | 2 | ||||
| -rw-r--r-- | ReiLua_API.lua | 4 | ||||
| -rw-r--r-- | changelog | 1 | ||||
| -rw-r--r-- | examples/compressed_resource_file/main.lua | 10 | ||||
| -rw-r--r-- | src/core.c | 181 |
5 files changed, 81 insertions, 117 deletions
@@ -6501,7 +6501,7 @@ Copy buffer data to another buffer. Size is in bytes --- -> RL.SetBufferData( Buffer buffer, int position, any value ) +> RL.SetBufferData( Buffer buffer, int position, any{} values ) Set buffer data value diff --git a/ReiLua_API.lua b/ReiLua_API.lua index a33cc05..4621123 100644 --- a/ReiLua_API.lua +++ b/ReiLua_API.lua @@ -2984,9 +2984,9 @@ function RL.CopyBufferData( dst, src, posDst, posSrc, size ) end ---Set buffer data value ---@param buffer any ---@param position integer ----@param value any +---@param values table ---@return any RL.SetBufferData -function RL.SetBufferData( buffer, position, value ) end +function RL.SetBufferData( buffer, position, values ) end ---Swap buffer endianness from big endian to little endian and vice versa ---@param buffer any @@ -34,6 +34,7 @@ DETAILED CHANGES: - ADDED: Reference lib. - ADDED: BUFFER_UNSIGNED_LONG and BUFFER_LONG. - FIXED: Bitwise functions now use 64 bit integers. + - CHANGE: SetBufferData takes table of values. ------------------------------------------------------------------------ Release: ReiLua version 0.8.0 Using Raylib 5.0 and Forked Raygui 4.0 diff --git a/examples/compressed_resource_file/main.lua b/examples/compressed_resource_file/main.lua index ae37f3f..f22e03a 100644 --- a/examples/compressed_resource_file/main.lua +++ b/examples/compressed_resource_file/main.lua @@ -27,10 +27,12 @@ local function writeDataFile( path ) local totalLength = 4 + RL.GetBufferLength( imgData.data ) / 4 local buffer = RL.LoadBufferFormatted( totalLength, RL.BUFFER_UNSIGNED_INT, 0 ) - RL.SetBufferData( buffer, 0, imgData.size.x ) - RL.SetBufferData( buffer, 1, imgData.size.y ) - RL.SetBufferData( buffer, 2, imgData.mipmaps ) - RL.SetBufferData( buffer, 3, imgData.format ) + RL.SetBufferData( buffer, 0, { + imgData.size.x, + imgData.size.y, + imgData.mipmaps, + imgData.format, + } ) RL.CopyBufferData( buffer, imgData.data, 4, 0, RL.GetBufferLength( imgData.data ) ) if compress then @@ -20,6 +20,70 @@ static size_t getBufferElementSize( Buffer* buffer ) { return 1; } +static void setBufferData( lua_State* L, Buffer* buffer, int index, size_t offset ) { + int t = index; + unsigned char* ucp = buffer->data + offset; + unsigned short* usp = buffer->data + offset; + unsigned int* uip = buffer->data + offset; + unsigned long* ulp = buffer->data + offset; + char* cp = buffer->data + offset; + short* sp = buffer->data + offset; + int* ip = buffer->data + offset; + long* lp = buffer->data + offset; + float* fp = buffer->data + offset; + double* dp = buffer->data + offset; + + lua_pushnil( L ); + + while ( lua_next( L, t ) != 0 ) { + switch ( buffer->type ) { + case BUFFER_UNSIGNED_CHAR: + *ucp = (unsigned char)lua_tointeger( L, -1 ); + ucp++; + break; + case BUFFER_UNSIGNED_SHORT: + *usp = (unsigned short)lua_tointeger( L, -1 ); + usp++; + break; + case BUFFER_UNSIGNED_INT: + *uip = (unsigned int)lua_tointeger( L, -1 ); + uip++; + break; + case BUFFER_UNSIGNED_LONG: + *ulp = (unsigned long)lua_tointeger( L, -1 ); + ulp++; + break; + case BUFFER_CHAR: + *cp = (char)lua_tointeger( L, -1 ); + cp++; + break; + case BUFFER_SHORT: + *sp = (short)lua_tointeger( L, -1 ); + sp++; + break; + case BUFFER_INT: + *ip = (int)lua_tointeger( L, -1 ); + ip++; + break; + case BUFFER_LONG: + *lp = (long)lua_tointeger( L, -1 ); + lp++; + break; + case BUFFER_FLOAT: + *fp = (float)lua_tonumber( L, -1 ); + fp++; + break; + case BUFFER_DOUBLE: + *dp = (double)lua_tonumber( L, -1 ); + dp++; + break; + default: + break; + } + lua_pop( L, 1 ); + } +} + void unloadBuffer( Buffer* buffer ) { free( buffer->data ); @@ -3628,69 +3692,7 @@ int lcoreLoadBuffer( lua_State* L ) { buffer.size = len * getBufferElementSize( &buffer ); buffer.data = malloc( buffer.size ); - int t = 1; - int i = 0; - unsigned char* ucp = buffer.data; - unsigned short* usp = buffer.data; - unsigned int* uip = buffer.data; - unsigned long* ulp = buffer.data; - char* cp = buffer.data; - short* sp = buffer.data; - int* ip = buffer.data; - long* lp = buffer.data; - float* fp = buffer.data; - double* dp = buffer.data; - - lua_pushnil( L ); - - while ( lua_next( L, t ) != 0 ) { - switch ( type ) { - case BUFFER_UNSIGNED_CHAR: - *ucp = (unsigned char)lua_tointeger( L, -1 ); - ucp++; - break; - case BUFFER_UNSIGNED_SHORT: - *usp = (unsigned short)lua_tointeger( L, -1 ); - usp++; - break; - case BUFFER_UNSIGNED_INT: - *uip = (unsigned int)lua_tointeger( L, -1 ); - uip++; - break; - case BUFFER_UNSIGNED_LONG: - *ulp = (unsigned long)lua_tointeger( L, -1 ); - ulp++; - break; - case BUFFER_CHAR: - *cp = (char)lua_tointeger( L, -1 ); - cp++; - break; - case BUFFER_SHORT: - *sp = (short)lua_tointeger( L, -1 ); - sp++; - break; - case BUFFER_INT: - *ip = (int)lua_tointeger( L, -1 ); - ip++; - break; - case BUFFER_LONG: - *lp = (long)lua_tointeger( L, -1 ); - lp++; - break; - case BUFFER_FLOAT: - *fp = (float)lua_tonumber( L, -1 ); - fp++; - break; - case BUFFER_DOUBLE: - *dp = (double)lua_tonumber( L, -1 ); - dp++; - break; - default: - break; - } - lua_pop( L, 1 ); - i++; - } + setBufferData( L, &buffer, 1, 0 ); uluaPushBuffer( L, buffer ); return 1; @@ -3823,65 +3825,24 @@ int lcoreCopyBufferData( lua_State* L ) { } /* -> RL.SetBufferData( Buffer buffer, int position, any value ) +> RL.SetBufferData( Buffer buffer, int position, any{} values ) Set buffer data value */ int lcoreSetBufferData( lua_State* L ) { Buffer* buffer = uluaGetBuffer( L, 1 ); size_t position = luaL_checkinteger( L, 2 ); + luaL_checktype( L, 3, LUA_TTABLE ); + + int len = uluaGetTableLen( L, 3 ); - if ( position < 0 || buffer->size / getBufferElementSize( buffer ) <= position ) { + if ( position < 0 || buffer->size / getBufferElementSize( buffer ) <= ( position + len - 1 ) ) { TraceLog( state->logLevelInvalid, "SetBufferData. position %d out of bounds", position ); return 0; } size_t offset = position * getBufferElementSize( buffer ); - unsigned char* ucp = buffer->data + offset; - unsigned short* usp = buffer->data + offset; - unsigned int* uip = buffer->data + offset; - unsigned long* ulp = buffer->data + offset; - char* cp = buffer->data + offset; - short* sp = buffer->data + offset; - int* ip = buffer->data + offset; - long* lp = buffer->data + offset; - float* fp = buffer->data + offset; - double* dp = buffer->data + offset; - - switch ( buffer->type ) { - case BUFFER_UNSIGNED_CHAR: - *ucp = (unsigned char)lua_tointeger( L, -1 ); - break; - case BUFFER_UNSIGNED_SHORT: - *usp = (unsigned short)lua_tointeger( L, -1 ); - break; - case BUFFER_UNSIGNED_INT: - *uip = (unsigned int)lua_tointeger( L, -1 ); - break; - case BUFFER_UNSIGNED_LONG: - *ulp = (unsigned long)lua_tointeger( L, -1 ); - break; - case BUFFER_CHAR: - *cp = (char)lua_tointeger( L, -1 ); - break; - case BUFFER_SHORT: - *sp = (short)lua_tointeger( L, -1 ); - break; - case BUFFER_INT: - *ip = (int)lua_tointeger( L, -1 ); - break; - case BUFFER_LONG: - *lp = (long)lua_tointeger( L, -1 ); - break; - case BUFFER_FLOAT: - *fp = (float)lua_tonumber( L, -1 ); - break; - case BUFFER_DOUBLE: - *dp = (double)lua_tonumber( L, -1 ); - break; - default: - break; - } + setBufferData( L, buffer, 3, offset ); return 0; } |
