/t/gfx_imagefilter.t
http://github.com/PerlGameDev/SDL · Perl · 168 lines · 111 code · 16 blank · 41 comment · 10 complexity · 868a33dd47f2a9b5385fdd76cd25a9aa MD5 · raw file
- #!perl
- use strict;
- use warnings;
- use SDL;
- use SDL::Rect;
- use SDL::Config;
- use SDL::Video;
- use SDL::Version;
- use SDL::Surface;
- use SDL::PixelFormat;
- use SDL::GFX;
- use SDL::GFX::ImageFilter;
- use Test::More;
- use lib 't/lib';
- use SDL::TestTool;
- my $videodriver = $ENV{SDL_VIDEODRIVER};
- $ENV{SDL_VIDEODRIVER} = 'dummy' unless $ENV{SDL_RELEASE_TESTING};
- if ( !SDL::TestTool->init(SDL_INIT_VIDEO) ) {
- plan( skip_all => 'Failed to init video' );
- } elsif ( !SDL::Config->has('SDL_gfx_imagefilter') ) {
- plan( skip_all => 'SDL_gfx_imagefilter support not compiled' );
- } else {
- plan( tests => 8 );
- }
- my $v = SDL::GFX::linked_version();
- isa_ok( $v, 'SDL::Version', '[linked_version]' );
- printf( "got version: %d.%d.%d\n", $v->major, $v->minor, $v->patch );
- my @done = qw/
- MMX_detect
- /;
- my $display = SDL::Video::set_video_mode( 640, 480, 32, SDL_SWSURFACE );
- my $pixel = SDL::Video::map_RGB( $display->format, 0, 0, 0 );
- SDL::Video::fill_rect(
- $display,
- SDL::Rect->new( 0, 0, $display->w, $display->h ), $pixel
- );
- if ( !$display ) {
- plan skip_all => 'Couldn\'t set video mode: ' . SDL::get_error();
- }
- my $mmx_before = SDL::GFX::ImageFilter::MMX_detect();
- is( $mmx_before == 1 || $mmx_before == 0, 1, "MMX_detect == $mmx_before" );
- is( SDL::GFX::ImageFilter::MMX_off(), undef, 'MMX_off' );
- is( SDL::GFX::ImageFilter::MMX_detect(), 0, "MMX_detect (MMX is off now)" );
- is( SDL::GFX::ImageFilter::MMX_on(), undef, 'MMX_on' );
- is( SDL::GFX::ImageFilter::MMX_detect(),
- $mmx_before, "MMX_detect (MMX is same as at start)"
- );
- #add(Src1, Src2, Dest, length)
- #mean(Src1, Src2, Dest, length)
- #sub(Src1, Src2, Dest, length)
- #abs_diff(Src1, Src2, Dest, length)
- #mult(Src1, Src2, Dest, length)
- #mult_nor(Src1, Src2, Dest, length)
- #mult_div_by_2(Src1, Src2, Dest, length)
- #mult_div_by_4(Src1, Src2, Dest, length)
- #bit_and(Src1, Src2, Dest, length)
- #bit_or(Src1, Src2, Dest, length)
- #div(Src1, Src2, Dest, length)
- #bit_negation(Src1, Dest, length)
- #add_byte(Src1, Dest, length, C)
- #add_uint(Src1, Dest, length, C)
- #add_byte_to_half(Src1, Dest, length, C)
- #sub_byte(Src1, Dest, length, C)
- #sub_uint(Src1, Dest, length, C)
- #shift_right(Src1, Dest, length, N)
- #shift_right_uint(Src1, Dest, length, N)
- #mult_by_byte(Src1, Dest, length, C)
- #shift_right_and_mult_by_byte(Src1, Dest, length, N, C)
- #shift_left_byte(Src1, Dest, length, N)
- #shift_left_uint(Src1, Dest, length, N)
- #shift_left(Src1, Dest, length, N)
- #binarize_using_threshold(Src1, Dest, length, T)
- #clip_to_range(Src1, Dest, length, Tmin, Tmax)
- #normalize_linear(Src1, Dest, length, Cmin, Cmax, Nmin, Nmax)
- #convolve_kernel_3x3_divide(Src, Dest, rows, columns, Kernel, Divisor)
- #convolve_kernel_5x5_divide(Src, Dest, rows, columns, Kernel, Divisor)
- #convolve_kernel_7x7_divide(Src, Dest, rows, columns, Kernel, Divisor)
- #convolve_kernel_9x9_divide(Src, Dest, rows, columns, Kernel, Divisor)
- #convolve_kernel_3x3_shift_right(Src, Dest, rows, columns, Kernel, NRightShift)
- #convolve_kernel_5x5_shift_right(Src, Dest, rows, columns, Kernel, NRightShift)
- #convolve_kernel_7x7_shift_right(Src, Dest, rows, columns, Kernel, NRightShift)
- #convolve_kernel_9x9_shift_right(Src, Dest, rows, columns, Kernel, NRightShift)
- #sobel_x(Src, Dest, rows, columns)
- #sobel_x_shift_right(Src, Dest, rows, columns, NRightShift)
- #align_stack()
- #restore_stack()
- SDL::Video::update_rect( $display, 0, 0, 640, 480 );
- #SDL::delay(1000);
- my @left = qw/
- MMX_detect
- MMX_off
- MMX_on
- add
- mean
- sub
- abs_diff
- mult
- mult_nor
- mult_div_by_2
- mult_div_by_4
- bit_and
- bit_or
- div
- bit_negation
- add_byte
- add_uint
- add_byte_to_half
- sub_byte
- sub_uint
- shift_right
- shift_right_uint
- mult_by_byte
- shift_right_and_mult_by_byte
- shift_left_byte
- shift_left_uint
- shift_left
- binarize_using_threshold
- clip_to_range
- normalize_linear
- convolve_kernel_3x3_divide
- convolve_kernel_5x5_divide
- convolve_kernel_7x7_divide
- convolve_kernel_9x9_divide
- convolve_kernel_3x3_shift_right
- convolve_kernel_5x5_shift_right
- convolve_kernel_7x7_shift_right
- convolve_kernel_9x9_shift_right
- sobel_x
- sobel_x_shift_right
- align_stack
- restore_stack
- /;
- my $why =
- '[Percentage Completion] '
- . int( 100 * ( $#done + 1 ) / ( $#done + $#left + 2 ) )
- . '% implementation. '
- . ( $#done + 1 ) . '/'
- . ( $#done + $#left + 2 );
- TODO:
- {
- local $TODO = $why;
- pass "\nThe following functions:\n" . join ",", @left;
- }
- if ( $done[0] eq 'none' ) { print '0% done 0/' . $#left . "\n" }
- else { print "$why\n" }
- if ($videodriver) {
- $ENV{SDL_VIDEODRIVER} = $videodriver;
- } else {
- delete $ENV{SDL_VIDEODRIVER};
- }
- pass 'Are we still alive? Checking for segfaults';
- done_testing;