tinyddsloader.cpp 1.2 KB

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