/examples/GFX/script_roto.pl

http://github.com/PerlGameDev/SDL · Perl · 63 lines · 46 code · 15 blank · 2 comment · 6 complexity · 9a32986d21aad826b86ca51eef91ca41 MD5 · raw file

  1. #!perl
  2. use strict;
  3. use warnings;
  4. use Carp;
  5. use SDL;
  6. use SDL::Rect;
  7. use SDL::Config;
  8. use SDL::Video;
  9. use SDL::Surface;
  10. use SDL::GFX::Rotozoom;
  11. my $display = SDL::Video::set_video_mode( 640, 480, 32, SDL_SWSURFACE );
  12. my $pixel = SDL::Video::map_RGB( $display->format, 0, 0, 0 );
  13. SDL::Video::fill_rect(
  14. $display,
  15. SDL::Rect->new( 0, 0, $display->w, $display->h ), $pixel
  16. );
  17. Carp::confess SDL::get_error if !$display;
  18. my $src = SDL::Video::load_BMP('test/data/picture.bmp');
  19. my $temp_surf;
  20. sub draw {
  21. SDL::Video::fill_rect(
  22. $display,
  23. SDL::Rect->new( 0, 0, $display->w, $display->h ), $pixel
  24. );
  25. my $surface = $_[0];
  26. SDL::Video::blit_surface(
  27. $surface, SDL::Rect->new( 0, 0, $surface->w, $surface->h ),
  28. $display, SDL::Rect->new( 0, 0, $display->w, $display->w )
  29. );
  30. SDL::Video::update_rect( $display, 0, 0, 640, 480 );
  31. SDL::delay( $_[1] ) if $_[1];
  32. }
  33. # Note: new surface should be less than 16384 in width and height
  34. foreach ( 1 .. 360 ) {
  35. $temp_surf = SDL::GFX::Rotozoom::surface( $src, $_, $_ / 180, 1 );
  36. Carp::confess SDL::get_error if !$temp_surf;
  37. draw( $temp_surf, 2 );
  38. }
  39. $temp_surf = SDL::GFX::Rotozoom::surface_xy( $src, 1, 1, 1, 1 );
  40. Carp::confess SDL::get_error if !$temp_surf;
  41. draw( $temp_surf, 1000 );
  42. $temp_surf = SDL::GFX::Rotozoom::zoom_surface( $src, 1, 1, 1 );
  43. Carp::confess SDL::get_error if !$temp_surf;
  44. draw( $temp_surf, 1000 );
  45. $temp_surf = SDL::GFX::Rotozoom::shrink_surface( $src, 1, 1 );
  46. Carp::confess SDL::get_error if !$temp_surf;
  47. draw( $temp_surf, 1000 );
  48. SDL::delay(1000);