packages feed

h-raylib-4.5.3.2: lib/rl_internal.c

/**
 * See rl_internal.h
 */

#pragma GCC diagnostic ignored "-Wimplicit-function-declaration"
#include "rl_internal.h"
#include <config.h>

void UnloadAudioBuffer_(rAudioBuffer *buffer)
{
    UnloadAudioBuffer(buffer);
}

void UnloadMusicStreamData(int ctxType, void *ctxData)
{
    Music music = {0};
    music.ctxData = ctxData;
    music.ctxType = ctxType;

    UnloadMusicStream(music);
}

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_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;
}