NAME
SDL::Surface - Graphic surface structure.
CATEGORY
Core, Video, Structure
SYNOPSIS
The main surface (display) is provided by SDL::Video::set_video_mode. use SDL; #provides flags & constants use SDL::Video; #provides access to set_video_mode use SDL::Surface; #provides access to SDL_Surface struct internals
SDL::init(SDL_INIT_VIDEO);
my $display = SDL::Video::set_video_mode();
All surfaces constructed from now on are attached to the $display. There are two constructors available to do this.
my $surface = SDL::Surface->new ( ... );
my $surface2 = SDL::Surface->new_from ( surface, ... );
DESCRIPTION
An SDL_Surface
defines a surfaceangular area of pixels.
CONSTANTS
The constants are exported by default. You can avoid this by doing:
use SDL::Video ();
and access them directly:
SDL::Video::SDL_SWSURFACE;
Available constants: see "flags"
METHODS
new ( flags, width, height, depth, Rmask, Gmask, Bmask, Amask )
The constructor creates a new surface with the specified parameter values.
my $surface = SDL::Surface->new( ... );
new_from ( surface, width, height, depth, Rmask, Gmask, Bmask, Amask )
The constructor creates a new surface with the specified parameter values.
my $surface = SDL::Surface->new_from( $old_surface, ... );
Construtor Parameters
flags
Available flags for new() are exported by SDL::Video
- SDL_ASYNCBLIT
-
Use asynchronous blit if possible
- SDL_SWSURFACE
-
Stored in the system memory.
- SDL_HWSURFACE
-
Stored in video memory
w
SDL::Surface width are defined at construction. Thus the following is read only.
my $w = $surface->w;
h
SDL::Surface height are defined at construction. Thus the following is read only.
my $h = $surface->h;
format
The format of the pixels stored in the surface. See SDL::PixelFormat
my $format = $surface->format;
pitch
my $pitch = $surface->pitch;
SDL::Surface's scanline length in bytes
clip_rect
To get the surface's clip_rect we the following
my $clip_rect = SDL::Rect->new(0,0,0,0);
SDL::Video::get_clip_rect($surface, $clip_rect);
To set the surface's clip_rect use the following
my $clip_rect = SDL::Rect->new(2,23,23,542);
SDL::Video::set_clip_rect($surface, $clip_rect);
Direct Write to Surface Pixel
Disclaimer: This can be very slow, it is suitable for creating surfaces one time and not for animations
get_pixel
my $pixel = $surface->get_pixel( $offset )
Returns the pixel value for the given $offset
. The pixel value depends on current pixel format.
Note: For surfaces with a palette (1 byte per pixel) the palette index is returned instead of color values.
set_pixels
$surface->set_pixels( $offset, $value );
Sets the current pixel $value
to the given $offset
. The pixel value must fit the pixel format of the surface.
Note: For surfaces with a palette (1 byte per pixel) the palette index must be passed instead of color values.
Usage
sub putpixel
{
my($x, $y, $color) = @_;
$screen->set_pixels( $x + $y * $screen->w, $color);
}
See also examples/sols/ch02.pl
get_pixels_ptr
$surface->get_pixels_ptr();
Returns the C ptr to this surfaces's pixels