SDLx::Surface - Graphic surface matrix extension
use SDL; use SDL::Video; use SDLx::Surface; # Create the main surface (display) SDL::init(SDL_INIT_VIDEO); my $display = SDL::Video::set_video_mode(640, 480, 16, SDL_SWSURFACE); my $surf_matrix = SDLx::Surface->new( surface => $display); $surf_matrix-> = 0xFFFF; #for 16bpp write white at x = 10 and y=10 $surf_matrix->surface( $new_surface ); my $orig_surface = $surf_matrix->surface();
SDLx::Surface allows matrix read and write to a surface, safely.
Takes a SDL::Surface in hash format.
If a surface is passed to 'surface =>' that is loaded. Otherwise you can define at least a width and a height.
SDLx::Surface->new( surface => $surface) # The $surface is loaded SDLx::Surface->new( width=> 400, height=>200) # A SDL::Surface->new( SDL_ANYFORMAT, 400, 200, 32) is loaded SDLx::Surface->new( width=> 400, height=>200, flags=> SDL_SWSURFACE, depth=>24 ) # A SDL::Surface->new( SDL_SWSURFACE, 400, 200, 24) is loaded SDLx::Surface->new( width=> 400, height=>200, flags=> SDL_SWSURFACE, depth=>32, greenmask=>0xFF000000 ) # A SDL::Surface->new( SDL_ANYFORMAT, 400, 200, 32, 0, 0xFF000000,0, 0, 0 ) is loaded SDLx::Surface->new( w => 1, h => 1, color => 0xFF0000FF ) # A SDL::Surface->new( SDL_ANYFORMAT, 1, 1, 32, 0, 0, 0, 0 ) is loaded all pixels are colored with color (red)
my $appx = SDLx::Surface::display();
gets the display if it is already made. Passed options are ignored. Otherwise you can quickly make the display with :
SDLx::Surface::display( width => 20, height => 20) #depth => 32 and SDL_ANYFORMAT used
or you can also pass flags and depth.
SDLx::Surface::display( width => 20, height => 20, flags=> SDL_HWSURFACE, depth=>24)
You can also use the keys
h in place of
height, as with
Get or create the main display surface and attach to a SDLx::Surface.
Does a attributes only, no pixel, copy of another SDLx::Surface.
If a SDL::Surface is passed it is attached to the matrix. Returns the SDL::Surface that is currently attached to this SDLx::Surface
Returns the inner SDL::Surface's respective attribute. See
Sets the passed
SDL::Rect as the new clip_rect for the surface. Returns the SDL::Surface's clip_rect. See
my $surface = SDLx::Surface->load( 'hero.png' ); my $surface = SDLx::Surface->load( 'hero.dat', 'bmp' );
Loads the given image file into a new SDLx::Surface surface. A new surface is always created, even if you call it from an already crafted object. Croaks on errors such as no support built for that image extension or a file reading error (the error message is SDL::get_error and should give more details).
Note that load() will automatically figure out the extension based on the filename you provide. If you wish to force an extension for whatever reason (like having a filename with a different extension or none at all), you can optionally pass the file type as a second parameter. Case is not relevant.
If you don't have SDL_image in your build, only bitmap images will be supported.
Returns the new Surface.
$sdlx_surface->blit( $dest, $src_rect, $dest_rect );
Blits SDLx::Surface onto $dest surface. $src_rect or $dest_rect are optional. If $src_rect is ommited, it will be the size of the entire surface. If $dest_rect is ommited, it will be blitted at
(0, 0). $src_rect or $dest_rect can be array refs or SDL::Rect. $dest can be SDLx::Surface or SDL::Surface.
$sdlx_surface->blit_by( $src, $src_rect, $dest_rect );
Does the same as
blit but the
SDLx::Surface is the one being blitted to. This is useful when the surface you have isn't an
SDLx::Surface, but the surface it is being blitted to is.
Applies SDL::Video::flip to the Surface, with error checking.
$sdlx_surface->update(); # whole surface is updated $sdlx_surface->update([0,0,1,1]); # only that area (0,0,1,1) is updated $sdlx_surface->update( [ SDL::Rect->new(0,0,1,2) ... ]); # defined rects are updated
$sdlx_surface->draw_rect( [$x,$y,$w,$h], 0xFFFF00FF ); $sdlx_surface->draw_rect( SDL::Rect->new($x,$y,$w,$h), 0xFFFF00FF );
Draws a rect on the surface with the given color. If the rect is ommited, the colored rect will be drawn to the entire surface.
$sdlx_surface->draw_line( [$x1, $y1], [$x2, $y2], $color, $antialias); # $color is a number $sdlx_surface->draw_line( [$x1, $y1], [$x2, $y2], \@color, $antialias); #
Draws a line on the surface. Antialias is turned on if $antialias is true.