blob: 8d63b043122da1700022d64d159cd61e95d52323 [file] [edit]
/*
* Copyright 2026 Rive
*/
#include "rive/decoders/texture_decoder.hpp"
#include <cstdio>
#ifdef RIVE_ASTC_DECODER
std::unique_ptr<Bitmap> decode_astc_texture(const uint8_t* blocks,
size_t byteCount,
uint32_t width,
uint32_t height,
uint32_t blockWidth,
uint32_t blockHeight);
#endif
#ifdef RIVE_BC_DECODER
std::unique_ptr<Bitmap> decode_bc_texture(const uint8_t* blocks,
size_t byteCount,
uint32_t width,
uint32_t height,
rive::GPUTextureFormat format);
#endif
#ifdef RIVE_ETC_DECODER
std::unique_ptr<Bitmap> decode_etc_texture(const uint8_t* blocks,
size_t byteCount,
uint32_t width,
uint32_t height,
rive::GPUTextureFormat format);
#endif
// Body branches reference these params via #ifdef; mark as maybe-unused so
// no-decoder-compiled-in builds don't warn.
std::unique_ptr<Bitmap> decode_texture([[maybe_unused]] const uint8_t* blocks,
[[maybe_unused]] size_t byteCount,
[[maybe_unused]] uint32_t width,
[[maybe_unused]] uint32_t height,
rive::GPUTextureFormat format,
[[maybe_unused]] uint32_t blockWidth,
[[maybe_unused]] uint32_t blockHeight)
{
switch (format)
{
case rive::GPUTextureFormat::astc:
#ifdef RIVE_ASTC_DECODER
return decode_astc_texture(blocks,
byteCount,
width,
height,
blockWidth,
blockHeight);
#else
fprintf(stderr,
"ASTC texture not supported "
"(build with --with_rive_astc_decoder)\n");
return nullptr;
#endif
case rive::GPUTextureFormat::bc1:
case rive::GPUTextureFormat::bc2:
case rive::GPUTextureFormat::bc3:
case rive::GPUTextureFormat::bc7:
#ifdef RIVE_BC_DECODER
return decode_bc_texture(blocks, byteCount, width, height, format);
#else
fprintf(stderr,
"BC texture not supported "
"(build with --with_rive_bc_decoder)\n");
return nullptr;
#endif
case rive::GPUTextureFormat::etc2:
#ifdef RIVE_ETC_DECODER
return decode_etc_texture(blocks, byteCount, width, height, format);
#else
fprintf(stderr,
"ETC texture not supported "
"(build with --with_rive_etc_decoder)\n");
return nullptr;
#endif
default:
fprintf(stderr,
"decode_texture - unsupported format %u\n",
static_cast<unsigned>(format));
return nullptr;
}
}