08_gradient.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include <cstdio>
  2. #include <cerrno>
  3. #include "simple/graphical/initializer.h"
  4. #include "simple/graphical/software_window.h"
  5. #include "simple/graphical/algorithm/blit.h"
  6. using namespace simple::graphical;
  7. int main() try
  8. {
  9. initializer init;
  10. software_window win("Gradient", {600,600}, window::flags::borderless);
  11. surface canvas(win.surface().size(), pixel_format(pixel_format::type::rgb24));
  12. auto pixels = std::get<pixel_writer<rgb_pixel, surface::byte>>(canvas.pixels());
  13. auto start = rgb_vector(0.0f,1.0f,1.0f);
  14. auto end = rgb_vector(1.0f,0.0f,1.0f);
  15. rgb_vector color;
  16. for(int2 position{}; position < pixels.size(); ++position.y())
  17. {
  18. for(; position < pixels.size(); ++position.x())
  19. {
  20. auto ratio = float2(position) / float2(pixels.size());
  21. color = start + (end - start) * rgb_vector(ratio.xyz(1.0f));
  22. pixels.set( rgb_pixel(color), position );
  23. }
  24. position.x() = 0;
  25. }
  26. blit(canvas, win.surface());
  27. win.update();
  28. SDL_Delay(1313);
  29. return 0;
  30. }
  31. catch(...)
  32. {
  33. if(errno)
  34. std::perror("ERROR");
  35. const char* sdl_error = SDL_GetError();
  36. if(*sdl_error)
  37. std::puts(sdl_error);
  38. throw;
  39. }