Abstract
LISPBUILDER-SDL comprises several of packages that allow game development using Common Lisp. LISPBUILDER-SDL provides a set of bindings and Lispy abstractions for SDL and other graphics, sound, physics, character animation and 3D libraries. LISPBUILDER-SDL core functionality includes window and event management, 2D graphics, 3D graphics using OpenGL and sound support. The goal for the LISPBUILDER-SDL project is to become a useful resource for the development of games in Lisp.
SDL provides the low-level 2D rendering support. LISPBUILDER-SDL adds 2D graphical effects such as rotation, rendering circles, polygons, squares, Bezier and Cuttmull-Rom curves as well as bitmap font support. Additional packages provide native C drawing functions, True Type font rendering, loading of multiple image formats, a sound mixer and networking support. The lispbuilder packages are meant to work together with each package providing a specific core set of functionality. For example, an image that is loaded by lispbuilder-sdl-image may be rotated using lispbuilder-sdl-gfx. Text may be rendered to a surface using lispbuilder-sdl-ttf and finally blitted to the display using lispbuilder-sdl.
The code comes with a MIT-style license so you can basically do with it whatever you want.
Download shortcut: http://lispbuilder.googlecode.com/files/lispbuilder-sdl.tgz.
(sdl:with-init () (sdl:window 320 240) (sdl:draw-surface (load-image "lisp.bmp")) (sdl:update-display) (sdl:with-events () (:quit-event () t) (:video-expose-event (sdl:update-display))))
*black*
*blue*
*cyan*
*default-color*
*default-display*
*default-font*
*default-font-path*
*default-position*
*default-rectangle*
*default-surface*
*external-init-on-startup*
*external-quit-on-exit*
*font-10x20*
*font-5x7*
*font-5x8*
*font-6x10*
*font-6x12*
*font-6x13*
*font-6x13b*
*font-6x13o*
*font-6x9*
*font-7x13*
*font-7x13b*
*font-7x13o*
*font-7x14*
*font-7x14b*
*font-8x13*
*font-8x13b*
*font-8x13o*
*font-8x8*
*font-9x15*
*font-9x15b*
*font-9x18*
*font-9x18b*
*green*
*magenta*
*opengl-context*
*red*
*sdl-initialized*
*white*
*yellow*
a
all-integers?
alpha
alpha-enabled-p
any-color-but-this
average-fps
b
bit-depth
bitmap-font
blit-surface
cached-surface
cast
cast-all-to-int
cast-to-int
catmull-rom-spline
char-height
char-width
check-types
clear-cell
clear-clip-rect
clear-color-key
clear-display
clip-rect
color
color
color-*
color-a
color-key
color-key-enabled-p
color=
convert-surface
convert-to-display-format
copy-channel-to-alpha
copy-point
copy-surface
create-list-if-not
create-path
create-rwops-from-file
create-surface
disable-key-repeat
display-surface
distance
distance-*
draw-bezier
draw-box
draw-box-*
draw-circle
draw-circle-*
draw-curve
draw-ellipse
draw-ellipse-*
draw-filled-circle
draw-filled-circle-*
draw-filled-ellipse
draw-filled-ellipse-*
draw-filled-pie
draw-filled-pie-*
draw-filled-polygon
draw-filled-trigon
draw-font
draw-font-at
draw-font-at-*
draw-hline
draw-line
draw-line-*
draw-pie
draw-pie-*
draw-pixel
draw-pixel-*
draw-polygon
draw-rectangle
draw-rectangle-*
draw-shape
draw-string-blended
draw-string-blended-*
draw-string-shaded
draw-string-shaded-*
draw-string-solid
draw-string-solid-*
draw-surface
draw-surface-at
draw-surface-at-*
draw-trigon
draw-vline
enable-alpha
enable-color-key
enable-key-repeat
enable-key-repeat-p
enable-rle-accel
enable-unicode
enable-unicode-p
fill-surface
fill-surface-*
flood-fill
flood-fill-*
flood-fill-stack
flood-fill-stack-*
fp
frame-rate
free
free-cached-surface
g
get-clip-rect
get-key-state
get-native-window
get-point
get-position
get-rectangle
get-surface-rect
height
image-p
image-type-of
init-sdl
init-sub-systems
initialise-default-font
initialise-font
initialize-on-startup
initialized-sub-systems-p
is-valid-ptr
key-repeat-delay
key-repeat-interval
key=
list-modes
list-sub-systems
load-image
map-color
map-color-*
num-joysticks
pack-color
pixel-alpha-enabled-p
point
point-*
position-*
push-quit-event
push-user-event
query-cursor
quit-on-exit
quit-sdl
quit-sub-systems
r
random+1
random-rectangle
read-pixel
read-pixel-*
rectangle
rectangle
rectangle-*
rectangle-from-edges
rectangle-from-edges-*
rectangle-from-midpoint-*
render-string-blended
render-string-shaded
render-string-solid
return-sub-systems-of-status
rle-accel-enabled-p
rotate-surface
rotate-surface-xy
rwops
save-image
sdl-any-format
sdl-async-blit
sdl-bitmap-font
sdl-doublebuf
sdl-fullscreen
sdl-get-ticks
sdl-hw-accel
sdl-hw-palette
sdl-hw-surface
sdl-init-audio
sdl-init-cdrom
sdl-init-eventthread
sdl-init-everything
sdl-init-joystick
sdl-init-noparachute
sdl-init-on-startup
sdl-init-timer
sdl-init-video
sdl-iyuv-overlay
sdl-joystick-name
sdl-no-frame
sdl-opengl
sdl-pre-alloc
sdl-quit-on-exit
sdl-resizable
sdl-rle-accel
sdl-rle-accel-ok
sdl-src-alpha
sdl-src-color-key
sdl-surface
sdl-sw-surface
sdl-uyvy-overlay
sdl-wm-grab-input
sdl-yuy2-overlay
sdl-yv12-overlay
sdl-yvyu-overlay
set-cell
set-cell-*
set-clip-rect
set-color
set-color-*
set-default-font
set-gl-attribute
set-point
set-point-*
set-position
set-position-*
set-rectangle
set-rectangle-*
set-surface
set-surface-*
show-cursor
surface
surface-info
time-scale
to-degree
to-radian
update-display
update-surface
update-surface-*
video-dimensions
video-driver-name
video-info
video-memory
width
window
with-bezier
with-color
with-curve
with-default-font
with-events
with-font
with-foreign-color-copy
with-init
with-locked-surface
with-locked-surfaces
with-point
with-rectangle
with-rectangles
with-shape
with-surface
with-surface-slots
with-surfaces
within-range
within-range-*
x
x2
y
y2
zoom-surface
Current Version: The latest stable version of LISPBUILDER-SDL, together with this documentation can be downloaded from http://lispbuilder.googlecode.com/files/lispbuilder-sdl.tgz.
LISPBUILDER-SDL is distributed under the MIT-style license.
[Special variable]
*black*
RGB
COLOR black.
[Special variable]
*blue*
RGB
COLOR blue.
[Special variable]
*cyan*
RGB
COLOR cyan.
[Special variable]
*default-color*
Functions that accept the
KEY
word parameterCOLOR
will most likely bind to the symbol*DEFAULT-COLOR*
by default ifCOLOR
is not specified.A color is bound to
*DEFAULT-COLOR*
by the following macro: WITH-COLOR.Example
(DRAW-BOX A-BOX :SURFACE SDL:DEFAULT-DISPLAY* :COLOR SDL:*BLACK*) (DRAW-BOX B-BOX :SURFACE SDL:DEFAULT-DISPLAY* :COLOR SDL:*BLACK*) (DRAW-BOX C-BOX :SURFACE SDL:DEFAULT-DISPLAY* :COLOR SDL:*BLACK*)
The above can be shortened by setting
*DEFAULT-COLOR*
to*BLACK*
.(WITH-SURFACE (DISP SDL:*DEFAULT-DISPLAY*) (WITH-COLOR (COL SDL:*BLACK*) (DRAW-BOX A-BOX) (DRAW-BOX B-BOX) (DRAW-BOX C-BOX)))
[Special variable]
*default-display*
The symbol
*DEFAULT-DISPLAY*
is bound to the current display surface DISPLAY-SURFACE) by the function WINDOW).
[Special variable]
*default-font*
Functions that accept the
KEY
word parameterFONT
will most likely bind to the symbol*DEFAULT-FONT*
by default ifFONT
is not specified.A font is bound to
*DEFAULT-FONT*
by the following; WITH-DEFAULT-FONT, WITH-FONT and INITIALISE-DEFAULT-FONT.Example
(draw-string-solid-* "draw string centered" 100 100 :justify :center :color sdl:*white* :font a-font) (draw-string-solid-* "draw string left" 100 100 :justify :left :color sdl:*white* :font a-font) (draw-string-solid-* "draw string right" 100 100 :justify :right :color sdl:*white* :font a-font)
The above can be shortened by setting
*DEFAULT-FONT*
toa-font
.(WITH-DEFAULT-FONT (a-font) (WITH-COLOR (COL SDL:*WHITE*) (DRAW-STRING-SOLID-* "draw string centered" 100 100 :JUSTIFY :CENTER) (DRAW-STRING-SOLID-* "draw string left" 100 100 :JUSTIFY :LEFT) (DRAW-STRING-SOLID-* "draw string right" 100 100 :JUSTIFY :RIGHT)))
[Special variable]
*default-font-path*
The path to any fonts used in teh
LISPBUILDER-SDL
packages.
[Special variable]
*default-position*
[Special variable]
*default-rectangle*
[Special variable]
*default-surface*
Functions that accept the
KEY
word parameter:SURFACE
will most likely bind to the symbol*DEFAULT-SURFACE*
by default ifSURFACE
is not specified.A surface is bound to
*DEFAULT-SURFACE*
by the following macros: WITH-SURFACE, and WITH-SURFACES.Example
(DRAW-SURFACE SURF-1 :SURFACE SDL:*DEFAULT-DISPLAY*) (DRAW-SURFACE SURF-2 :SURFACE SDL:*DEFAULT-DISPLAY*) (DRAW-SURFACE SURF-2 :SURFACE SDL:*DEFAULT-DISPLAY*)
The above can be shortened using by setting the
*DEFAULT-SURFACE*
to the display surface.(WITH-SURFACE (DISP SDL:*DEFAULT-DISPLAY*) (DRAW-SURFACE SURF-1) (DRAW-SURFACE SURF-2) (DRAW-SURFACE SURF-2))
[Special variable]
*external-init-on-startup*
The list of functions that are called from INIT-SDL.
[Special variable]
*external-quit-on-exit*
The list of functions that are called from QUIT-SDL.
[Special variable]
*font-10x20*
Contains the font data for an 10x20 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-5x7*
Contains the font data for an 5x7 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-5x8*
Contains the font data for an 5x8 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-6x10*
Contains the font data for an 6x10 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-6x12*
Contains the font data for an 6x12 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-6x13*
Contains the font data for an 6x13 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-6x13b*
Contains the font data for an 6x13 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-6x13o*
Contains the font data for an 6x13 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-6x9*
Contains the font data for an 6x9 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-7x13*
Contains the font data for an 7x13 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-7x13b*
Contains the font data for an 7x13 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-7x13o*
Contains the font data for an 7x13 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-7x14*
Contains the font data for an 7x14 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-7x14b*
Contains the font data for an 7x14 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-8x13*
Contains the font data for an 8x13 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-8x13b*
Contains the font data for an 8x13 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-8x13o*
Contains the font data for an 8x13 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-8x8*
Contains the font data for an 8x8 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-9x15*
Contains the font data for an 9x15 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-9x15b*
Contains the font data for an 9x15 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-9x18*
Contains the font data for an 9x18 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*font-9x18b*
Contains the font data for an 9x18 bitmap font.
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Special variable]
*green*
RGB
COLOR green.
[Special variable]
*magenta*
RGB
COLOR magenta.
[Special variable]
*opengl-context*
The symbol
*OPENGL-CONTEXT*
isT
when an OpenGL display context is created, andNIL
otherwise. UPDATE-SURFACE will swap theOPENGL
buffers when*OPENGL-CONTEXT*
isT
, and swap theSDL
video buffers otherwise.
[Special variable]
*red*
RGB
COLOR red.
[Special variable]
*sdl-initialized*
[Special variable]
*white*
RGB
COLOR white.
[Special variable]
*yellow*
RGB
COLOR yellow.
[Generic accessor]
a color => result
(setf (a color) value)
[Method]
a (color color-a) => result
[Method]
a (color color) => result
[Macro]
all-integers? &rest values => result
Returns
T
if all values areINTEGERS
.
[Generic accessor]
alpha surface => result
(setf (alpha surface) value)
[Method]
alpha (surface sdl-surface) => result
[Generic accessor]
alpha-enabled-p surface => result
(setf (alpha-enabled-p surface) value)
[Method]
alpha-enabled-p (surface sdl-surface) => result
[Generic function]
any-color-but-this color => result
Returns a new color that is different to
COLOR
.
[Function]
average-fps &optional fpsmanager => result
Returns the average frame rate of the event loop calculated over a sliding window of 100 frames.
[Generic accessor]
b color => result
(setf (b color) value)
[Method]
b (color color) => result
[Function]
bit-depth &optional surface => result
Returns the number of bytes per pixel, or bpp, of
SURFACE
.
[Standard class]
bitmap-font
[Function]
blit-surface source &optional surface => result
Performs a fast blit of the
SOURCE
surface to the destinationSURFACE
. The area defined by theSOURCE
cell is blitted to the area defined by the destination clipping rectangle. The blit function should not be called on a locked surface. The results of blitting operations vary greatly depending on whether a surface ALPHA channel is set on the source surface or not. The priorty of how color key and alpha attributes interact with surface blitting is as follows:
- source surface with
ALPHA
+PIXEL-ALPHA
: Blit using per-pixel alpha only- source surface with
ALPHA
+COLOR-KEY
: Blit using the colour key AND the per-surface alpha value- source surface with
ALPHA
: Blit using the colour key AND the per-surface alpha value- source surface with
COLOR-KEY
: Blit using the colour key- source surface: Blit using opaque rectangular blit
An ALPHA channel has the following effect on blitting operations:
- RGBA to RGB with ALPHA-ENABLED-P: The source is alpha-blended with the destination, using the alpha channel. COLOR-KEY-ENABLED-P and the per-surface alpha are ignored.
- RGBA to RGB without ALPHA-ENABLED-P: The RGB data is copied from the source. The source alpha channel and the per-surface alpha value are ignored. If COLOR-KEY-ENABLED-P is set, only the pixels not matching the colorkey value are copied.
- RGB to RGBA with ALPHA-ENABLED-P: The source is alpha-blended with the destination using the per-surface alpha value. If COLOR-KEY-ENABLED-P is set, only the pixels not matching the colorkey value are copied. The alpha channel of the copied pixels is set to opaque.
- RGB to RGBA without ALPHA-ENABLED-P: The RGB data is copied from the source and the alpha value of the copied pixels is set to opaque. If COLOR-KEY-ENABLED-P is set, only the pixels not matching the colorkey value are copied.
- RGBA to RGBA with ALPHA-ENABLED-P: The source is alpha-blended with the destination using the source alpha channel. The alpha channel in the destination surface is left untouched. COLOR-KEY-ENABLED-P is ignored.
- RGBA to RGBA without ALPHA-ENABLED-P: The RGBA data is copied to the destination surface. If COLOR-KEY-ENABLED-P is set, only the pixels not matching the colorkey value are copied.
- RGB to RGB with ALPHA-ENABLED-P: The source is alpha-blended with the destination using the per-surface alpha value. If COLOR-KEY-ENABLED-P is set, only the pixels not matching the colorkey value are copied.
- RGB to RGB without ALPHA-ENABLED-P: The RGB data is copied from the source. If COLOR-KEY-ENABLED-P is set, only the pixels not matching the colorkey value are copied.
Note: RGBA to RGBA blits (with ALPHA-ENABLED-P set) keep the alpha of the destination surface. This means that you cannot compose two arbitrary RGBA surfaces this way and get the result you would expect from "overlaying" them; the destination alpha will work as a mask.
[Generic accessor]
cached-surface font => result
(setf (cached-surface font) value)
[Specialized accessor]
cached-surface (font font) => result
(setf (cached-surface (font font)) value)
[Macro]
cast type value => result
Coerces the value
VALUE
to the typeTYPE
.
[Macro]
cast-all-to-int &rest values => result
Casts the values in
REST
toFIXNUM
s.
[Macro]
cast-to-int value => result
Casts the value
VALUE
to aFIXNUM
.
[Function]
catmull-rom-spline val v0 v1 v2 v3 => result
[Generic accessor]
char-height sdl-bitmap-font => result
(setf (char-height font-definition) value)
[Method]
char-height (sdl-bitmap-font sdl-bitmap-font) => result
[Specialized accessor]
char-height (sdl-bitmap-font font-definition) => result
(setf (char-height (font-definition font-definition)) value)
[Generic accessor]
char-width sdl-bitmap-font => result
(setf (char-width font-definition) value)
[Method]
char-width (sdl-bitmap-font sdl-bitmap-font) => result
[Specialized accessor]
char-width (sdl-bitmap-font font-definition) => result
(setf (char-width (font-definition font-definition)) value)
[Macro]
check-types type &rest rest => result
Performs
CHECK-TYPE
on items in rest.
[Function]
clear-cell &key surface index => result
Sets the
CELL
atINDEX
to the bounds ofSURFACE
.
[Function]
clear-clip-rect &optional surface => result
Removes the clipping RECTANGLE.
[Function]
clear-color-key &key surface => result
Disables the color key.
[Function]
clear-display color &key surface update => result
Fills the display
SURFACE
using colorCOLOR
.SURFACE
is bound to*DEFAULT-DISPLAY*
if unspecified. The display is updated whenUPDATE
isT
.
[Generic accessor]
clip-rect surface => result
(setf (clip-rect surface) value)
[Method]
clip-rect (surface sdl-surface) => result
[Standard class]
color
A color containing
INTEGER
Red, Green and Blue components. Free using FREE.
[Function]
color &key r g b a => result
Returns a new
RGB
COLOR from the specifiedR
ed,G
reen, andB
lue components. Returns a newRGBA
COLOR-A from the specifiedR
ed,G
reen,B
lue, andA
lpha components.
[Generic function]
color-* color => result
Returns the
RGB/A
color components as a spread. COLOR-A returns(VALUES R G B A)
. COLOR returns(VALUES R G B)
[Standard class]
color-a
An color containing
INTEGER
Red, Green, Blue and Alpha components. Free using FREE.
[Generic accessor]
color-key surface => result
(setf (color-key surface) value)
[Specialized accessor]
color-key (surface sdl-surface) => result
(setf (color-key (surface sdl-surface)) value)
[Generic accessor]
color-key-enabled-p surface => result
(setf (color-key-enabled-p surface) value)
[Method]
color-key-enabled-p (surface sdl-surface) => result
[Generic function]
color= color1 color2 => result
Returns
T
if theRGB
<->RGB
orRGBA
<->RGBA
color components inCOLOR1
andCOLOR2
match. ReturnsNIL
otherwise.
[Function]
convert-surface &key surface to-surface enable-alpha enable-color-key free inherit type => result
Converts
:SURFACE
and returns a new surface matching the pixel format and color of:TO-SURFACE
. Calls CONVERT-TO-DISPLAY-FORMAT if converting to the display format.Use
:ENABLE-COLOR-KEY
or:ENABLE-ALPHA
to take advantage of hardware colorkey or alpha blit acceleration. Enabling these flags once a surface is created will not necessarily utilize available harware acceleration if the surface was not initally created in video memory.Will create the new surface in system menory when
TYPE
is:SW
. Will attempt to create the new surface in video menory whenTYPE
is:HW
, otherwise the surface is created in system memory if the combination of color key and alpha do not allow hardware acceleration.The new surface will inherit the pixel, alpha and color key components of the source, unless
:INHERIT
isNIL
.Use
:FREE
to delete the sourceSURFACE
.
Returns a new surface matching the pixel format and color of the video frame buffer (
*display surface*), that is suitable for fast blitting. The new surface will inherit the pixel, alpha and color key components of the source, *unless*
:INHERITis
NIL`.Use
:ENABLE-COLOR-KEY
or:ENABLE-ALPHA
to take advantage of hardware colorkey or alpha blit acceleration. Enabling these flags once a surface is created will not necessarily utilize available harware acceleration if the surface was not initally created in video memory.Use
:PIXEL-ALPHA
to enable the pixel alpha component (alpha mask of 0xFF) for the new surface.Use
:FREE
to delete the sourceSURFACE
.Differences between CONVERT-TO-DISPLAY-FORMAT, CONVERT-SURFACE, COPY-SURFACE, and CREATE-SURFACE;
CONVERT-TO-DISPLAY-FORMAT will always attempt to create a surface in video memory using hardware acceleration if key color and surface alpha are supported. A pixel alpha component can be specified. ** New surface is filled with old surface.
CONVERT-SURFACE ** calls CONVERT-TO-DISPLAY-FORMAT if converting a surface to the display format. paramatized option to create new surface in video or system memory. Pixel format and color match that of the source surface. ** New surface is filled with old surface.
- COPY-SURFACE paramatized option to create new surface in video or system memory. copies a portion or all of the source surface to a new destination surface A pixel alpha component can be specified. New surface can be filled with the old surface, or the color key or both.
[Function]
copy-channel-to-alpha destination source &key channel => result
[Function]
copy-point point => result
Returns a copy of the point
POINT
.
Returns a copy of
:SURFACE
.Use
:COLOR-KEY
or:ALPHA
to set the key color and surface alpha transparency. Hardware colorkey and alpha blit acceleration will be used if supported.Will create the new surface in system menory when
TYPE
is:SW
. Will attempt to create the new surface in video menory whenTYPE
is:HW
, otherwise the surface is created in system memory if the combination of color key and alpha do not allow hardware acceleration.The new surface will be filled with the old surface unless
:FILL
isNIL
. The new surface will be filled with the color key of the old surface (if available) unless:COLOR-KEY-FILL
isNIL
.The new surface will inherit the pixel, alpha and color key components of the source, unless
:INHERIT
isNIL
.Use
:FREE
to delete the sourceSURFACE
.
[Function]
create-list-if-not var => result
If
VAR
is not already a list, then returns(LIST VAR)
.
[Function]
create-path filename &optional path => result
Creates a new path from
FILENAME
andPATH
.
[Function]
create-rwops-from-file filename => result
Creates and returns a new
RWOPS
object from the file at locationFILENAME
.
Creates and returns a new
SURFACE
with the dimensionsWIDTH
andHEIGHT
.
:COLOR-KEY
sets the color key of the surface and enables color-keying.
:ALPHA
sets the surface alpha transparency and enables alpha blending. This allows a pixel color ofRGB
with the surfaceA
.
:PIXEL-ALPHA
enables a pixel alpha component (alpha mask of 0xFF) on the new surface. This allows a pixel color ofRGBA
.
:RLE-ACCEL
enables RLE blit acceleration.
:BPP
is the pixel depth of the surface, and my be 8, 16, 24 or 32.
:TYPE
attempts to create theSURFACE
in video memory when:HW
, and in system memory when:SW
:X
and:Y
are the positions of theSURFACE
in screen coordinates.
[Function]
disable-key-repeat => result
Disables keyboard repeat.
[Standard class]
display-surface
The current display surface. Can be accessed using
SDL:*DEFAULT-DISPLAY*
.
[Function]
distance p1 p2 => result
Returns the distance between the
POINT
sP1
andP2
.
[Function]
distance-* x1 y1 x2 y2 => result
Returns the distance between the coordinates
X1
,Y1
andX2
,Y2
.
[Function]
draw-bezier vertices &key clipping surface color segments style => result
Draw a bezier curve of COLOR to SURFACE. The shape of the Bezier curve is defined by several control points. A control point is a vertex containing an X and Y coordinate pair.
Parameters
:VERTICES
is a list of control points of POINT.:STYLE
describes the line style used to draw the curve and may be one of:SOLID
,:DASH
, or:POINTS
. Use:SOLID
to draw a single continuous line through the specified waypoints. Use:DASH
to draw a line between alternate waypoint pairs. Use:POINTS
to draw a single pixel at each waypoint.:SEGMENTS
is the number of line segments used to draw the curve. The default is 20 segments if unspecified. The greater the number of segments, the smoother the curve.:SURFACE
is the target SURFACE.:COLOR
is the line color, of COLOR or COLOR-A.:CLIPPING
when left as the default valueT
will ensure that the shape is clipped to the dimensions ofSURFACE
. SDL will core dump if pixels are drawn outside a surface. It is slower, but safer to leaveCLIPPING
asT
.Example
(DRAW-BEZIER (LIST (SDL:POINT :X 60 :Y 40) (SDL:POINT :X 160 :Y 10) (SDL:POINT :X 170 :Y 150) (SDL:POINT :X 60 :Y 150)) :style :SOLID)
Packages
- Also supported in LISPBUILDER-SDL-GFX
:STYLE
is ignored inLISPBUILDER-SDL-GFX
.
[Function]
draw-box rect &key clipping surface color stroke-color alpha => result
See DRAW-BOX-*.
Parameters
RECT
is RECTANGLE.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-box-* x y w h &key clipping surface color stroke-color alpha => result
Draws a filled rectangle of COLOR to SURFACE.
Parameters
X
andY
are theINTEGER
coordinates of the top-left corner of the rectangle.W
andH
are the width and height of the rectangle, of typeINTEGER
.:SURFACE
is the target SURFACE.:COLOR
is the line color, of COLOR or COLOR-A.:STROKE-COLOR
when notNIL
will draw a1
pixel line of colorCOLOR
around the perimiter of the box.:ALPHA
when between0
and255
is used as the alpha transparency value when blitting the rectangle ontoSURFACE
. Note: An intermediate surface is created, the rectangle is drawn onto this intermediate surface and then this surface is blitted toSURFACE
.:CLIPPING
isNIL
The default isNIL
as the SDL library will perform the necessary clipping automatically.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-circle p1 r &key surface color alpha aa => result
See DRAW-CIRCLE-*.
Parameters
P1
is the POINT coordinates at the center of the circle.Packages
- Also supported in LISPBUILDER-SDL-GFX
:AA
ignored in LISPBUILDER-SDL
[Function]
draw-circle-* x0 y0 r &key surface color alpha aa => result
Draws a circle circumference of COLOR to SURFACE. Use DRAW-FILLED-CIRCLE-* to draw a filled circle.
Parameters
X
andY
specify the center coordinate of the circle, of typeINTEGER
.R
is the circle r, of typeINTEGER
.:AA
determines if the line is to be drawn using antialiasing.:SURFACE
is the target SURFACE.:COLOR
is the line color, of COLOR or COLOR-A.:ALPHA
when between0
and255
is used as the alpha transparency value when blitting the rectangle ontoSURFACE
. Note: An intermediate surface is created, the rectangle is drawn onto this intermediate surface and then this surface is blitted toSURFACE
.Packages
- Also supported in LISPBUILDER-SDL-GFX
:AA
ignored in LISPBUILDER-SDL
[Function]
draw-curve vertices &key clipping surface color segments style => result
Draw a Cattmul-Rom spline of COLOR to SURFACE. The shape of the curve is defined by waypoints. A waypoint is a vertex containing an X and Y coordinate pair.
Parameters
VERTICES
is a list of waypoints or vetices for the spline, of POINTSTYLE
describes the line style used to draw the curve and may be one of:SOLID
,:DASH
, or:POINTS
. Use:SOLID
to draw a single continuous line through the specified waypoints. Use:DASH
to draw a line between alternate waypoint pairs. Use:POINTS
to draw a single pixel at each waypoint.SEGMENTS
is the number of segments used to draw the Catmull-Rom spline. Default is 20 segments if unspecified. The greater the number of segments, the smoother the spline.:SURFACE
is the target SURFACE.:COLOR
is the line color, of COLOR or COLOR-A.:CLIPPING
when left as the default valueT
will ensure that the shape is clipped to the dimensions ofSURFACE
. SDL will core dump if pixels are drawn outside a surface. It is slower, but safer to leaveCLIPPING
asT
.Example
(DRAW-CURVE (LIST (SDL:POINT :X 60 :Y 40) (SDL:POINT :X 160 :Y 10) (SDL:POINT :X 170 :Y 150) (SDL:POINT :X 60 :Y 150)))
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-ellipse p1 rx ry &key surface color aa => result
See DRAW-ELLIPSE-*.
Parameters
P1
is the POINT coordinates at the center of the ellipse.Packages
- Supported in LISPBUILDER-SDL-GFX
[Function]
draw-ellipse-* x y rx ry &key surface color aa => result
Draws an ellipse circumference of COLOR to the SURFACE. Use DRAW-FILLED-ELLIPSE-* to draw a filled ellipse.
Parameters
X
andY
specify the center coordinate of the ellipse, of typeINTEGER
.RX
andRY
specify the ellipse radius, of typeINTEGER
.:SURFACE
is the target SURFACE.:COLOR
is the pixel color, of COLOR or COLOR-A.Packages
- Supported in LISPBUILDER-SDL-GFX
[Function]
draw-filled-circle p1 r &key surface color stroke-color alpha => result
See DRAW-FILLED-CIRCLE-*.
Parameters
P1
is the POINT coordinates coordinate of the center of the filled circle.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-filled-circle-* x0 y0 r &key surface color stroke-color alpha => result
Draws a filled circle of COLOR to SURFACE.
Parameters
X0
andY0
specify the center coordinate of the circle, of typeINTEGER
.R
is the circle radius, of typeINTEGER
.:SURFACE
is the target SURFACE.:COLOR
is the line color, of COLOR or COLOR-A.:STROKE-COLOR
when notNIL
will draw a1
pixel line of colorCOLOR
around the perimiter of the box.:ALPHA
when between0
and255
is used as the alpha transparency value when blitting the rectangle ontoSURFACE
. Note: An intermediate surface is created, the rectangle is drawn onto this intermediate surface and then this surface is blitted toSURFACE
.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-filled-ellipse p1 rx ry &key surface color => result
Parameters
P1
is the POINT coordinates at the center of the filled ellipse.Packages
- Supported in LISPBUILDER-SDL-GFX
[Function]
draw-filled-ellipse-* x y rx ry &key surface color => result
Draws a filled ellipse of COLOR to the SURFACE.
Parameters
X
andY
specify the center coordinate of the ellipse, of typeINTEGER
.RX
andRY
specify the ellipse radius, of typeINTEGER
.:SURFACE
is the target SURFACE.:COLOR
is the pixel color, of COLOR or COLOR-A.Packages
- Supported in LISPBUILDER-SDL-GFX
[Function]
draw-filled-pie p1 rad start end &key surface color => result
See DRAW-FILLED-PIE-*.
Parameters
P1
is the POINT coordinates at the center of the filled pie.Packages
- Supported in LISPBUILDER-SDL-GFX
[Function]
draw-filled-pie-* x y rad start end &key surface color => result
Draws a filled pie of COLOR to the SURFACE
Parameters
X
andY
specify the center coordinate of the pie, of typeINTEGER
.RAD
is the pie radius, of typeINTEGER
.START
is the pie start, of typeINTEGER
.END
is the pie end, of typeINTEGER
.:SURFACE
is the target SURFACE.:COLOR
is the pixel color, of COLOR or COLOR-A.Packages
- Supported in LISPBUILDER-SDL-GFX
[Function]
draw-filled-polygon vertices &key surface color => result
Draw a filled polygon of COLOR to the SURFACE
Parameters
VERTICES
is the list of vertices of typeSDL:POINT
.:SURFACE
is the target SURFACE.:COLOR
is the pixel color, of COLOR or COLOR-A.Packages
- Supported in LISPBUILDER-SDL-GFX
[Function]
draw-filled-trigon p1 p2 p3 &key surface color => result
Draw a filled trigon of COLOR to the SURFACE
Parameters
P1
,P2
andP3
specify the vertices of the trigon, of typeSDL:POINT
.:SURFACE
is the target SURFACE.:COLOR
is the pixel color, of COLOR or COLOR-A.Packages
- Supported in LISPBUILDER-SDL-GFX
[Generic function]
draw-font &key font surface => result
Blit the cached SURFACE in font to the destination
SURFACE
. The cached surface is created during a previous call to any of the DRAW-STRING* functions.Packages
- Also supported in LISPBUILDER-SDL-GFX, and LISPBUILDER-SDL-TTF
[Generic function]
draw-font-at position &key font surface => result
See DRAW-FONT. The cached surface is rendered at
POSITION
POINT.Packages
- Also supported in LISPBUILDER-SDL-GFX, and LISPBUILDER-SDL-TTF
[Generic function]
draw-font-at-* x y &key font surface => result
See DRAW-FONT. The cached surface is rendered at poisition
X
andY
.Packages
- Also supported in LISPBUILDER-SDL-GFX, and LISPBUILDER-SDL-TTF
[Function]
draw-hline x0 x1 y &key surface color clipping template => result
Draw a horizontal line of COLOR from
X0
toX1
throughY
onto onto SURFACE.Parameters
X0
andX1
are the horizontal start and end points of the line, of typeINTEGER
.Y
is the verticalINTEGER
coordinate that the horizontal line must intersect.:SURFACE
is the target SURFACE.:COLOR
is the line color, of COLOR or COLOR-A.:CLIPPING
isNIL
The default isNIL
as the SDL library will perform the necessary clipping automatically.:TEMPLATE
specifies an optional RECTANGLE to fill the surface. Will not freeTEMPLATE
.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-line p1 p2 &key surface color clipping aa => result
See DRAW-LINE-*.
Parameters
P1
andP2
are the start and end x/y co-ordinates of the line, ofPOINT
.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-line-* x0 y0 x1 y1 &key surface color clipping aa => result
Draws a line of COLOR to SURFACE.
Parameters
X0
Y0
are the start X/Y coordinates of the line, ofINTEGER
.X1
Y1
are the end X/Y coordinates of the line, ofINTEGER
.:AA
determines if the line is to be drawn using antialiasing. NOTE: Supported only inLISPBUILDER-SDL-GFX
, otherwise ignored.:SURFACE
is the target SURFACE.:COLOR
is the line color, of COLOR or COLOR-A.:CLIPPING
when left as the default valueT
will ensure that the shape is clipped to the dimensions ofSURFACE
. SDL will core dump if pixels are drawn outside a surface. It is slower, but safer to leaveCLIPPING
asT
.Packages
- Also supported in LISPBUILDER-SDL-GFX
:AA
not supported in LISPBUILDER-SDL
[Function]
draw-pie p1 rad start end &key surface color => result
See DRAW-PIE-*.
Parameters
P1
is the POINT coordinates at the center of the pie.Packages
- Supported in LISPBUILDER-SDL-GFX
[Function]
draw-pie-* x y rad start end &key surface color => result
Draws a pie of COLOR to the SURFACE. Use DRAW-FILLED-PIE-* to draw a filled pie.
Parameters
X
andY
specify the center coordinate of the pie, of typeINTEGER
.RAD
is the pie radius, of typeINTEGER
.START
is the pie start, of typeINTEGER
.END
is the pie end, of typeINTEGER
.:SURFACE
is the target SURFACE.:COLOR
is the pixel color, of COLOR or COLOR-A.Packages
- Supported in LISPBUILDER-SDL-GFX
[Function]
draw-pixel point &key clipping surface color => result
See DRAW-PIXEL-*.
Parameters
POINT
is the POINT coordinates of the pixel.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-pixel-* x y &key clipping surface color => result
Draw a single pixel of COLOR to the SURFACE at the specified
X
andY
coordiates.Parameters
X
andY
specify the coordinates of the pixel, and are of typeINTEGER
.:SURFACE
is the target SURFACE.:COLOR
is the pixel color, of COLOR or COLOR-A.:CLIPPING
when left as the default valueT
will ensure that the pixel is clipped to the dimensions ofSURFACE
. SDL will core dump if pixels are drawn outside a surface. It is slower, but safer to leaveCLIPPING
asT
.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-polygon vertices &key surface color clipping aa => result
Draw the circumference of a polygon of COLOR to SURFACE using the vertices in
POINTS
. Use DRAW-FILLED-POLYGON-* to draw a filled polygon.Parameters
:POINTS
is the list of vertices for the polygon.POINTS
is a list ofPOINT
s.:AA
determines if the line is to be drawn using antialiasing.:SURFACE
is the target SURFACE.:COLOR
is the pixel color, of COLOR or COLOR-A.:CLIPPING
when left as the default valueT
will ensure that the pixel is clipped to the dimensions ofSURFACE
. SDL will core dump if pixels are drawn outside a surface. It is slower, but safer to leaveCLIPPING
asT
.Packages
- Also supported in LISPBUILDER-SDL-GFX
:AA
ignored in LISPBUILDER-SDL
[Function]
draw-rectangle rect &key clipping surface color alpha => result
See DRAW-RECTANGLE-*.
Parameters
RECT
is RECTANGLE.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-rectangle-* x y w h &key clipping surface color alpha => result
Draw a rectangle outline of COLOR to SURFACE.
Parameters
X
andY
are theINTEGER
coordinates of the top-left corner of the rectangle.W
andH
are the width and height of the rectangle, of typeINTEGER
.:SURFACE
is the target SURFACE.:COLOR
is the line color, of COLOR or COLOR-A.:ALPHA
when between0
and255
is used as the alpha transparency value when blitting the rectangle ontoSURFACE
. Note: An intermediate surface is created, the rectangle is drawn onto this intermediate surface and then this surface is blitted toSURFACE
.:CLIPPING
isNIL
The default isNIL
as the SDL library will perform the necessary clipping automatically.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-shape vertices &key clipping surface color style => result
Draw a polygon of COLOR to SURFACE using
VERTICES
.Parameters
VERTICES
is a list of vertices, ofPOINT
STYLE
describes the line style used to draw the polygon and may be one of:SOLID
,:DASH
, or:POINTS
. Use:SOLID
to draw a single continuous line through the specified waypoints. Use:DASH
to draw a line between alternate waypoint pairs. Use:POINTS
to draw a single pixel at each waypoint.:SURFACE
is the target SURFACE.:COLOR
is the line color, of COLOR or COLOR-A.:CLIPPING
when left as the default valueT
will ensure that the shape is clipped to the dimensions ofSURFACE
. SDL will core dump if pixels are drawn outside a surface. It is slower, but safer to leaveCLIPPING
asT
.Example
(DRAW-SHAPE (LIST (SDL:POINT :X 60 :Y 40) (SDL:POINT :X 160 :Y 10) (SDL:POINT :X 170 :Y 150) (SDL:POINT :X 60 :Y 150)))
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-string-blended string p1 &key justify surface font color => result
Parameters
P1
is theX
andX
coordinates to render the text, of typePOINT
.Packages
- Supported in LISPBUILDER-SDL-TTF
[Function]
draw-string-blended-* string x y &key justify surface font color => result
Draw text
STRING
at locationX
Y
using fontFONT
with colorCOLOR
onto surfaceSURFACE
. The text is keyed ontoSURFACE
.Parameters
STRING
is the text to render.X
andY
are theX
andY
position coordinates, asINTEGERS
.FONT
is the font face used to render the string. Of typeFONT
. Bound to*DEFAULT-FONT*
if unspecified.SURFACE
is the target surface, of typeSDL-SURFACE
. Bound to*DEFAULT-SURFACE*
if unspecified.COLOR
color is the text color, of typeCOLOR
.Returns
- Returns the surface
SURFACE
.Example
(DRAW-STRING-SOLID-* "Hello World!" 0 0 :SURFACE A-SURFACE :COLOR A-COLOR)
Packages
- Supported in LISPBUILDER-SDL-TTF
[Function]
draw-string-shaded string p1 fg-color bg-color &key justify surface font => result
See DRAW-STRING-SHADED-*.
Parameters
P1
is theX
andY
coordinates to render the text, of typeSDL:POINT
.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-string-shaded-* string x y fg-color bg-color &key justify surface font => result
Draw text
STRING
at locationX
Y
using fontFONT
with text colorFG-COLOR
and background colorBG-COLOR
onto surfaceSURFACE
. The surface background is filled withBG-COLOR
so the surface cannot be keyed over other surfaces.
STRING
is the text to render.X
andY
are theX
andY
coordinates, asINTEGERS
.FG-COLOR
color is the text color, of typeCOLOR
BG-COLOR
color is the background color used to fill the surfaceSURFACE
, of typeCOLOR
FONT
is the font face used to render the text. Of typeFONT
. Bound to*DEFAULT-FONT*
if unspecified.SURFACE
is the target surface, of typeSDL-SURFACE
. Bound to*DEFAULT-SURFACE*
if unspecified.Returns
- Returns the surface
SURFACE
.Example
(DRAW-STRING-SHADED-* "Hello World!" 0 0 F-COLOR B-COLOR :SURFACE A-SURFACE)
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-string-solid string p1 &key justify surface font color => result
See DRAW-STRING-SOLID-*.
Parameters
P1
is theX
andX
coordinates to render the text, of typePOINT
.Packages
- Also supported in LISPBUILDER-SDL-GFX, and LISPBUILDER-SDL-TTF
[Function]
draw-string-solid-* string x y &key justify surface font color => result
Draw text
STRING
at locationX
Y
using fontFONT
with colorCOLOR
onto surfaceSURFACE
. The text is keyed ontoSURFACE
.Parameters
STRING
is the text to render.X
andY
are theX
andY
position coordinates, asINTEGERS
.FONT
is the font face used to render the string. Of typeFONT
. Bound to*DEFAULT-FONT*
if unspecified.SURFACE
is the target surface, of typeSDL-SURFACE
. Bound to*DEFAULT-SURFACE*
if unspecified.COLOR
color is the text color, of typeCOLOR
.Returns
- Returns the surface
SURFACE
.Example
(DRAW-STRING-SOLID-* "Hello World!" 0 0 :SURFACE A-SURFACE :COLOR A-COLOR)
Packages
- Also supported in LISPBUILDER-SDL-GFX, and LISPBUILDER-SDL-TTF
[Function]
draw-surface src &key surface => result
See BLIT-SURFACE
[Function]
draw-surface-at src point &key surface => result
Draws the source surface to the destination surface at position POINT. See BLIT-SURFACE.
[Function]
draw-surface-at-* src x y &key surface => result
Draws the source surface to the destination surface at position X and Y. See BLIT-SURFACE
[Function]
draw-trigon p1 p2 p3 &key surface color clipping aa => result
Draw the outline of a trigon or triangle, of COLOR to SURFACE. Use DRAW-FILLED-TRIGON-* to draw a filled trigon.
Parameters
P1
,P2
andP3
specify the vertices of the trigon, of typeSDL:POINT
.:AA
determines if the line is to be drawn using antialiasing.:SURFACE
is the target SURFACE.:COLOR
is the pixel color, of COLOR or COLOR-A.:CLIPPING
when left as the default valueT
will ensure that the pixel is clipped to the dimensions ofSURFACE
. SDL will core dump if pixels are drawn outside a surface. It is slower, but safer to leaveCLIPPING
asT
.Packages
- Also supported in LISPBUILDER-SDL-GFX
:AA
ignored in LISPBUILDER-SDL
[Function]
draw-vline x y0 y1 &key surface color clipping template => result
Draw a vertical line of COLOR from
Y0
toY1
throughX
onto SURFACE.Parameters
X
is the horizontalINTEGER
coordinate that the vertical line must intersect.Y0
andY1
are the vertical start and end points of the line, ofINTEGER
.:SURFACE
is the target SURFACE.:COLOR
is the line color, of COLOR or COLOR-A.:CLIPPING
isNIL
The default isNIL
as the SDL library will perform the necessary clipping automatically.:TEMPLATE
specifies an optional RECTANGLE to fill the surface. Will not freeTEMPLATE
.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
enable-alpha value &key surface => result
Enable surface alpha blending for when
T
. Disable surface alpha blending whenNIL
. ASURFACE
need not have a pixel alpha component (RGBA) to use surface alpha blending.
[Function]
enable-color-key value &key surface => result
Enables color keying when
T
. Disable color keying whenNIL
[Function]
enable-key-repeat delay interval => result
Enables the keyboard repeat rate. DELAY specifies how long the key must be pressed before it begins repeating, it then repeats at the speed specified by INTERVAL. Both DELAY and INTERVAL are expressed in milliseconds. Setting DELAY or INTERVAL to NIL will set the default values of SDL-DEFAULT-REPEAT-DELAY and SDL-DEFAULT-REPEAT-INTERVAL respectively.
[Function]
enable-key-repeat-p => result
Returns the current keyboard DELAY and INTERVAL repeat rate in milliseconds as (VALUES DELAY INTERVAL).
[Function]
enable-rle-accel value &key surface => result
Enables RLE blit acceleration when
T
, disables RLE acceleration whenNIL
. RLE acceleration can substantially speed up blitting of images with large horizontal runs of transparent pixels (i.e., pixels that match the key color).
[Function]
enable-unicode state => result
Unicode translation is enabled with STATE is T, and disabled when STATE is NIL. To obtain the character codes corresponding to received keyboard events, Unicode translation must first be turned on using this function. The translation incurs a slight overhead for each keyboard event and is therefore disabled by default. For each subsequently received key down event, the unicode member of the SDL_keysym structure will then contain the corresponding character code, or zero for keysyms that do not correspond to any character code. Note that only key press events will be translated, not release events. Returns the previous unicode translation state.
[Function]
enable-unicode-p => result
Queries the current state of Unicode keyboard translation. Returns T if enabled, NIL if disabled.
[Function]
fill-surface color &key template surface update clipping => result
Fills surface with the specified
COLOR
.:TEMPLATE
accepts aRECTANGLE
defining the fill bounds.The surface is updated when
:UPDATE`
[Function]
fill-surface-* r g b &key a template surface update clipping => result
Fill the surface with the specified color
R
G
B
:A
A
. See FILL-SURFACE.
[Function]
flood-fill point &key surface color => result
See FLOOD-FILL-*.
Parameters
- POINT is the position to state the fill, of type
POINT
.
[Function]
flood-fill-* x y &key surface color => result
Performs a flood fill of surface
SURFACE
with colorCOLOR
. The fill starts at the position specified by theX
andY
coordinates. Uses a stack based flood fill that does a lot of consing because it uses PUSH/POP as the stack. This function is fast.Parameters
X
andY
areINTEGER
coordinates.SURFACE
is the target surface, of typeSDL:SDL-SURFACE
. Bound toSDL:*DEFAULT-SURFACE*
if unspecified.COLOR
is the fill color, of typeSDL:COLOR
orSDL:COLOR-A
. Bound toSDL:*DEFAULT-COLOR*
if unspecified.
[Function]
flood-fill-stack point &key surface color => result
See FLOOD-FILL-STACK-*.
Parameters
- POINT is the position to state the fill, of type
POINT
.
[Function]
flood-fill-stack-* x y &key surface color => result
See FLOOD-FILL-*.
FLOOD-FILL-STACK-*
is maintains an internal array-based stack.Note: More of an experiment to see if an array would be faster than a bunch of consing. The timing of both functions indicates they run at the same speed. With compiler declarations it may have better results. Another disadvantage to this is it preallocates the stack, chewing up quite a bit of ram.
[Generic accessor]
fp rectangle-array => result
(setf (fp rectangle-array) value)
Returns the foreign pointer in FOREIGN-OBJECT
[Accessor]
frame-rate &optional fpsmanager => result
(setf (frame-rate &optional fpsmanager) rate)
Manage the target frame rate for the game loop.
RATE
>0
will lock the game loop to the specified frame rate, and calculate the average frame rate over a number of frames.RATE
=0
will unlock the frame rate, and calculate the average frame rate over a number of frames.RATE
<0
will unlock the frame rate. The average frane rate is not calculated.See WITH-EVENTS, and AVERAGE-FPS.
[Generic function]
free foreign-object => result
The general explicit cleanup method for the FOREIGN-OBJECT wrapper class. Objects that subclass FOREIGN-OBJECT should specify an :AFTER method on FREE to clean up any additional fields, if necessary.
[Generic function]
free-cached-surface font => result
[Method]
free-cached-surface (font font) => result
[Generic accessor]
g color => result
(setf (g color) value)
[Method]
g (color color) => result
[Function]
get-clip-rect &key surface rectangle => result
Returns the clipping RECTANGLE.
[Function]
get-key-state key => result
Returns the current keypress state of the key KEY. Returns T if the SDL-KEY is pressed, returns NIL if SDL-KEY is not pressed. Note: Use SDL_PumpEvents to update the state array. Note: This function gives you the current state after all events have been processed, so if a key or button has been pressed and released before you process events, then the pressed state will never show up in the getstate calls. Note: This function doesn't take into account whether shift has been pressed or not. For example: (GET-KEY-STATE :SDL-KEY-F1)
[Function]
get-native-window => result
Returns a foreign pointer to the native SDL display window.
[Generic function]
get-point object => result
Returns the
X
andY
coordinates of objectOBJ
as aPOINT
.
[Generic function]
get-position object => result
See GET-POINT
[Generic function]
get-rectangle obj => result
Returns the rectangle
RECTANGLE
.
[Function]
get-surface-rect &key surface rectangle => result
[Generic accessor]
height obj => result
(setf (height obj) value)
[Method]
height (obj font) => result
[Method]
height (obj sdl-surface) => result
Returns the height of
SURFACE
as anINTEGER
.
[Method]
height (obj rectangle) => result
Returns the
INTEGER
height of the rectangleRECTANGLE
.
[Generic function]
image-p source image-type => result
Returns
T
when the image type inSOURCE
is ofIMAGE-TYPE
. ReturnsNIL
otherwise. Attempts to detect the image type using the magic number contained in the image if one is available.NIL
is always returned for images of typeTGA
as aTGA
image does not contain a magic number.IMAGE-TYPE
must be one of:BMP
,:GIF
,:JPG
,:LBM
,:PCX
,:PNG
,:PNM
,:TIF
,:XCF
,:XPM
or:XV
.Example
(RWOPS-P SOURCE :IMAGE-TYPE :BMP) (IMAGE-P "image.bmp" :IMAGE-TYPE :BMP)
Packages
- Supported in LISPBUILDER-SDL-IMAGE
[Generic function]
image-type-of source => result
Returns the type of image in source
SOURCE
. Attempts to detect the image type using the magic number contained in the image if one is available. Returns one of:BMP
,:GIF
,:JPG
,:LBM
,:PCX
,:PNG
,:PNM
,:TIF
,:XCF
,:XPM
or:XV
, if the image type can be determined. ReturnsNIL
if the image cannot be determined (The magic number is not supported or the magic number is not found).NIL
is always returned for images of typeTGA
as aTGA
image does not contain a magic number.Example
(IMAGE-TYPE-OF SOURCE) (IMAGE-TYPE-OF "image.bmp")
Packages
- Supported in LISPBUILDER-SDL-IMAGE
[Function]
init-sdl &optional init => result
Initalizes the SDL library when the
OPTIONAL
parameterINIT
isT
, or the value returned by SDL-INIT-ON-STARTUP isT
.
[Function]
init-sub-systems &optional flags => result
Initializes the SDL subsystems specified in
FLAGS
.FLAGS
is anINTEGER
bitmask containing the logior of zero or more of:SDL-INIT-EVERYTHING
,SDL-INIT-VIDEO
,SDL-INIT-CDROM
,SDL-INIT-AUDIO
,SDL-INIT-TIMER
,SDL-INIT-JOYSTICK
,SDL-INIT-EVENTTHREAD
andSDL-INIT-NOPARACHUTE
.
INIT-SUB-SYSTEMS
can be called only after SDL is succesfully initialized by INIT-SDL.
[Function]
initialise-default-font &optional font-definition => result
Returns a new SDL-BITMAP-FONT initialized from
FONT-DEFINITION
data, orNIL
if the font cannot be created.FONT-DEFINITION
is set to*font-8x8*
if unspecified. Binds the symbol*DEFAULT-FONT*
to the new font to be used as the default for subsequent font rendering or drawing operations.Packages
- Aslo supported in LISPBUILDER-SDL-GFX
[Function]
initialise-font font-definition => result
Returns a new SDL-BITMAP-FONT initialized from
FONT-DEFINITION
data, orNIL
if the font cannot be created.FONT-DEFINITION
must be one of the following built-in fonts:*FONT-10X20*
,*FONT-5X7*
,*FONT-5X8*
,*FONT-6X10*
,*FONT-6X12*
,*FONT-6X13*
,*FONT-6X13B*
,*FONT-6X13O*
,*FONT-6X9*
,*FONT-7X13*
,*FONT-7X13B*
,*FONT-7X13O*
,*FONT-7X14*
,*FONT-7X14B*
,*FONT-8X13*
,*FONT-8X13B*
,*FONT-8X13O*
,*FONT-8X8*
,*FONT-9X15*
,*FONT-9X15B*
,*FONT-9X18*
OR*FONT-9X18B*
.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
initialize-on-startup &rest flags => result
Sets the SDL subsystems that must be initialized in subsequent calls to INIT-SUB-SYSTEMS.
Parameters
FLAGS
may be one or more of:SDL-INIT-EVERYTHING
,SDL-INIT-VIDEO
,SDL-INIT-CDROM
,SDL-INIT-AUDIO
,SDL-INIT-TIMER
,SDL-INIT-JOYSTICK
,SDL-INIT-EVENTTHREAD
andSDL-INIT-NOPARACHUTE
.Returns
- Returns an INTEGER bitmask of the SDL subsystems in
FLAGS
.Example
(INITIALIZE-ON-STARTUP SDL:SDL-INIT-VIDEO SDL:SDL-INIT-CDROM)
[Function]
initialized-sub-systems-p => result
Returns a list of the initialized SDL subsystems.
[Function]
is-valid-ptr pointer => result
Returns T if pointer is not NULL and is a valid CFFI pointer to a foreign object.
[Function]
key-repeat-delay => result
Returns the current key repeat delay, in milliseconds.
[Function]
key-repeat-interval => result
Returns the current key repeat interval, in milliseconds.
[Function]
key= key1 key2 => result
[Function]
list-modes flags &optional surface => result
Returns a LIST of vectors sorted largest to smallest that contains the width and height dimensions of the screen that will support the pixel format of the specified surface
SURFACE
and video flagsFLAGS
.LIST-MODES
must be called after SDL is initialised using INIT-SDL or WITH-INIT.Parameters
FLAGS
is a bitmasked logior of one or more of the following; SDL-SW-SURFACE, SDL-HW-SURFACE, SDL-ASYNC-BLIT, SDL-ANY-FORMAT, SDL-HW-PALETTE, SDL-DOUBLEBUF, SDL-FULLSCREEN, SDL-OPENGL, SDL-RESIZABLE and SDL-NO-FRAME.SURFACE
A surface of type SDL-SURFACE, orNIL
. WHENNIL
, the pixel format will be that returned by SDL-GET-VIDEO-INFO.Returns
- Returns a list of
VECTOR
s of display dimensions, sorted largest to smallest, that will support the pixel format of surfaceSURFACE
; for example(#(1024 768) #(640 480) #(512 384) #(320 240))
. ReturnsNIL
if there are no dimensions available for a particular pixel format. ReturnsT
if any dimension will support the pixel format and video flags.Example
(LIST-MODES '(SDL-HW-SURFACE SDL-FULLSCREEN))
[Function]
list-sub-systems flag => result
Returns a list of SDL subsystems that are specified in
FLAGS
.
FLAGS
is anINTEGER
bitmask containing the logior of zero or more of:SDL-INIT-EVERYTHING
,SDL-INIT-VIDEO
,SDL-INIT-CDROM
,SDL-INIT-AUDIO
,SDL-INIT-TIMER
,SDL-INIT-JOYSTICK
,SDL-INIT-EVENTTHREAD
andSDL-INIT-NOPARACHUTE
.
[Generic function]
load-image source &key color-key alpha image-type force free-rwops color-key-at => result
Creates and returns a new
SURFACE
from the image inSOURCE
, or returnsNIL
ifSOURCE
does not contain a valid image or the image type cannot be determined.The magic number if present is be used to determine the image type. To load an image when the magic number is unavailable (image formats such as
TGA
do not contain a magic number), specify the image type using:IMAGE-TYPE
. All non-magicable image formats, such asTGA
, must be specified usingIMAGE-TYPE
. To load a TGA image use:IMAGE-TYPE :TGA
Parameters
SOURCE
is an image.COLOR-KEY
sets the color key, and turns on color keying.- 'COLOR-KEY-AT' uses the pixel color at
POINT
x/y as the color key, and turns on color keying.ALPHA
sets the transparency level for the surface, and turns on alpha blending. Must be in the range 0-255, where 255 is opaque and 0 is transparent.IMAGE-TYPE
specifies the image type. May be:BMP
,:GIF
,:JPG
,:LBM
,:PCX
,:PNG
,:PNM
,:TGA
,:TIF
,:XCF
,:XPM
or:XV
. The image type is determined using the magic number when present in the image ifNIL
. If the magic number is available and does not matchIMAGE-TYPE
, thenIMAGE-TYPE
is ignored.FORCE
whenT
will ignore any magic number present in the image and load an image as:IMAGE-TYPE
. Images of typeTGA
must be loaded using:FORCE T
.FREE-RWOPS
will free a RWOPS passed as a parameter inSOURCE
. Default isT
Example
- To load a
BMP
image using the magic number(LOAD-IMAGE "image.bmp")
- To load a
TGA
image(LOAD-IMAGE "image.tga" :IMAGE-TYPE :TGA)
- Try to load a
BMP
image asTGA
(LOAD-IMAGE "image.bmp" :IMAGE-TYPE :BMP :FORCE T)
Packages
- Also supported in LISPBUILDER-SDL-IMAGE
- LISPBUILDER-SDL only supports
BMP
images. Any alpha channel present in the source image is ignored. The newSURFACE
is created as anRGB
surface, notRGBA
.- LISPBUILDER-SDL-IMAGE supports the following image formats,
BMP
,GIF
,JPG
,LBM
,PCX
,PNG
,PNM
,TIF
,XCF
,XPM
,XV
.BMP
andTGA
. Alpha channels are supported. The newSURFACE
is created asRGB
orRGBA
as appropriate.:IMAGE-TYPE
and:FORCE
are ignored for LISPBUILDER-SDL.
[Generic function]
map-color color &optional surface => result
Maps COLOR or COLOR-A to the pixel format of SURFACE and returns the pixel value that best approximates the color value of the surface. If the surface has a palette (8-bit) the index of the closest matching color in the palette will be returned. If the surface has an alpha component it will be returned as all
1
bits (fully opaque). If the surface color depth is less than 32-bpp then the unused upper bits of the return value can safely be ignored (e.g., with a 16-bpp format the return value can be assigned to a Uint16, and similarly a Uint8 for an 8-bpp format).
[Generic function]
map-color-* r g b a &optional surface => result
Maps the color specified by the
R
,G
,B
, andA
color components to the pixel format of SURFACE and returns the pixel value that best approximates the color value of the surface. IfA
is notNIL
then the color is assumed to contain an alpha component. See MAP-COLOR for more details.
[Function]
num-joysticks => result
[Generic function]
pack-color color => result
[Generic function]
pixel-alpha-enabled-p surface => result
Returns
T
if a pixel alpha component (RGBA) is available, orNIL
if unavailable (RGB). Note: The pixel alpha component differs from the surface alpha component which is retrieved using ALPHA-ENABLED-P.
[Function]
point &key x y => result
Creates a new
POINT
set to the specified horizontalX
and verticalY
coordinate.
[Generic function]
point-* point => result
Returns the
X
andY
coordinates of the object as a spread. TheRESULT
is(VALUES X Y)
[Generic function]
position-* obj => result
See POINT-*
[Function]
push-quit-event => result
Pushes a new
SDL_Event
of type:SDL-QUIT-EVENT
onto the event queue.
[Function]
push-user-event &key code data1 data2 => result
Pushes a new
SDL_Event
of type:SDL-USER-EVENT
onto the event queue.
[Function]
query-cursor => result
Queries the current state of the cursor. Returns
T
if the cursor is enabled and shown on the display. ReturnsNIL
if the cursor is disabled and hidden.
[Function]
quit-on-exit &rest flags => result
Sets one or more SDL subsystems that must be uninitialized in subsequent calls to QUIT-SUB-SYSTEMS.
Parameters
FLAGS
may be one or more of:SDL-INIT-EVERYTHING
,SDL-INIT-VIDEO
,SDL-INIT-CDROM
,SDL-INIT-AUDIO
,SDL-INIT-TIMER
,SDL-INIT-JOYSTICK
,SDL-INIT-EVENTTHREAD
,SDL-INIT-NOPARACHUTE
.Returns
- Returns an INTEGER bitmask of the SDL subsystems in
FLAGS
.Example
(QUIT-ON-EXIT SDL:SDL-INIT-VIDEO SDL:SDL-INIT-CDROM)
[Function]
quit-sdl &optional quit => result
Uninitalizes the SDL library when the
OPTIONAL
parameterQUIT
isT
, or the value returned by SDL-QUIT-ON-EXIT isT
.
[Function]
quit-sub-systems &optional flags => result
Uninitializes the SDL subsystems specified in the
INTEGER
bitmaskFLAGS
.FLAGS
contains the logior of zero or more of:SDL-INIT-EVERYTHING
,SDL-INIT-VIDEO
,SDL-INIT-CDROM
,SDL-INIT-AUDIO
,SDL-INIT-TIMER
,SDL-INIT-JOYSTICK
,SDL-INIT-EVENTTHREAD
,SDL-INIT-NOPARACHUTE
.
QUIT-SUB-SYSTEMS
can be called only after SDL is successfully intialized using INIT-SDL.
[Generic accessor]
r color => result
(setf (r color) value)
[Method]
r (color color) => result
[Function]
random+1 rnd => result
Returns a random number in the range 0 > num <= rnd.
[Function]
random-rectangle bound-w bound-h &optional rectangle => result
Creates and return s a new
RECTANGLE
of random x, y width and height within the specified bounds of widthBOUND-W
and heightBOUND-H
.RECTANGLE
if unset will force the creation of a newRECTANGLE
object.RECTANGLE
if set will be modified with the coordinates.
[Function]
read-pixel point &key clipping surface => result
See READ-PIXEL-*.
Parameters
POINT
is the POINT coordinates of the pixel.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
read-pixel-* x y &key clipping surface => result
Read the COLOR of the pixel at
X
andY
coordiates from SURFACE.Parameters
X
andY
specify the coordinates of the pixel, and are of typeINTEGER
.:SURFACE
is the target SURFACE.:COLOR
is the pixel color, of COLOR or COLOR-A.:CLIPPING
when left as the default valueT
will ensure that the pixel is clipped to the dimensions ofSURFACE
. SDL will core dump if pixels are drawn outside a surface. It is slower, but safer to leaveCLIPPING
asT
.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Standard class]
rectangle
A
RECTANGLE
object manages the foreign SDL_Rect object. Free using FREE.
[Function]
rectangle &key x y w h fp => result
Creates a new
RECTANGLE
from the specifiedX
,Y
, widthW
and heightH
. IfFP' is
NILthen a foreign SDL_Rect is created. If
FPis a pointer to a foreign SDL_Rect object then
FP` is used.
[Generic function]
rectangle-* obj => result
Returns the
X
,Y
,WIDTH
andHEIGHT
coordinates of the object as a spread. TheRESULT
is(VALUES X Y WIDTH HEIGHT)
[Function]
rectangle-from-edges p1 p2 &optional rectangle => result
P1
andP2
arePOINTS
that specify the bounds of theRECTANGLE
.P1
specifies the top left coordinate.P2
specifies the lower right coordinate.
[Function]
rectangle-from-edges-* x1 y1 x2 y2 &optional rectangle => result
Returns a new
RECTANGLE
using the bounds specified by theINTEGERS
X1
,X2
,Y1
andY2
. The coordinates of the rectangle are X = X1, Y = Y1, WIDTH = (- X2 X1), HEIGHT = (- Y2 Y1)Parameters
X1
,Y1
specify the top left coordinate asINTEGERS
.X2
,Y2
specify the bottom right coordinate asINTEGERS
.RECTANGLE
if unset will force the creation of a newRECTANGLE
object.RECTANGLE
if set will be modified with the coordinates.
[Function]
rectangle-from-midpoint-* x y w h &optional rectangle => result
Returns a
RECTANGLE
of widthW
and heightH
with the rectangle mid-point at coordinatesX
andY
.RECTANGLE
if unset will force the creation of a newRECTANGLE
object.RECTANGLE
if set will be modified with the coordinates.
[Function]
render-string-blended string &key font color free cache => result
Render the string
STRING
using fontFONT
with text colorCOLOR
to a newSURFACE
. The dimensions of the new surface are height ==FONT
height, and width ==FONT
width *STRING
length. The surface background is transparent and therefore can be keyed over other surfaces. Use:CACHE T
to cache the new surface in theFONT
object. When:FREE T
any exisiting cached surface inFONT
is automatically freed. When:FREE NIL
the caller is responsible for freeing any existing cached surface inFONT
.Parameters
STRING
is the text to render.FONT
is the font face used to render theSTRING
. Of typeFONT
. Bound to*DEFAULT-FONT*
if unspecified.COLOR
color is the text color, of typeCOLOR
.FREE
whenT
will free any exisitng cached surface inFONT
.CACHE
whenT
will cache the newly created SURFACE inFONT
. Any cached surface can be accessed using CACHED-SURFACE and can be blitted to a target surface using DRAW-FONT.Returns
- Returns a new cached surface
SDL-SURFACE
.Example
(DRAW-STRING-SOLID "Hello World!" :COLOR A-COLOR)
Packages
- Supported in LISPBUILDER-SDL-TTF
[Function]
render-string-shaded string fg-color bg-color &key font free cache => result
Render the string
STRING
using fontFONT
with text colorFG-COLOR
and background colorBG-COLOR
to a newSURFACE
. The dimensions of the new surface are height ==FONT
height, and width ==FONT
width *STRING
length. The surface background is filled withBG-COLOR
so the surface cannot be keyed over other surfaces. Use:CACHE T
to cache the new surface in theFONT
object. When:FREE T
any exisiting cached surface inFONT
is automatically freed. When:FREE NIL
the caller is responsible for freeing any existing cached surface inFONT
.Parameters
STRING
is the text to render.FONT
is the font face used to render theSTRING
. Of typeFONT
. Bound to*DEFAULT-FONT*
if unspecified.FG-COLOR
color is the text color, of typeCOLOR
BG-COLOR
color is the background color used to fill the surface, of typeCOLOR
FREE
whenT
will free any exisiting cached surface inFONT
.CACHE
whenT
will cache the newly created SURFACE inFONT
. Any cached surface can be accessed using CACHED-SURFACE and can be blitted to a target surface using DRAW-FONT.Returns
- Returns a new cached surface
SDL-SURFACE
.Example
(RENDER-STRING-SHADED "Hello World!" F-COLOR B-COLOR)
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
render-string-solid string &key font color free cache => result
Render the string
STRING
using fontFONT
with text colorCOLOR
to a newSURFACE
. The dimensions of the new surface are height ==FONT
height, and width ==FONT
width *STRING
length. The surface background is transparent and therefore can be keyed over other surfaces. Use:CACHE T
to cache the new surface in theFONT
object. When:FREE T
any exisiting cached surface inFONT
is automatically freed. When:FREE NIL
the caller is responsible for freeing any existing cached surface inFONT
.Parameters
STRING
is the text to render.FONT
is the font face used to render theSTRING
. Of typeFONT
. Bound to*DEFAULT-FONT*
if unspecified.COLOR
color is the text color, of typeCOLOR
.FREE
whenT
will free any exisitng cached surface inFONT
.CACHE
whenT
will cache the newly created SURFACE inFONT
. Any cached surface can be accessed using CACHED-SURFACE and can be blitted to a target surface using DRAW-FONT.Returns
- Returns a new cached surface
SDL-SURFACE
.Example
(DRAW-STRING-SOLID "Hello World!" :COLOR A-COLOR)
Packages
- Also supported in LISPBUILDER-SDL-GFX, and LISPBUILDER-SDL-TTF
[Function]
return-sub-systems-of-status flags status => result
Returns the status
STATUS
of the the specified SDL subsystems inFLAGS
as an INTEGER bitmask.Parameters
FLAGS
may contain a logior of zero or more of:SDL-INIT-EVERYTHING
,SDL-INIT-VIDEO
,SDL-INIT-CDROM
,SDL-INIT-AUDIO
,SDL-INIT-TIMER
,SDL-INIT-JOYSTICK
,SDL-INIT-EVENTTHREAD
,SDL-INIT-NOPARACHUTE
.STATUS
whenT
determines the status of initialised subsystems.STATUS
whenNIL
, determines the status of uninitialised subsystems.Returns
- Returns an INTEGER bitmask of the SDL subsystems in
FLAGS
that are initialised whenSTATUS
isT
or uninitialised whenSTATUS
isNIL
.
[Generic accessor]
rle-accel-enabled-p surface => result
(setf (rle-accel-enabled-p surface) value)
[Method]
rle-accel-enabled-p (surface sdl-surface) => result
[Function]
rotate-surface degrees &key surface free zoom smooth => result
Returns a new SURFACE rotated to
DEGREES
.Parameters
DEGREES
is the rotation in degrees.:SURFACE
is the surface to rotate SURFACE.:FREE
whenT
will freeSURFACE
.:ZOOM
is the scaling factor.:SMOOTH
whenT
will anti-aliase the new surface.Packages
- Also supported in LISPBUILDER-SDL-GFX
- LISPBUILDER-SDL supports rotations of only
0
,90
,180
, or270
degrees. LISPBUILDER-SDL-GFX supports any rotation.- LISPBUILDER-SDL ignores
:SMOOTH
. LISPBUILDER-SDL-GFX supports:SMOOTH
.- LISPBUILDER-SDL ignores
:ZOOM
. LISPBUILDER-SDL-GFX supports:ZOOM
.- LISPBUILDER-SDL-GFX ignores
:FREE
.
[Function]
rotate-surface-xy degrees &key surface free zoomx zoomy smooth => result
Returns a new SURFACE rotated to
DEGREES
.Parameters
DEGREES
is the rotation in degrees.:SURFACE
is the surface to rotate SURFACE.:FREE
whenT
will freeSURFACE
.:ZOOMX
andZOOMY
are the the scaling factors. A negative scaling factor will flip the corresponding axis. Note: Flipping is only supported with anti-aliasing turned off.:SMOOTH
whenT
will anti-aliase the new surface.Packages
- Supported in LISPBUILDER-SDL-GFX
- LISPBUILDER-SDL-GFX ignores
:FREE
.
[Standard class]
rwops
A wrapper around a foreign SDL_RWops object. Free using FREE.
[Function]
save-image surface filename => result
Saves the
SURFACE
as aBMP
image to a file at locationFILENAME
.
[Constant]
sdl-any-format
Applies to DISPLAY-SURFACE.
- When passed as a
FLAG
to WINDOW; Causes SDL to return a DISPLAY-SURFACE of any pixel depth if the requested pixel depth is unavailable.- When read from the
FLAGS
field in DISPLAY-SURFACE; Indicates that the surface was created withSDL-ANY-FORMAT
.Normally, if a DISPLAY-SURFACE of the requested bits-per-pixel (bpp) is not available, SDL will emulate one with a shadow surface. Passing
SDL-ANY-FORMAT
prevents this and causes SDL to use the DISPLAY-SURFACE surface, regardless of its pixel depth.
[Constant]
sdl-async-blit
Applies to DISPLAY-SURFACE.
- When passed as a
FLAG
to WINDOW; Enables the use of asynchronous updates of the DISPLAY-SURFACE.- When read from the
FLAGS
field in SURFACE or DISPLAY-SURFACE; Indicates if the surface uses asynchronous blits when possible.Asynchronous blits usually slows down blitting on single CPU machines, but may provide a speed increase on SMP systems.
[Standard class]
sdl-bitmap-font
The
SDL-BITMAP-FONT
object manages the resources for a bitmap font. Prior to the first call to aRENDER-STRING*
function, the cached SURFACE isNIL
.The cached surface is created by a call to any of the RENDER-STRING* functions. Use DRAW-FONT, DRAW-FONT-AT or DRAW-FONT-AT-* to draw the cached surface.
Free using FREE
[Constant]
sdl-doublebuf
Applies to DISPLAY-SURFACE.
- When passed as a
FLAG
to WINDOW; Enable hardware double buffering; only valid with SDL-HW-SURFACE.- When read from the
FLAGS
field in DISPLAY-SURFACE; Indicages that the surface is double buffered.Calling SDL-FLIP will flip the buffers and update the screen. All drawing will take place on the surface that is not displayed at the moment. If double buffering could not be enabled then SDL-FLIP will just perform a SDL-UPDATE-RECT on the entire screen.
[Constant]
sdl-fullscreen
Applies to DISPLAY-SURFACE.
- When passed as a
FLAG
to WINDOW; SDL will attempt to use a fullscreen mode. If a hardware resolution change is not possible (for whatever reason), the next higher resolution will be used and the display window centered on a black background.- When read from the
FLAGS
field in DISPLAY-SURFACE; Indicates that the surface is full-screen.
[Function]
sdl-get-ticks => result
[Constant]
sdl-hw-accel
Applies to SURFACE and DISPLAY-SURFACE.
- When read from the
FLAGS
field in SURFACE and DISPLAY-SURFACE; Indicates that surface blitting will use hardware acceloration.
[Constant]
sdl-hw-palette
Applies to SURFACE and DISPLAY-SURFACE.
- When passed as a
FLAG
to WINDOW; Gives SDL exclusive palette access to DISPLAY-SURFACE.- When read from the
FLAGS
field in SURFACE or DISPLAY-SURFACE; Indicates that the surface has an exclusive palette.Without this flag you may not always get the the colors you request with SDL-SET-COLORS or SDL-SET-PALETTE.
[Constant]
sdl-hw-surface
Applies to SURFACE and DISPLAY-SURFACE.
- When passed as a
FLAG
to WINDOW or CREATE-SURFACE; Create the SURFACE or DISPLAY-SURFACE in video memory.- When read from the
FLAGS
field in SURFACE or DISPLAY-SURFACE; Indicates if the surface is stored in video memory.This will allow SDL to take advantage of Video->Video blits (which are often accelerated).
[Constant]
sdl-init-audio
[Constant]
sdl-init-cdrom
[Constant]
sdl-init-eventthread
[Constant]
sdl-init-everything
[Constant]
sdl-init-joystick
[Constant]
sdl-init-noparachute
[Function]
sdl-init-on-startup => result
Returns
T
if the SDL library must be initialised in INIT-SDL, or WITH-INIT. ReturnsNIL
otherwise.
[Constant]
sdl-init-timer
[Constant]
sdl-init-video
[Constant]
sdl-iyuv-overlay
[Function]
sdl-joystick-name device-index => result
[Constant]
sdl-no-frame
Applies to DISPLAY-SURFACE.
- When passed as a
FLAG
to WINDOW; If possible,SDL-NO-FRAME
causes SDL to create a window with no title bar or frame decoration.- When read from the
FLAGS
field in DISPLAY-SURFACE; Note: Per the SDL documentation, this is not stored inFLAGS
.Fullscreen modes automatically have this flag set.
[Constant]
sdl-opengl
Applies to DISPLAY-SURFACE.
- When passed as a
FLAG
to WINDOW; Create an OpenGL rendering context. You should have previously set OpenGL video attributes with SDL-GL-SET-ATTRIBUTE.- When read from the
FLAGS
field in DISPLAY-SURFACE; Indicates that the surface has an OpenGL rendering context.
[Constant]
sdl-pre-alloc
Applies to SURFACE.
- When read from the
FLAGS
field in SURFACE; Indicates that surface uses preallocated memory.
[Function]
sdl-quit-on-exit => result
Returns
T
if the SDL library must be uninitialised in QUIT-SDL, or WITH-INIT. ReturnsNIL
otherwise.
[Constant]
sdl-resizable
Applies to DISPLAY-SURFACE.
- When passed as a
FLAG
to WINDOW; Create a resizable window.- When read from the
FLAGS
field in DISPLAY-SURFACE; Indicates that the surface is resizable.When the window is resized by the user a :VIDEO-RESIZE-EVENT event is generated and WINDOW can be called again with the new size.
[Constant]
sdl-rle-accel
Applies to SURFACE
- When passed as a
FLAG
to SET-COLOR-KEY; The surface will be drawn using RLE acceleration when drawn with BLIT-SURFACE, and DRAW-SURFACE. The surface will actually be encoded for RLE acceleration the first time BLIT-SURFACE, DRAW-SURFACE or CONVERT-SURFACE is called on the surface.- When read from the
FLAGS
field in SURFACE; Indicates that colorkey blitting is accelerated with RLE.RLE acceleration can substantially speed up blitting of images with large horizontal runs of transparent pixels (i.e., pixels that match the key color). The key must be of the same pixel format as the surface, MAP-COLOR is often useful for obtaining an acceptable value.
[Constant]
sdl-rle-accel-ok
Applies to SURFACE.
[Constant]
sdl-src-alpha
Applies to SURFACE.
- When passed as a
FLAG
to CREATE-SURFACE and SET-ALPHA; Turns on alpha-blending for blits from this surface. If SDL-HW-SURFACE is also specified and alpha-blending blits are hardware-accelerated, then the surface will be placed in video memory if possible. If the screen is a hardware surface and alpha-blending blits are hardware-accelerated then the SDL-HW-SURFACE flag will be set. Use SET-ALPHA to set or clear this flag after surface creation.- When read from the
FLAGS
field in SURFACE; Indicates that surface blitting uses alpha blending.
[Constant]
sdl-src-color-key
Applies to SURFACE.
- When passed as a
FLAG
to CREATE-SURFACE and SET-COLOR-KEY; Turns on color keying for blits from this surface. If SDL-HW-SURFACE is also specified and color keyed blits are hardware-accelerated, then SDL will attempt to place the surface in video memory. If the screen is a hardware surface and color keyed blits are hardware-accelerated then the SDL-HW-SURFACE flag will be set. Use SET-COLOR-KEY to set or clear this flag after surface creation.- When read from the
FLAGS
field in SURFACE; Indicates that the surface uses colorkey blitting.
[Standard class]
sdl-surface
A wrapper for the foreign SDL_Surface object.
[Constant]
sdl-sw-surface
Applies to SURFACE and DISPLAY-SURFACE.
- When passed as a
FLAG
to WINDOW or CREATE-SURFACE; Create the SURFACE or DISPLAY-SURFACE in system memory.- When read from the
FLAGS
field in SURFACE or DISPLAY-SURFACE; Indicates if the surface is stored in system memory.This improves the performance of pixel level access, however you may not be able to take advantage of some types of hardware blitting.
[Constant]
sdl-uyvy-overlay
[Function]
sdl-wm-grab-input mode => result
[Constant]
sdl-yuy2-overlay
[Constant]
sdl-yv12-overlay
[Constant]
sdl-yvyu-overlay
[Function]
set-cell rectangle &key surface index => result
Sets the
CELL
atINDEX
to the bounds ofRECTANGLE
. Note: WhenSURFACE
is the source of a blit, only the area within the cell rectangle is drawn.
[Function]
set-cell-* x y w h &key surface index => result
Sets the
CELL
atINDEX
to a rectangle bounded byX
,Y
,W
andH
. Note: WhenSURFACE
is the source of a blit, only the area within the cell rectangle is drawn.
[Function]
set-clip-rect rectangle &key surface => result
See CLIP-RECT.
[Generic function]
set-color dst src => result
Copies the
RGB/A
color components to the destinationDST
from the sourceSRC
.
[Generic function]
set-color-* color &key r g b a => result
Sets
COLOR
to the redR
, greenG
, blueB
and alphaA
color components.
[Generic function]
set-default-font font => result
[Method]
set-default-font (font sdl-bitmap-font) => result
Sets the font
FONT
as the default font to be used for subsequent font rendering or drawing operations. Binds the symbol*DEFAULT-FONT*
to font. Functions that take aFONT
argument use*DEFAULT-FONT*
unless otherwise specified. Returns a newFONT
, orNIL
if unsuccessful.
[Function]
set-gl-attribute attribute value => result
[Generic function]
set-point dst src => result
Copies the
X
andY
coordinates to the destinationDST
from the sourceSRC
.
[Generic function]
set-point-* obj &key x y => result
Sets the
X
andY
coordinates of the objectOBJ
.X
andY
areKEY
word parameters.
[Generic function]
set-position dst src => result
See SET-POINT
[Generic function]
set-position-* obj &key x y => result
See SET-POINT-*
[Generic function]
set-rectangle dst src => result
Copies the
X
,Y
,WIDTH
andHEIGHT
coordinates to the destination rectangleDST
from the source rectangleSRC
.
[Generic function]
set-rectangle-* rectangle &key x y w h => result
Sets the
X
,Y
,WIDTH
andHEIGHT
coordinates of the rectangleRECTANGLE
.X
,Y
,WIDTH
andHEIGHT
areKEY
word parameters having default values of0
if unspecified.
[Generic function]
set-surface surface position => result
Sets the coordinates of the surface SURFACE to
POSITION
, where position is of typePOINT
.
[Generic function]
set-surface-* surface &key x y => result
Sets the coordinates of the surface
SURFACE
.X
andY
areKEY
word parameters having default values of0
if unspecified.
[Function]
show-cursor state => result
Disables the cursor when state is
NIL
, otherwise enables the cursor.
[Standard class]
surface
This object is garbage collected and the
SDL_Surface
object freed when out of scope. Free using FREE.
[Function]
surface-info surface &optional info => result
Returns information about the SDL surface
SURFACE
.Parameters
SURFACE
is an SDL surface of type SDL-SURFACE.INFO
must be one ofNIL
, SDL-SW-SURFACE, SDL-HW-SURFACE, SDL-ASYNC-BLIT, SDL-ANY-FORMAT, SDL-HW-PALETTE, SDL-DOUBLEBUF, SDL-FULLSCREEN, SDL-OPENGL, SDL-RESIZABLE SDL-HW-ACCEL, SDL-SRC-COLOR-KEY, SDL-RLE-ACCEL, SDL-SRC-ALPHA or SDL-PRE-ALLOC.Returns
INFO
whenNIL
will return a list of all enabled surface flags. Otherwise will returnINFO
asT
orNIL
if supported by the surface.Example
(SURFACE-INFO A-SURFACE '(SDL-HW-SURFACE SDL-HW-PALETTE SDL-HW-ACCELL))
[Function]
time-scale &optional fpsmanager => result
[Function]
to-degree radian => result
Converts radians to degrees.
[Function]
to-radian degree => result
Converts degrees to radians.
[Function]
update-display &optional surface => result
When OPENGL-CONTEXT is
NIL
;UPDATE-DISPLAY
will flip the SDL video buffers and update the screenSURFACE
ifSDL-HW-SURFACE
is set in WINDOW. If double buffering is not enabled then SDL will perform an SDL-UPDATE-RECT on the entire screen.When OPENGL-CONTEXT is
T
;UPDATE-DISPLAY
will call SDL-GL-SWAP-BUFFERS to update the OpenGL display context.
SURFACE
is bound to*DEFAULT-DISPLAY*
if unspecified.
[Function]
update-surface surface &optional template => result
Updates the surface
[Function]
update-surface-* surface x y w h => result
See UPDATE-SURFACE.
[Function]
video-dimensions => result
Returns the best video dimensions if called before a window is created, using WINDOW. Returns the current video dimensions if called after a window is created. Must be called after SDL is initialized using INIT-SDL or WITH-INIT
[Function]
video-driver-name => result
Returns the driver name of the initialised video driver. The driver name is a
STRING
containing a one-word identifier like "x11" or "windib". Returns 'NIL' if the video driver is not already initialised with INIT-SDL or WITH-INIT.Example
(sdl:with-init () (sdl:video-driver-name)) >> "windib"
[Function]
video-info &optional info => result
Returns information about the video hardware.
GET-VIDEO-INFO
must be called after SDL is initialised using INIT-SDL or WITH-INIT. IfGET-VIDEO-INFO
is called before WINDOW, the information returned is of the best video mode. IfGET-VIDEO-INFO
is called after WINDOW, the information returned is of the current video mode.Parameters
INFO
can be one of:HW-AVAILABLE
,:WM-AVAILABLE
,:BLIT-HW
,:BLIT-HW-CC
,:BLIT-HW-A
,:BLIT-SW
,:BLIT-SW-CC
,:BLIT-SW-A
or:BLIT-FILL
. IfNIL
, returns a list of all supported video flags.Example
(video-info :HW-AVAILABLE)
[Function]
video-memory => result
Returns the amount of video memory of the graphics hardware. Must be called after SDL is initialized using INIT-SDL or WITH-INIT.
[Generic accessor]
width obj => result
(setf (width obj) value)
[Method]
width (obj font) => result
[Method]
width (obj sdl-surface) => result
Returns the width of
SURFACE
as anINTEGER
.
[Method]
width (obj rectangle) => result
Returns the
INTEGER
width of the rectangleRECTANGLE
.
[Function]
window width height &key bpp flags title-caption icon-caption => result
Creates a new SDL window of pixel width
WIDTH
and heightHEIGHT
using SDL_SetVideoMode.Use
SDL-SW-SURFACE
if you plan on doing per-pixel manipulations, or blit surfaces with alpha channels, and require a high framerate. When you use hardware surfaces likeSDL-HW-SURFACE
, SDL copies the surfaces from video memory to system memory when you lock them, and back when you unlock them. This can cause a major performance hit. (Be aware that you may request a hardware surface, but receive a software surface. Many platforms can only provide a hardware surface when usingSDL-FULL-SCREEN.)
SDL-HW-SURFACE` is best used when the surfaces you'll be blitting can also be stored in video memory.Note: To control the position on the screen when creating a windowed surface, set the environment variables
SDL_VIDEO_CENTERED=center
orSDL_VIDEO_WINDOW_POS=x,y
. These may be set using SDL-PUT-ENV.Parameters
WIDTH
the pixel width of the window, of typeINTEGER
.HEIGHT
the pixel height of the window, of typeINTEGER
. IfWIDTH
andHEIGHT
are both0
, then the width and height of the current video mode is used (or the desktop mode, if no mode has been set).BPP
the number of bits per pixel. Defaults to0
which is the current display bits per pixel. Note: ABPP
of24
uses the packed representation of 3 bytes/pixel. For the more common 4 bytes/pixel mode, use aBPP
of 32.FLAGS
is a bitmasked logior of one or more of the following; SDL-SW-SURFACE, SDL-HW-SURFACE, SDL-ASYNC-BLIT, SDL-ANY-FORMAT, SDL-HW-PALETTE, SDL-DOUBLEBUF, SDL-FULLSCREEN, SDL-OPENGL, SDL-RESIZABLE and SDL-NO-FRAME.TITLE-CAPTION
is the title that appears in the Window title bar, of typeSTRING
.ICON-CAPTION
is the title that appears when the Window is minimized, of typeSTRING
.Returns
- Returns a new
DISPLAY-SURFACE
if successful,NIL
if unsuccessful. Whatever flags SDL_SetVideoMode could satisfy are set in the flags member ofSURFACE
. TheSURFACE
returned is freed by SDL and should never be freed by the caller. This rule includes consecutive calls toWINDOW
(i.e. upon resize or resolution change) - any existing surface will be released automatically by SDL.Example
(WINDOW 320 240 :TITLE-CAPTION "Random-Rects" :ICON-CAPTION "Random-Rects" :FLAGS '(SDL-DOUBLEBUF SDL-FULLSCREEN))
[Macro]
with-bezier (&optional style segments) declaration* statement* => result
Draw a bezier curve of
*DEFAULT-COLOR*
to*DEFAULT-SURFACE*
. The shape of the Bezier curve is defined by control points. A control point is a vertex containing an X and Y coordinate pair.The number of segments
SEGENTS
used to draw the Bezier curve defaults to 10. The greater the number of segments, the smoother the Bezier curve.Local Methods
A vertex may be added using:
ADD-VERTEX
which accepts anPOINT
, orADD-VERTEX-*
which is the x/y spread version
ADD-VERTEX
andADD-VERTEX-*
are valid only within the scop ofWITH-BEZIER
.Parameters
STYLE
is one of:SOLID
,:DASH
, or:POINTS
. WhenSTYLE
is:SOLID
, a single continuous line is drawn through the specified waypoints. WhenSTYLE
is:DASH
, a line is drawn to alternate waypoint pairs. WhenSTYLE
is:POINTS
, a single point is drawn at each waypoint.SEGMENTS
is the number of segments used to draw the Bezier curve. Default is 20 segments if unspecified. The greater the number of segments, the smoother the curve.Example
(SDL:WITH-COLOR (COL (SDL:COLOR)) (WITH-BEZIER () (ADD-VERTEX-* 60 40) (ADD-VERTEX-* 160 10) (ADD-VERTEX-* 170 150) (ADD-VERTEX-* 60 150)))
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Macro]
with-color (var &optional color free) declaration* statement* => result
A convience macro that binds
*DEFAULT-COLOR*
toVAR
within the scope ofWITH-COLOR
.VAR
is set toCOLOR
whenCOLOR
is notNIL
.VAR
must be of type COLOR, or COLOR-A.VAR
is freed using FREE whenFREE
isT
.
[Macro]
with-curve (&optional style segments) declaration* statement* => result
Draw a Cattmul-Rom spline of
*DEFAULT-COLOR*
to*DEFAULT-SURFACE*
. The shape of the curve is defined by waypoints. A waypoint is a vertex containing an X and Y coordinate pair.Local Methods
A vertex may be added using:
ADD-VERTEX
which accepts anSDL:POINT
, orADD-VERTEX-*
which is the x/y spread version
ADD-VERTEX
andADD-VERTEX-*
are valid only within the scope ofWITH-CURVE
.Parameters
STYLE
describes the line style used to draw the curve and may be one of:SOLID
,:DASH
, or:POINTS
. Use:SOLID
to draw a single continuous line through the specified waypoints. Use:DASH
to draw a line between alternate waypoint pairs. Use:POINTS
to draw a single pixel at each waypoint.SEGMENTS
is the number of segments used to draw the Catmull-Rom spline. Default is 20 segments if unspecified. The greater the number of segments, the smoother the spline.Example
(SDL:WITH-COLOR (COL (SDL:COLOR)) (WITH-CURVE (:SOLID 30) (ADD-VERTEX-* 60 40) (ADD-VERTEX-* 160 10) (ADD-VERTEX-* 170 150) (ADD-VERTEX-* 60 150)))
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Macro]
with-default-font (font) declaration* statement* => result
Sets
*DEFAULT-FONT*
toFONT
within the scope ofWITH-DEFAULT-FONT
.Example
(WITH-DEFAULT-FONT (new-font) (DRAW-CHARACTER-SHADED-* "Hello World!" 0 0 F-COLOR B-COLOR))
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Macro]
with-events (&optional type) declaration* statement* => result
WITH-EVENTS
is a convenience macro for managing the main game loop. It processes incoming SDL events and limits the game loop to the specified number of frames per second.Both the SDL-POLL-EVENT and SDL-WAIT-EVENT event mechanisms are supported by specifying the
TYPE
as:POLL
or:WAIT
respectively.NOTE:
WITH-EVENTS
must be called in the same thread used to set the video mode.Example
(SDL:WITH-EVENTS (:POLL) (:QUIT-EVENT () T) (:KEY-DOWN-EVENT (:KEY KEY) (WHEN (SDL:KEY= KEY :SDL-KEY-ESCAPE) (SDL:PUSH-QUIT-EVENT))) (:VIDEO-EXPOSE-EVENT () (SDL:UPDATE-DISPLAY))))))
Frame Rate Limiting
The frame rate is specified using FRAME-RATE. For example to set the frame rate to 60 frames per second:
(SETF (SDL:FRAME-RATE) 60)
Event Syntax
Events are specified using the format
(:EVENT-TYPE (&KEYS KEYS))
EVENT-TYPE
must be one of the followingKEY
words;:ACTIVE-EVENT, :KEY-DOWN-EVENT, :KEY-UP-EVENT, :MOUSE-MOTION-EVENT, :MOUSE-BUTTON-DOWN-EVENT, :MOUSE-BUTTON-UP-EVENT, :JOY-AXIS-MOTION-EVENT, :JOY-BUTTON-DOWN-EVENT, :JOY-BUTTON-UP-EVENT, :JOY-HAT-MOTION-EVENT, :JOY-BALL-MOTION-EVENT, :VIDEO-RESIZE-EVENT, :VIDEO-EXPOSE-EVENT, :SYS-WM-EVENT, :QUIT-EVENT, :USER-EVENT
or:IDLE
.KEYS
specify the members of the event to return and are specific to each event type. These are discussed in detail below.NOTE:
:QUIT-EVENT
must returnT
to exit theWITH-EVENT
macro.NOTE:
:IDLE
is ignored whenTYPE
is:WAIT
.Polling for Events
When
TYPE
is:POLL
,WITH-EVENTS
will continually poll for currently pending events. If no events are available then the game loop is run and the forms in:IDLE
are executed.Waiting for Events
When
TYPE
is:WAIT
,WITH-EVENTS
will sleep indefinitely for the next available event. If no events are available then the game loop is paused.The :IDLE Event
(:IDLE () &BODY BODY)
The
:IDLE
event is special in that it is not generated by SDL. Rather the forms in:IDLE
are executed once each game loop after event queue is emptied.:IDLE
is ignored when the event mechanism specified byTYPE
is:WAIT
.Active Event
(:ACTIVE-EVENT (:GAIN GAIN :STATE STATE) &BODY BODY)
When the mouse leaves or enters the window area an
SDL-APP-MOUSE-FOCUS
type activation event is generated.
If the mouse has entered the window thenGAIN
will be1
, otherwiseGAIN
will be0
. AnSDL-APP-INPUT-FOCUS
type activation event occurs when the application loses or gains keyboard focus, usually when a different application is made active. Finally, anSDL-APP-ACTIVE
type event occurs when the application is either minimised/iconified,GAIN
is0
, or restored. A single event can have multiple values set inSTATE
. Note: This event does not occur when an application window is first created.
GAIN
is0
if the event is a loss or1
if it is a gain.STATE
a bitmask of the following values:SDL-APP-MOUSE-FOCUS
if mouse focus was gained or lost,SDL-APP-INPUT-FOCUS
if input focus was gained or lost, andSDL-APP-ACTIVE
if the application was iconified,GAIN
is0
, or restoredGAIN
is1
.Keyboard Events
(:KEY-DOWN-EVENT (:STATE STATE :SCANCODE SCANCODE :KEY KEY :MOD MOD :UNICODE UNICODE) &BODY BODY) (:KEY-UP-EVENT (:STATE STATE :SCANCODE SCANCODE :KEY KEY :MOD MOD :UNICODE UNICODE) &BODY BODY)
A keyboard event generally occurs when a key is released or when a key is pressed. The information on the key that generated the event is stored in
KEY
andMOD
.The
SDL-CAPS-LOCK
andSDL-NUM-LOCK
keys are special cases and report anSDL-KEY-DOWN
when first pressed, then anSDL-RELEASED
when released and pressed again. These keys KEYUP and KEYDOWN events are therefore analogous to the state of the caps lock and num lock LEDs rather than the keys themselves. These special cases are required for compatibility with Sun workstations.Note: Repeating
SDL-KEY-DOWN
events will occur if key repeat is enabled using SDL-ENABLE-KEY-REPEAT.
STATE
isSDL-PRESSED
orSDL-RELEASED
if the key is pressed or released respectively.SCANCODE
is the hardware-dependent scancode returned by the keyboard.KEY
is is the SDL-defined value of the key that generated the event. The SDL-defined value forKEY
generally takes the following format::SDL-KEY-0
to:SDL-KEY-1
for numeric keys.SDL-KEY-a
toSDL-KEY-z
for alpha keys in the range a-z. Other keys are generally spelled out, for exampleSDL-KEY-PAGEDOWN
,SDL-KEY-F1
orSDL-KEY-NUMLOCK
.MOD
is current state of the keyboard modifiers as explained in SDL_GetModState. One or more of:SDL-KEY-MOD-NONE, :SDL-KEY-MOD-LSHIFT, :SDL-KEY-MOD-RSHIFT, :SDL-KEY-MOD-LCTRL, :SDL-KEY-MOD-RCTRL, :SDL-KEY-MOD-LALT, :SDL-KEY-MOD-RALT, :SDL-KEY-MOD-LMETA, :SDL-KEY-MOD-RMETA, :SDL-KEY-MOD-NUM, :SDL-KEY-MOD-CAPS, :SDL-KEY-MOD-MODE or :SDL-KEY-MOD-RESERVED
.UNICODE
is the translated character. The unicode field is only used when UNICODE translation is enabled with SDL_EnableUNICODE. If unicode is non-zero then this is the UNICODE character corresponding to the keypress. If the high 9 bits of the character are 0, then this maps to the equivalent ASCII character.Mouse Motion Event
(:MOUSE-MOTION-EVENT (:STATE STATE :X X :Y Y :X-REL X-REL :Y-REL Y-REL) &BODY BODY)
A
MOUSE-MOTION-EVENT
event occurs when the mouse moves within the application window or when SDL-WARP-MOUSE is called. Both the absoluteX
andY
and relativeX-REL
andY-REL
coordinates are reported along with the current button stateSTATE
. The button state can be interpreted using SDL-BUTTON, see SDL-GET-MOUSE-STATE.If the cursor is hidden using SDL-SHOW-CURSOR and the input is grabbed using SDL-WM-GRAB-INPUT, then the mouse will give relative motion events even when the cursor reaches the edge of the screen. This is currently only implemented on Windows and Linux/Unix-alikes.
STATE
is the current button state.X
is theX
coordinates of the mouseY
is theY
coordinates of the mouseX-REL
is the relative motion in theX
directionY-REL
is the relative motion in theY
directionMouse Button Events
(:MOUSE-BUTTON-DOWN-EVENT (:BUTTON BUTTON :STATE STATE :X X :Y Y) &BODY BODY) (:MOUSE-BUTTON-UP-EVENT (:BUTTON BUTTON :STATE STATE :X X :Y Y) &BODY BODY)
When a mouse button press or release is detected the number of the button pressed (from 1 to 255, with 1 usually being the left button and 2 the right) is placed into
BUTTON
, the position of the mouse when this event occured is stored in theX
and theY
fields.Mouse wheel events are reported as buttons 4 (up) and 5 (down). Two events are generated i.e. a
SDL-MOUSE-BUTTON-DOWN
followed by aSDL-MOUSE-BUTTON-UP
event.
BUTTON
is the mouse button index which is one ofSDL-BUTTON-LEFT
,SDL-BUTTON-MIDDLE
,SDL-BUTTON-RIGHT
,SDL-BUTTON-WHEELUP
orSDL-BUTTON-WHEELDOWN
.STATE
is the state of the button which isSDL-PRESSED
orSDL-RELEASED
.X
is theX
coordinates of the mouse at press/release time.Y
is theY
coordinates of the mouse at press/release time.Joystick Motion Event
(:JOY-AXIS-MOTION-EVENT (:WHICH WHICH :AXIS AXIS :VALUE VALUE) &BODY BODY)
A JOY-AXIS-MOTION-EVENT event occurs whenever a user moves an axis on the joystick.
WHICH
is the joystick device index. The index of the joystick that reported the event.AXIS
is the joystick axis indexVALUE
is the current position of the axis (range: -32768 to 32767)Joystick Button Events
(:JOY-BUTTON-DOWN-EVENT (:WHICH WHICH :BUTTON BUTTON :STATE STATE) &BODY BODY) (:JOY-BUTTON-UP-EVENT (:WHICH WHICH :BUTTON BUTTON :STATE STATE) &BODY BODY)
A
JOY-BUTTON-DOWN-EVENT
orJOY-BUTTON-DOWN-EVENT
event occurs whenever a user presses or releases a button on a joystick.
WHICH
is the index of the joystick that reported the event.BUTTON
is the button pressed that caused the event.STATE
is the current state of the button and is eitherSDL-PRESSED
orSDL-RELEASED
.Joystick Hat Motion Event
(:JOY-HAT-MOTION-EVENT (:WHICH WHICH :HAT HAT :VALUE VALUE) &BODY BODY)
A
JOY-HAT-MOTION-EVENT
event occurs when ever a user moves a hat on the joystick.
WHICH
is the index of the joystick that reported the event.HAT
is the index of the hat that generated the event.VALUE
is the current position of the hat, a bitwise OR'd combination of the following valuesSDL-HAT-CENTERED
,SDL-HAT-UP
,SDL-HAT-RIGHT
,SDL-HAT-DOWN
,SDL-HAT-LEFT
,SDL-HAT-RIGHT-UP
,SDL-HAT-RIGHT-DOWN
,SDL-HAT-LEFT-UP
andSDL-HAT-LEFT-DOWN
.Joystick Ball Motion Event
(:JOY-BALL-MOTION-EVENT (:WHICH WHICH :BALL BALL :X-REL X-REL :Y-REL Y-REL) &BODY BODY)
A
JOY-BALL-MOTION-EVENT
event occurs when a user moves a trackball on the joystick. Trackballs only return relative motion.
WHICH
is the index of the joystick that reported the event.BALL
is the index of the trackball that generated the event.X-REL
is the change inX
position of the ball since it was last polled (last cycle of the event loop).Y-REL
is the change inY
position of the ball since it was last polled (last cycle of the event loop).Quit Event
(:QUIT-EVENT () &BODY BODY)
If
QUIT-EVENT
is filtered or ignored then it is impossible for the user to close the window. IfQUIT-EVENT
is accepted and returnsT
then the application window will be closed. Note: Screen updates will continue to report success even though the application is no longer visible. IfQUIT-EVENT
is accepted and returnsNIL
then the application window will not be closed. SDL_QUIT-REQUESTED will return non-zero if aQUIT-EVENT
event is pending.SDL Window Resize Event
(:VIDEO-RESIZE-EVENT (:W W :H H) ...)
When
SDL-RESIZABLE
is passed as a flag to WINDOW, the user is allowed to resize the application window. When the window is resized aVIDEO-RESIZE-EVENT
event is reported, with the new window width and height values stored inW
andH
respectively. When anVIDEO-RESIZE-EVENT
event is recieved the window should be resized to the new dimensions using WINDOW.
W
is the window width as anINTEGER
.H
is the window height as an INTERGER`.SDL Window Expose Event
(:VIDEO-EXPOSE-EVENT () ...)
VIDEO-EXPOSE-EVENT
is triggered when the screen has been modified outside of the application, usually by the window manager, and needs to be redrawn.System Window Events
(:SYS-WM-EVENT () ...)
The system window manager event contains a pointer to system-specific information about unknown window manager events. If this event is enabled using SDL-EVENT-STATE, it will be generated whenever unhandled events are received from the window manager. This can be used, for example, to implement cut-and-paste in your application. If you want to obtain system-specific information about the window manager, you can fill in the version member of a
SDL-SYS-WM-INFO
structure using SDL-VERSION, and pass it to the function: SDL-GET-WM-INFOUser
(:USER-EVENT (:TYPE TYPE :CODE CODE :DATA1 DATA1 :DATA2 DATA2) ...)
USER-EVENT
is unique in that it is created by the user not SDL.USER-EVENT
can be pushed onto the event queue using PUSH-USER-EVENT. The contents of the event are completely up to the programmer.
TYPE
is a value fromSDL-USER-EVENT to
(- SDL-NUM-EVENTS 1)` inclusive.CODE
is a user defined event codeDATA1
is a user defined data pointerDATA2
is a user defined data pointerSyntax
(WITH-EVENTS (TYPE) (:ACTIVE-EVENT (:GAIN GAIN :STATE STATE) ... ) (:KEY-DOWN-EVENT (:STATE STATE :SCANCODE SCANCODE :KEY KEY :MOD MOD :UNICODE UNICODE) ... ) (:KEY-UP-EVENT (:STATE STATE :SCANCODE SCANCODE :KEY KEY :MOD MOD :UNICODE UNICODE) ...) (:MOUSE-MOTION-EVENT (:STATE STATE :X X :Y Y :X-REL X-REL :Y-REL Y-REL) ...) (:MOUSE-BUTTON-DOWN-EVENT (:BUTTON BUTTON :STATE STATE :X X :Y Y) ...) (:MOUSE-BUTTON-UP-EVENT (:BUTTON BUTTON :STATE STATE :X X :Y Y) ...) (:JOY-AXIS-MOTION-EVENT (:WHICH WHICH :AXIS AXIS :VALUE VALUE) ...) (:JOY-BUTTON-DOWN-EVENT (:WHICH WHICH :BUTTON BUTTON :STATE STATE) ...) (:JOY-BUTTON-UP-EVENT (:WHICH WHICH :BUTTON BUTTON :STATE STATE) ...) (:JOY-HAT-MOTION-EVENT (:WHICH WHICH :HAT HAT :VALUE VALUE) ...) (:JOY-BALL-MOTION-EVENT (:WHICH WHICH :BALL BALL :X-REL X-REL :Y-REL Y-REL) ...) (:VIDEO-RESIZE-EVENT (:W W :H H) ...) (:VIDEO-EXPOSE-EVENT () ...) (:SYS-WM-EVENT () ...) (:USER-EVENT (:TYPE TYPE :CODE CODE :DATA1 DATA1 :DATA2 DATA2) ...) (:QUIT-EVENT () ... T) (:IDLE () ... ))
[Macro]
with-font (font font-definition) declaration* statement* => result
Sets
*DEFAULT-FONT*
to a new BITMAP-FONT inFONT
within the scope ofWITH-FONT
. FreesFONT
whenWITH-FONT
goes out of scope, and sets*DEFAULT-FONT* to
NIL.Example
(WITH-FONT (new-font *font-8x8*) (DRAW-CHARACTER-SHADED-* "Hello World!" 0 0 F-COLOR B-COLOR))
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Macro]
with-foreign-color-copy (struct color) declaration* statement* => result
Creates and assigns a new foreign
SDL_Color
toSTRUCT
. Then copies the color components fromCOLOR
intoSTRUCT
.STRUCT
is free'd when out of scope.
[Macro]
with-init flags declaration* statement* => result
WITH-INIT
is a convenience macro that will attempt to initialise the SDL library and SDL subsystems prior to executing the forms inBODY
. Upon exitWITH-INIT
will uninitialize the SDL library and SDL subsystems.The lispbuilder-sdl initialization routines are somewhat complicated by the fact that a Lisp development environment will load a foreign library once but then initialise and uninitialise the library multiple times. A C/C++ development environment will open and then close a library after each execution, freeing all resources left hanging by incomplete or buggy uninitialise functions. C libraries may therefore frequently core dump in a Lisp environment when resources are not feed properly prior to the library being reinitialized.
LISPBUILDER-SDL provides functionality affording the programmer a finer granularity of control of the initialisation/uninitialisation of foreign libraries. The fuctions that provide these capabilities are as follows:
- INITIALIZE-ON-STARTUP
- QUIT-ON-EXIT
- LIST-SUB-SYSTEMS
- RETURN-SUB-SYSTEMS-OF-STATUS
- INIT-SUB-SYSTEMS
- QUIT-SUB-SYSTEMS
- INIT-SDL
- QUIT-SDL
Defaults
- By default
WITH-INIT
will only initialise theSDL-INIT-VIDEO
SDL subsystem. Additional SDL subsystems can be initialized by calling INITIALIZE-ON-STARTUP.- By default
WITH-INIT
will only uninitialise theSDL-INIT-VIDEO
SDL subsystem. Additional SDL subsystems can be uninitialized by calling QUIT-ON-EXIT.Initialisation/Uninitialisation of the SDL library
The SDL library is initialised only:
- If the library is not yet already initialized, or
- SDL-INIT-ON-STARTUP is
T
.The SDL library is uninitialised only:
- When SDL-QUIT-ON-EXIT is
T
.Initialisation/Uninitialisation of external libraries
Hooks are provided to allow external libraries to be initialized or uninitialised automatically following the initialisation or uninitialisation of the SDL library.
To initialise an external library, push a function that initialises the external library onto
*EXTERNAL-INIT-ON-STARTUP*
. The function must take no arguments. For example:(defun init-ttf () (if (is-init) t (sdl-ttf-cffi::ttf-init))) (pushnew 'init-ttf sdl:*external-init-on-startup*)
To uninitialise an external library, push a function that uninitialises the external library onto
*EXTERNAL-QUIT-ON-EXIT*
. The function must take no arguments. For example:(defun quit-ttf () (if (is-init) (sdl-ttf-cffi::ttf-quit))) (pushnew 'quit-ttf sdl:*external-quit-on-exit*)
Parameters
FLAGS
may be one or more of:SDL-INIT-EVERYTHING
,SDL-INIT-VIDEO
,SDL-INIT-CDROM
,SDL-INIT-AUDIO
,SDL-INIT-TIMER
,SDL-INIT-JOYSTICK
,SDL-INIT-EVENTTHREAD
andSDL-INIT-NOPARACHUTE
. Note: WhenFLAGS
is set byWITH-INIT
, subsequent calls to INITIALIZE-ON-STARTUP and QUIT-ON-EXIT are ignored.WITH-INIT
will only initialize and uninitialize the subsytems specified inFLAGS
.Example
(with-init (SDL-INIT-VIDEO SDL-INIT-CDROM SDL-INIT-AUDIO) ....) (with-init () (INITIALIZE-ON-STARTUP SDL-INIT-VIDEO SDL-INIT-CDROM SDL-INIT-AUDIO) (QUIT-ON-EXIT SDL-INIT-VIDEO SDL-INIT-CDROM SDL-INIT-AUDIO) ....)
[Macro]
with-locked-surface (var &optional surface) declaration* statement* => result
[Macro]
with-locked-surfaces bindings &rest body => result
[Macro]
with-point (var &optional point) declaration* statement* => result
A convenience macro that binds
*DEFAULT-POINT*
toVAR
within the scope ofWITH-POINT
.VAR
must be of typePOINT
. IfPOINT
is notNIL
, thenVAR is set to
POINT`.
[Macro]
with-rectangle (var &optional rectangle free) declaration* statement* => result
A convenience macro that binds
*DEFAULT-RECTANGLE*
toVAR
within the scope ofWITH-RECTANGLE
.VAR
must be of typeRECTANGLE
.VAR
is set toRECTANGLE
whenRECTANGLE
is notNIL
.VAR
is freed whenFREE
isT
.Example
(WITH-RECTANGLE (a-rect (RECTANGLE :x 0 :y 0 :w 100 :h 100)) ...)
[Macro]
with-rectangles bindings declaration* statement* => result
A convenience macro that binds multiple rectangles as per WITH-RECTANGLE.
Example
(WITH-RECTANGLES ((a-rect (RECTANGLE :x 0 :y 0 :w 100 :h 100)) ((b-rect (RECTANGLE :x 0 :y 100 :w 100 :h 100)) ((c-rect (RECTANGLE :x 0 :y 200 :w 100 :h 100))) ...)
[Macro]
with-shape (&optional style) declaration* statement* => result
Draw a polygon of
*DEFAULT-COLOR*
to*DEFAULT-SURFACE*
.Local Methods
A vertex may be added using:
ADD-VERTEX
which accepts anSDL:POINT
, orADD-VERTEX-*
which is the x/y spread versionADD-VERTEX and ADD-VERTEX-* are valid only within the scop of WITH-SHAPE.
Parameters
STYLE
describes the line style used to draw the shape and may be one of:SOLID
,:DASH
, or:POINTS
. Use:SOLID
to draw a single continuous line through the specified waypoints. Use:DASH
to draw a line between alternate waypoint pairs. Use:POINTS
to draw a single pixel at each waypoint.Example
(SDL:WITH-COLOR (COL (SDL:COLOR)) (WITH-SHAPE (:POINTS) (ADD-VERTEX-* 60 40) (ADD-VERTEX-* 160 10) (ADD-VERTEX-* 170 150) (ADD-VERTEX-* 60 150)))
Packages
- Also supported in LISPBUILDER-SDL-GFX
[Macro]
with-surface (var &optional surface free) declaration* statement* => result
[Macro]
with-surface-slots (var &optional surface) declaration* statement* => result
[Macro]
with-surfaces bindings &rest body => result
[Function]
within-range p1 p2 distance => result
Returns true
T
, if the distance between thePOINT
sP1
P2
is <= the distanceDISTANCE
.
[Function]
within-range-* x1 y1 x2 y2 distance => result
Returns true
T
, if the distance between the coordinatesX1
,Y1
andX2
,Y2
is <= the distanceDISTANCE
.
[Generic accessor]
x obj => result
(setf (x obj) value)
[Method]
x (obj font) => result
[Method]
x (obj sdl-surface) => result
Returns the
X
position coordinate ofSURFACE
as anINTEGER
.
[Method]
x (obj rectangle) => result
Returns the
X
position coordinate of the rectangleRECTANGLE
as anINTEGER
.
[Method]
x (obj vector) => result
Returns the
X
coordindate of the pointPOINT
as anINTEGER
.
[Generic accessor]
x2 obj => result
(setf (x2 obj) value)
[Method]
x2 (obj rectangle) => result
Sets the WIDTH of the rectangle
RECTANGLE
to(- X2 X)
[Generic accessor]
y obj => result
(setf (y obj) value)
[Method]
y (obj font) => result
[Method]
y (obj sdl-surface) => result
Returns the
Y
position coordinate ofSURFACE
as anINTEGER
.
[Method]
y (obj rectangle) => result
Returns the
Y
position coordinate of the rectangleRECTANGLE
as anINTEGER
.
[Method]
y (obj vector) => result
Returns the
Y
coordindate of the pointPOINT
as anINTEGER
.
[Generic accessor]
y2 obj => result
(setf (y2 obj) value)
[Method]
y2 (obj rectangle) => result
Returns
(+ Y HEIGHT)
of the rectangleRECTANGLE
.
[Function]
zoom-surface zoomx zoomy &key surface free smooth => result
Returns a new SURFACE scaled to
ZOOMX
andZOOMY
.Parameters
:ZOOMX
andZOOMY
are the scaling factors. A negative scaling factor will flip the corresponding axis. Note: Flipping is only supported with anti-aliasing turned off.:SURFACE
is the surface to rotate SURFACE.:FREE
whenT
will freeSURFACE
.:SMOOTH
whenT
will anti-aliase the new surface.Packages
- Supported in LISPBUILDER-SDL-GFX
- LISPBUILDER-SDL-GFX ignores
:FREE
.
[Method]
(setf (fp (rectangle-array rectangle-array)) value)
[Method]
(setf (fp (rectangle-array color-a)) value)
[Method]
(setf (fp (rectangle-array color)) value)