h-raylib-5.1.1.0: lib/rl_internal.c
/**
* See rl_internal.h
*/
#include "rl_internal.h"
RLBIND void UnloadAudioBuffer_(rAudioBuffer *buffer)
{
Sound sound = { 0 };
AudioStream stream = { 0 };
sound.stream = stream;
stream.buffer = buffer;
UnloadSound(sound);
}
RLBIND void UnloadAudioBufferAlias(rAudioBuffer *alias)
{
unsigned char **dataPtr = (unsigned char **)((char *)alias + 368); // Hack to get a pointer to alias.data (the struct definition is not in scope)
*dataPtr = 0; // Set alias.data to NULL so the data is not cleared
UnloadAudioBuffer_(alias);
}
RLBIND void UnloadMusicStreamData(int ctxType, void *ctxData)
{
Music music = {0};
music.ctxData = ctxData;
music.ctxType = ctxType;
UnloadMusicStream(music);
}
RLBIND int rlGetPixelDataSize(int width, int height, int format)
{
int dataSize = 0; // Size in bytes
int bpp = 0; // Bits per pixel
switch (format)
{
case RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE:
bpp = 8;
break;
case RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA:
case RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5:
case RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1:
case RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4:
bpp = 16;
break;
case RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8:
bpp = 32;
break;
case RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8:
bpp = 24;
break;
case RL_PIXELFORMAT_UNCOMPRESSED_R32:
bpp = 32;
break;
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32:
bpp = 32 * 3;
break;
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32:
bpp = 32 * 4;
break;
case RL_PIXELFORMAT_UNCOMPRESSED_R16:
bpp = 16;
break;
case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16:
bpp = 16 * 3;
break;
case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16:
bpp = 16 * 4;
break;
case RL_PIXELFORMAT_COMPRESSED_DXT1_RGB:
case RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA:
case RL_PIXELFORMAT_COMPRESSED_ETC1_RGB:
case RL_PIXELFORMAT_COMPRESSED_ETC2_RGB:
case RL_PIXELFORMAT_COMPRESSED_PVRT_RGB:
case RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA:
bpp = 4;
break;
case RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA:
case RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA:
case RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA:
case RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA:
bpp = 8;
break;
case RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA:
bpp = 2;
break;
default:
break;
}
dataSize = width * height * bpp / 8; // Total data size in bytes
// Most compressed formats works on 4x4 blocks,
// if texture is smaller, minimum dataSize is 8 or 16
if ((width < 4) && (height < 4))
{
if ((format >= RL_PIXELFORMAT_COMPRESSED_DXT1_RGB) && (format < RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA))
dataSize = 8;
else if ((format >= RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA) && (format < RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA))
dataSize = 16;
}
return dataSize;
}