Texture.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include "Texture.h"
  2. #include <cstdint>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include "utility/misc.h"
  6. #include "render/Pixel.h"
  7. #include "lodepng.h"
  8. #include <3ds.h>
  9. #include <sf2d.h>
  10. using namespace WalrusRPG::Graphics; /*Texture*/
  11. using WalrusRPG::Graphics::Pixel;
  12. using WalrusRPG::PIAF::File;
  13. using WalrusRPG::Utils::Rect;
  14. #include "Logger.h"
  15. Texture::Texture(char *data) : data()
  16. {
  17. uint16_t *data_16 = (uint16_t *) data;
  18. this->data =
  19. sf2d_create_texture(data_16[0], data_16[1], TEXFMT_RGB565, SF2D_PLACE_VRAM);
  20. memcpy(this->data->data, &data_16[3], data_16[0] * data_16[1] * sizeof(uint16_t));
  21. }
  22. Texture::Texture(WalrusRPG::PIAF::File entry)
  23. {
  24. unsigned char *pic;
  25. unsigned width, height;
  26. signed result = lodepng_decode32(&pic, &width, &height, (unsigned char *) entry.get(),
  27. entry.file_size);
  28. data =
  29. sf2d_create_texture_mem_RGBA8(pic, width, height, TEXFMT_RGBA8, SF2D_PLACE_RAM);
  30. Logger::debug("Ready : %p", data);
  31. free(pic);
  32. }
  33. Texture::~Texture()
  34. {
  35. sf2d_free_texture(data);
  36. }
  37. const Rect Texture::get_dimensions()
  38. {
  39. return {0, 0, data->width, data->height};
  40. }
  41. const Pixel Texture::get_pixel(unsigned x, unsigned y)
  42. {
  43. u32 pixel = sf2d_get_pixel(data, x, y);
  44. return Pixel(RGBA8_GET_R(pixel), RGBA8_GET_G(pixel), RGBA8_GET_B(pixel));
  45. }