02_surface_convert.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <cstdio>
  2. #include <cerrno>
  3. #include <random>
  4. #include "simple/graphical/initializer.h"
  5. #include "simple/graphical/software_window.h"
  6. #include "simple/graphical/algorithm/blit.h"
  7. #include "simple/graphical/algorithm/convert.h"
  8. using namespace simple::graphical;
  9. int2 randomPoint(int2 max)
  10. {
  11. static std::minstd_rand rand(std::random_device{}());
  12. std::uniform_int_distribution<short> dist;
  13. return int2(dist(rand), dist(rand)) % max;
  14. }
  15. int main(int argc, char const* argv[]) try
  16. {
  17. if(argc < 2)
  18. {
  19. std::puts("Image not specified.");
  20. return -1;
  21. }
  22. initializer init;
  23. software_window win("Mess", {640, 480}, window::flags::borderless);
  24. surface image(argv[1]);
  25. // significantly improves subsequent blit performance, if the original image pixel format differs from window's pixel format
  26. image = convert(image, win.surface().format());
  27. for(int i = 0; i < 1000; ++i)
  28. blit(image, win.surface(), randomPoint(win.surface().size() - image.size()));
  29. win.update();
  30. SDL_Delay(1313);
  31. return 0;
  32. }
  33. catch(...)
  34. {
  35. if(errno)
  36. std::perror("ERROR");
  37. const char* sdl_error = SDL_GetError();
  38. if(*sdl_error)
  39. std::puts(sdl_error);
  40. throw;
  41. }