/t/gfx_imagefilter.t

http://github.com/PerlGameDev/SDL · Perl · 168 lines · 111 code · 16 blank · 41 comment · 10 complexity · 868a33dd47f2a9b5385fdd76cd25a9aa MD5 · raw file

  1. #!perl
  2. use strict;
  3. use warnings;
  4. use SDL;
  5. use SDL::Rect;
  6. use SDL::Config;
  7. use SDL::Video;
  8. use SDL::Version;
  9. use SDL::Surface;
  10. use SDL::PixelFormat;
  11. use SDL::GFX;
  12. use SDL::GFX::ImageFilter;
  13. use Test::More;
  14. use lib 't/lib';
  15. use SDL::TestTool;
  16. my $videodriver = $ENV{SDL_VIDEODRIVER};
  17. $ENV{SDL_VIDEODRIVER} = 'dummy' unless $ENV{SDL_RELEASE_TESTING};
  18. if ( !SDL::TestTool->init(SDL_INIT_VIDEO) ) {
  19. plan( skip_all => 'Failed to init video' );
  20. } elsif ( !SDL::Config->has('SDL_gfx_imagefilter') ) {
  21. plan( skip_all => 'SDL_gfx_imagefilter support not compiled' );
  22. } else {
  23. plan( tests => 8 );
  24. }
  25. my $v = SDL::GFX::linked_version();
  26. isa_ok( $v, 'SDL::Version', '[linked_version]' );
  27. printf( "got version: %d.%d.%d\n", $v->major, $v->minor, $v->patch );
  28. my @done = qw/
  29. MMX_detect
  30. /;
  31. my $display = SDL::Video::set_video_mode( 640, 480, 32, SDL_SWSURFACE );
  32. my $pixel = SDL::Video::map_RGB( $display->format, 0, 0, 0 );
  33. SDL::Video::fill_rect(
  34. $display,
  35. SDL::Rect->new( 0, 0, $display->w, $display->h ), $pixel
  36. );
  37. if ( !$display ) {
  38. plan skip_all => 'Couldn\'t set video mode: ' . SDL::get_error();
  39. }
  40. my $mmx_before = SDL::GFX::ImageFilter::MMX_detect();
  41. is( $mmx_before == 1 || $mmx_before == 0, 1, "MMX_detect == $mmx_before" );
  42. is( SDL::GFX::ImageFilter::MMX_off(), undef, 'MMX_off' );
  43. is( SDL::GFX::ImageFilter::MMX_detect(), 0, "MMX_detect (MMX is off now)" );
  44. is( SDL::GFX::ImageFilter::MMX_on(), undef, 'MMX_on' );
  45. is( SDL::GFX::ImageFilter::MMX_detect(),
  46. $mmx_before, "MMX_detect (MMX is same as at start)"
  47. );
  48. #add(Src1, Src2, Dest, length)
  49. #mean(Src1, Src2, Dest, length)
  50. #sub(Src1, Src2, Dest, length)
  51. #abs_diff(Src1, Src2, Dest, length)
  52. #mult(Src1, Src2, Dest, length)
  53. #mult_nor(Src1, Src2, Dest, length)
  54. #mult_div_by_2(Src1, Src2, Dest, length)
  55. #mult_div_by_4(Src1, Src2, Dest, length)
  56. #bit_and(Src1, Src2, Dest, length)
  57. #bit_or(Src1, Src2, Dest, length)
  58. #div(Src1, Src2, Dest, length)
  59. #bit_negation(Src1, Dest, length)
  60. #add_byte(Src1, Dest, length, C)
  61. #add_uint(Src1, Dest, length, C)
  62. #add_byte_to_half(Src1, Dest, length, C)
  63. #sub_byte(Src1, Dest, length, C)
  64. #sub_uint(Src1, Dest, length, C)
  65. #shift_right(Src1, Dest, length, N)
  66. #shift_right_uint(Src1, Dest, length, N)
  67. #mult_by_byte(Src1, Dest, length, C)
  68. #shift_right_and_mult_by_byte(Src1, Dest, length, N, C)
  69. #shift_left_byte(Src1, Dest, length, N)
  70. #shift_left_uint(Src1, Dest, length, N)
  71. #shift_left(Src1, Dest, length, N)
  72. #binarize_using_threshold(Src1, Dest, length, T)
  73. #clip_to_range(Src1, Dest, length, Tmin, Tmax)
  74. #normalize_linear(Src1, Dest, length, Cmin, Cmax, Nmin, Nmax)
  75. #convolve_kernel_3x3_divide(Src, Dest, rows, columns, Kernel, Divisor)
  76. #convolve_kernel_5x5_divide(Src, Dest, rows, columns, Kernel, Divisor)
  77. #convolve_kernel_7x7_divide(Src, Dest, rows, columns, Kernel, Divisor)
  78. #convolve_kernel_9x9_divide(Src, Dest, rows, columns, Kernel, Divisor)
  79. #convolve_kernel_3x3_shift_right(Src, Dest, rows, columns, Kernel, NRightShift)
  80. #convolve_kernel_5x5_shift_right(Src, Dest, rows, columns, Kernel, NRightShift)
  81. #convolve_kernel_7x7_shift_right(Src, Dest, rows, columns, Kernel, NRightShift)
  82. #convolve_kernel_9x9_shift_right(Src, Dest, rows, columns, Kernel, NRightShift)
  83. #sobel_x(Src, Dest, rows, columns)
  84. #sobel_x_shift_right(Src, Dest, rows, columns, NRightShift)
  85. #align_stack()
  86. #restore_stack()
  87. SDL::Video::update_rect( $display, 0, 0, 640, 480 );
  88. #SDL::delay(1000);
  89. my @left = qw/
  90. MMX_detect
  91. MMX_off
  92. MMX_on
  93. add
  94. mean
  95. sub
  96. abs_diff
  97. mult
  98. mult_nor
  99. mult_div_by_2
  100. mult_div_by_4
  101. bit_and
  102. bit_or
  103. div
  104. bit_negation
  105. add_byte
  106. add_uint
  107. add_byte_to_half
  108. sub_byte
  109. sub_uint
  110. shift_right
  111. shift_right_uint
  112. mult_by_byte
  113. shift_right_and_mult_by_byte
  114. shift_left_byte
  115. shift_left_uint
  116. shift_left
  117. binarize_using_threshold
  118. clip_to_range
  119. normalize_linear
  120. convolve_kernel_3x3_divide
  121. convolve_kernel_5x5_divide
  122. convolve_kernel_7x7_divide
  123. convolve_kernel_9x9_divide
  124. convolve_kernel_3x3_shift_right
  125. convolve_kernel_5x5_shift_right
  126. convolve_kernel_7x7_shift_right
  127. convolve_kernel_9x9_shift_right
  128. sobel_x
  129. sobel_x_shift_right
  130. align_stack
  131. restore_stack
  132. /;
  133. my $why =
  134. '[Percentage Completion] '
  135. . int( 100 * ( $#done + 1 ) / ( $#done + $#left + 2 ) )
  136. . '% implementation. '
  137. . ( $#done + 1 ) . '/'
  138. . ( $#done + $#left + 2 );
  139. TODO:
  140. {
  141. local $TODO = $why;
  142. pass "\nThe following functions:\n" . join ",", @left;
  143. }
  144. if ( $done[0] eq 'none' ) { print '0% done 0/' . $#left . "\n" }
  145. else { print "$why\n" }
  146. if ($videodriver) {
  147. $ENV{SDL_VIDEODRIVER} = $videodriver;
  148. } else {
  149. delete $ENV{SDL_VIDEODRIVER};
  150. }
  151. pass 'Are we still alive? Checking for segfaults';
  152. done_testing;