tinyddsloader.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #define TINYDDSLOADER_IMPLEMENTATION
  2. #include "tinyddsloader.h"
  3. #ifdef WITH_PLUGIN_EMBED
  4. #define EMSCRIPTEN_KEEPALIVE
  5. #else
  6. #include <emscripten.h>
  7. #endif
  8. using namespace tinyddsloader;
  9. static void *buf; /* Pointer to dds file data */
  10. static size_t size; /* Size of the file data */
  11. static uint8_t *pixels;
  12. static uint32_t w;
  13. static uint32_t h;
  14. static uint32_t format;
  15. EMSCRIPTEN_KEEPALIVE uint8_t *io_dds_init(int bufSize) {
  16. size = bufSize;
  17. buf = (uint8_t *)malloc(sizeof(uint8_t) * bufSize);
  18. return (uint8_t *)buf;
  19. }
  20. EMSCRIPTEN_KEEPALIVE void io_dds_parse() {
  21. if (pixels != NULL) {
  22. free(pixels);
  23. }
  24. DDSFile dds;
  25. if (dds.Load((uint8_t *)buf, size) != tinyddsloader::Result::Success) {
  26. return;
  27. }
  28. if (dds.GetTextureDimension() != DDSFile::TextureDimension::Texture2D) {
  29. return;
  30. }
  31. w = dds.GetWidth();
  32. h = dds.GetHeight();
  33. format = (uint32_t)dds.GetFormat(); // DDSFile::DXGIFormat::R8G8B8A8_Typeless
  34. // dds.Flip();
  35. // pixels = (uint8_t *)malloc(sizeof(uint8_t) * w * h * 4);
  36. pixels = (uint8_t *)dds.GetImageData(0, 0)->m_mem;
  37. }
  38. EMSCRIPTEN_KEEPALIVE void io_dds_destroy() {
  39. free(buf);
  40. free(pixels);
  41. }
  42. EMSCRIPTEN_KEEPALIVE uint8_t *io_dds_get_pixels() { return pixels; }
  43. EMSCRIPTEN_KEEPALIVE uint32_t io_dds_get_pixels_w() { return w; }
  44. EMSCRIPTEN_KEEPALIVE uint32_t io_dds_get_pixels_h() { return h; }
  45. EMSCRIPTEN_KEEPALIVE uint32_t io_dds_get_pixels_format() { return format; }