SwapBufferEndianness.
This commit is contained in:
6
API.md
6
API.md
@@ -6495,6 +6495,12 @@ Set buffer data value
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> RL.SwapBufferEndianness( Buffer buffer )
|
||||||
|
|
||||||
|
Swap buffer endianness from big endian to little endian and vice versa
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> data = RL.GetBufferData( Buffer buffer, int position, int length )
|
> data = RL.GetBufferData( Buffer buffer, int position, int length )
|
||||||
|
|
||||||
Get buffer data as table in the format it was stored
|
Get buffer data as table in the format it was stored
|
||||||
|
|||||||
@@ -2984,6 +2984,11 @@ function RL.CopyBufferData( dst, src, posDst, posSrc, size ) end
|
|||||||
---@return any RL.SetBufferData
|
---@return any RL.SetBufferData
|
||||||
function RL.SetBufferData( buffer, position, value ) end
|
function RL.SetBufferData( buffer, position, value ) end
|
||||||
|
|
||||||
|
---Swap buffer endianness from big endian to little endian and vice versa
|
||||||
|
---@param buffer any
|
||||||
|
---@return any RL.SwapBufferEndianness
|
||||||
|
function RL.SwapBufferEndianness( buffer ) end
|
||||||
|
|
||||||
---Get buffer data as table in the format it was stored
|
---Get buffer data as table in the format it was stored
|
||||||
---- Success return data{}
|
---- Success return data{}
|
||||||
---@param buffer any
|
---@param buffer any
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ DETAILED CHANGES:
|
|||||||
- ADDED: EXPOSE_API_SYMBOLS.
|
- ADDED: EXPOSE_API_SYMBOLS.
|
||||||
- ADDED: SetShaderValueWithBuffer and SetShaderValueVWithBuffer.
|
- ADDED: SetShaderValueWithBuffer and SetShaderValueVWithBuffer.
|
||||||
- ADDED: Gui Icons enumeration.
|
- ADDED: Gui Icons enumeration.
|
||||||
|
- ADDED: SwapBufferEndianness.
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
Release: ReiLua version 0.8.0 Using Raylib 5.0 and Forked Raygui 4.0
|
Release: ReiLua version 0.8.0 Using Raylib 5.0 and Forked Raygui 4.0
|
||||||
|
|||||||
2
devnotes
2
devnotes
@@ -17,8 +17,6 @@ Backlog {
|
|||||||
* Models
|
* Models
|
||||||
* Material mapType range checks.
|
* Material mapType range checks.
|
||||||
* Mesh bone weight management?
|
* Mesh bone weight management?
|
||||||
* CBuffer
|
|
||||||
* Swap endianess.
|
|
||||||
|
|
||||||
* Textures
|
* Textures
|
||||||
* Try making atlas packer with stbrp_pack_rects.
|
* Try making atlas packer with stbrp_pack_rects.
|
||||||
|
|||||||
@@ -267,6 +267,7 @@ int lcoreLoadBufferFromString( lua_State* L );
|
|||||||
int lcoreUnloadBuffer( lua_State* L );
|
int lcoreUnloadBuffer( lua_State* L );
|
||||||
int lcoreCopyBufferData( lua_State* L );
|
int lcoreCopyBufferData( lua_State* L );
|
||||||
int lcoreSetBufferData( lua_State* L );
|
int lcoreSetBufferData( lua_State* L );
|
||||||
|
int lcoreSwapBufferEndianness( lua_State* L );
|
||||||
int lcoreGetBufferData( lua_State* L );
|
int lcoreGetBufferData( lua_State* L );
|
||||||
int lcoreGetBufferAsString( lua_State* L );
|
int lcoreGetBufferAsString( lua_State* L );
|
||||||
int lcoreGetBufferType( lua_State* L );
|
int lcoreGetBufferType( lua_State* L );
|
||||||
|
|||||||
114
src/core.c
114
src/core.c
@@ -24,6 +24,38 @@ void unloadBuffer( Buffer* buffer ) {
|
|||||||
TraceLog( LOG_INFO, "BUFFER: Unloaded buffer with %u bytes of data", buffer->size );
|
TraceLog( LOG_INFO, "BUFFER: Unloaded buffer with %u bytes of data", buffer->size );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Byte swaps. */
|
||||||
|
|
||||||
|
static uint16_t swapU16( uint16_t val ) {
|
||||||
|
return (val << 8) | (val >> 8 );
|
||||||
|
}
|
||||||
|
|
||||||
|
static int16_t swapS16( int16_t val ) {
|
||||||
|
return (val << 8) | ( (val >> 8) & 0xFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32_t swapU32( uint32_t val ) {
|
||||||
|
val = ( (val << 8) & 0xFF00FF00 ) | ( (val >> 8) & 0xFF00FF );
|
||||||
|
return (val << 16) | (val >> 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t swapS32( int32_t val ) {
|
||||||
|
val = ( (val << 8) & 0xFF00FF00) | ( (val >> 8) & 0xFF00FF );
|
||||||
|
return (val << 16) | ( (val >> 16) & 0xFFFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint64_t swapU64( uint64_t val ) {
|
||||||
|
val = ( (val << 8) & 0xFF00FF00FF00FF00ULL ) | ( (val >> 8) & 0x00FF00FF00FF00FFULL );
|
||||||
|
val = ( (val << 16) & 0xFFFF0000FFFF0000ULL ) | ( (val >> 16) & 0x0000FFFF0000FFFFULL );
|
||||||
|
return (val << 32) | (val >> 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int64_t swapS64( int64_t val ) {
|
||||||
|
val = ( (val << 8) & 0xFF00FF00FF00FF00ULL ) | ( (val >> 8) & 0x00FF00FF00FF00FFULL );
|
||||||
|
val = ( (val << 16) & 0xFFFF0000FFFF0000ULL ) | ( (val >> 16) & 0x0000FFFF0000FFFFULL );
|
||||||
|
return (val << 32) | ( (val >> 32) & 0xFFFFFFFFULL);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
## Core - Window-related functions
|
## Core - Window-related functions
|
||||||
*/
|
*/
|
||||||
@@ -3834,6 +3866,69 @@ int lcoreSetBufferData( lua_State* L ) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.SwapBufferEndianness( Buffer buffer )
|
||||||
|
|
||||||
|
Swap buffer endianness from big endian to little endian and vice versa
|
||||||
|
*/
|
||||||
|
int lcoreSwapBufferEndianness( lua_State* L ) {
|
||||||
|
Buffer* buffer = uluaGetBuffer( L, 1 );
|
||||||
|
|
||||||
|
size_t elementSize = getBufferElementSize( buffer );
|
||||||
|
size_t bufLen = buffer->size / elementSize;
|
||||||
|
|
||||||
|
if ( buffer->type == BUFFER_UNSIGNED_SHORT ) {
|
||||||
|
unsigned short *p = buffer->data;
|
||||||
|
|
||||||
|
for ( int i = 0; i < bufLen; i++ ) {
|
||||||
|
*p = swapU16( *p );
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( buffer->type == BUFFER_UNSIGNED_INT ) {
|
||||||
|
unsigned int *p = buffer->data;
|
||||||
|
|
||||||
|
for ( int i = 0; i < bufLen; i++ ) {
|
||||||
|
*p = swapU32( *p );
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( buffer->type == BUFFER_SHORT ) {
|
||||||
|
short *p = buffer->data;
|
||||||
|
|
||||||
|
for ( int i = 0; i < bufLen; i++ ) {
|
||||||
|
*p = swapS16( *p );
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( buffer->type == BUFFER_INT ) {
|
||||||
|
int *p = buffer->data;
|
||||||
|
|
||||||
|
for ( int i = 0; i < bufLen; i++ ) {
|
||||||
|
*p = swapS32( *p );
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( buffer->type == BUFFER_FLOAT ) {
|
||||||
|
float *p = buffer->data;
|
||||||
|
|
||||||
|
for ( int i = 0; i < bufLen; i++ ) {
|
||||||
|
*p = swapU32( *p );
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( buffer->type == BUFFER_DOUBLE ) {
|
||||||
|
double *p = buffer->data;
|
||||||
|
|
||||||
|
for ( int i = 0; i < bufLen; i++ ) {
|
||||||
|
*p = swapU64( *p );
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> data = RL.GetBufferData( Buffer buffer, int position, int length )
|
> data = RL.GetBufferData( Buffer buffer, int position, int length )
|
||||||
|
|
||||||
@@ -3846,10 +3941,11 @@ int lcoreGetBufferData( lua_State* L ) {
|
|||||||
size_t position = luaL_checkinteger( L, 2 );
|
size_t position = luaL_checkinteger( L, 2 );
|
||||||
size_t length = luaL_checkinteger( L, 3 );
|
size_t length = luaL_checkinteger( L, 3 );
|
||||||
|
|
||||||
|
size_t bufLen = buffer->size / getBufferElementSize( buffer );
|
||||||
|
size_t count = bufLen < ( position + length ) ? ( position + length ) - bufLen : length;
|
||||||
|
|
||||||
if ( buffer->type == BUFFER_UNSIGNED_CHAR ) {
|
if ( buffer->type == BUFFER_UNSIGNED_CHAR ) {
|
||||||
unsigned char* p = buffer->data + position * 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 );
|
lua_createtable( L, count, 0 );
|
||||||
|
|
||||||
for ( int i = 0; i < count; i++ ) {
|
for ( int i = 0; i < count; i++ ) {
|
||||||
@@ -3860,8 +3956,6 @@ int lcoreGetBufferData( lua_State* L ) {
|
|||||||
}
|
}
|
||||||
else if ( buffer->type == BUFFER_UNSIGNED_SHORT ) {
|
else if ( buffer->type == BUFFER_UNSIGNED_SHORT ) {
|
||||||
unsigned short *p = buffer->data + position * 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 );
|
lua_createtable( L, count, 0 );
|
||||||
|
|
||||||
for ( int i = 0; i < count; i++ ) {
|
for ( int i = 0; i < count; i++ ) {
|
||||||
@@ -3872,8 +3966,6 @@ int lcoreGetBufferData( lua_State* L ) {
|
|||||||
}
|
}
|
||||||
else if ( buffer->type == BUFFER_UNSIGNED_INT ) {
|
else if ( buffer->type == BUFFER_UNSIGNED_INT ) {
|
||||||
unsigned int* p = buffer->data + position * 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 );
|
lua_createtable( L, count, 0 );
|
||||||
|
|
||||||
for ( int i = 0; i < count; i++ ) {
|
for ( int i = 0; i < count; i++ ) {
|
||||||
@@ -3884,8 +3976,6 @@ int lcoreGetBufferData( lua_State* L ) {
|
|||||||
}
|
}
|
||||||
else if ( buffer->type == BUFFER_CHAR ) {
|
else if ( buffer->type == BUFFER_CHAR ) {
|
||||||
char* p = buffer->data + position * 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 );
|
lua_createtable( L, count, 0 );
|
||||||
|
|
||||||
for ( int i = 0; i < count; i++ ) {
|
for ( int i = 0; i < count; i++ ) {
|
||||||
@@ -3896,8 +3986,6 @@ int lcoreGetBufferData( lua_State* L ) {
|
|||||||
}
|
}
|
||||||
else if ( buffer->type == BUFFER_SHORT ) {
|
else if ( buffer->type == BUFFER_SHORT ) {
|
||||||
short *p = buffer->data + position * 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 );
|
lua_createtable( L, count, 0 );
|
||||||
|
|
||||||
for ( int i = 0; i < count; i++ ) {
|
for ( int i = 0; i < count; i++ ) {
|
||||||
@@ -3908,8 +3996,6 @@ int lcoreGetBufferData( lua_State* L ) {
|
|||||||
}
|
}
|
||||||
else if ( buffer->type == BUFFER_INT ) {
|
else if ( buffer->type == BUFFER_INT ) {
|
||||||
int* p = buffer->data + position * 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 );
|
lua_createtable( L, count, 0 );
|
||||||
|
|
||||||
for ( int i = 0; i < count; i++ ) {
|
for ( int i = 0; i < count; i++ ) {
|
||||||
@@ -3920,8 +4006,6 @@ int lcoreGetBufferData( lua_State* L ) {
|
|||||||
}
|
}
|
||||||
else if ( buffer->type == BUFFER_FLOAT ) {
|
else if ( buffer->type == BUFFER_FLOAT ) {
|
||||||
float* p = buffer->data + position * 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 );
|
lua_createtable( L, count, 0 );
|
||||||
|
|
||||||
for ( int i = 0; i < count; i++ ) {
|
for ( int i = 0; i < count; i++ ) {
|
||||||
@@ -3932,8 +4016,6 @@ int lcoreGetBufferData( lua_State* L ) {
|
|||||||
}
|
}
|
||||||
else if ( buffer->type == BUFFER_DOUBLE ) {
|
else if ( buffer->type == BUFFER_DOUBLE ) {
|
||||||
double* p = buffer->data + position * 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 );
|
lua_createtable( L, count, 0 );
|
||||||
|
|
||||||
for ( int i = 0; i < count; i++ ) {
|
for ( int i = 0; i < count; i++ ) {
|
||||||
|
|||||||
@@ -1775,6 +1775,7 @@ void luaRegister() {
|
|||||||
assingGlobalFunction( "UnloadBuffer", lcoreUnloadBuffer );
|
assingGlobalFunction( "UnloadBuffer", lcoreUnloadBuffer );
|
||||||
assingGlobalFunction( "CopyBufferData", lcoreCopyBufferData );
|
assingGlobalFunction( "CopyBufferData", lcoreCopyBufferData );
|
||||||
assingGlobalFunction( "SetBufferData", lcoreSetBufferData );
|
assingGlobalFunction( "SetBufferData", lcoreSetBufferData );
|
||||||
|
assingGlobalFunction( "SwapBufferEndianness", lcoreSwapBufferEndianness );
|
||||||
assingGlobalFunction( "GetBufferData", lcoreGetBufferData );
|
assingGlobalFunction( "GetBufferData", lcoreGetBufferData );
|
||||||
assingGlobalFunction( "GetBufferAsString", lcoreGetBufferAsString );
|
assingGlobalFunction( "GetBufferAsString", lcoreGetBufferAsString );
|
||||||
assingGlobalFunction( "GetBufferType", lcoreGetBufferType );
|
assingGlobalFunction( "GetBufferType", lcoreGetBufferType );
|
||||||
|
|||||||
Reference in New Issue
Block a user