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.
- lispbuilder-sdl-gfx: 2D graphical effects such as zooming, rotation, circles, polygons and squares, using SDL_gfx
- lispbuilder-sdl-image: Support for multople image formats such as PNG and JPG, using SDL_image
- lispbuilder-sdl-mixer: Sound mixing, using SDL_mixer a multi-channel audio mixer library
- lispbuilder-sdl-ttf: True-type font rendering, using SDL_ttf
- lispbuilder-sdl-net: Networking, using SDL_net a cross-platform, blocking network library
The code comes with a MIT-style license so you can basically do with it whatever you want.
Download shortcut: http://www.balooga.com/lispbuilder/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*aall-integers?alphaalpha-enabled-pany-color-but-thisaverage-fpsbbit-depthbitmap-fontblit-surfacecached-surfacecastcast-all-to-intcast-to-intcatmull-rom-splinechar-heightchar-widthcheck-typesclear-cellclear-clip-rectclear-color-keyclear-displayclip-rectcolorcolorcolor-*color-acolor-keycolor-key-enabled-pcolor=convert-surfaceconvert-to-display-formatcopy-channel-to-alphacopy-pointcopy-surfacecreate-list-if-notcreate-pathcreate-rwops-from-filecreate-surfacedisable-key-repeatdisplay-surfacedistancedistance-*draw-bezierdraw-boxdraw-box-*draw-circledraw-circle-*draw-curvedraw-ellipsedraw-ellipse-*draw-filled-circledraw-filled-circle-*draw-filled-ellipsedraw-filled-ellipse-*draw-filled-piedraw-filled-pie-*draw-filled-polygondraw-filled-trigondraw-fontdraw-font-atdraw-font-at-*draw-hlinedraw-linedraw-line-*draw-piedraw-pie-*draw-pixeldraw-pixel-*draw-polygondraw-rectangledraw-rectangle-*draw-shapedraw-string-shadeddraw-string-shaded-*draw-string-soliddraw-string-solid-*draw-surfacedraw-surface-atdraw-surface-at-*draw-trigondraw-vlineenable-alphaenable-color-keyenable-key-repeatenable-key-repeat-penable-rle-accelenable-unicodeenable-unicode-pfill-surfacefill-surface-*flood-fillflood-fill-*flood-fill-stackflood-fill-stack-*fpframe-ratefreefree-cached-surfacegget-clip-rectget-key-stateget-native-windowget-pointget-positionget-rectangleget-surface-rectheightimage-pimage-type-ofinit-sdlinit-sub-systemsinitialise-default-fontinitialise-fontinitialize-on-startupinitialized-sub-systems-pis-valid-ptrkey-repeat-delaykey-repeat-intervalkey=list-modeslist-sub-systemsload-imagemap-colormap-color-*num-joystickspack-colorpixel-alpha-enabled-ppointpoint-*position-*push-quit-eventpush-user-eventquery-cursorquit-on-exitquit-sdlquit-sub-systemsrrandom+1random-rectangleread-pixelread-pixel-*rectanglerectanglerectangle-*rectangle-from-edgesrectangle-from-edges-*rectangle-from-midpoint-*render-string-shadedrender-string-solidreturn-sub-systems-of-statusrle-accel-enabled-protate-surfacerotate-surface-xyrwopssave-imagesdl-any-formatsdl-async-blitsdl-doublebufsdl-fullscreensdl-get-tickssdl-hw-accelsdl-hw-palettesdl-hw-surfacesdl-init-audiosdl-init-cdromsdl-init-eventthreadsdl-init-everythingsdl-init-joysticksdl-init-noparachutesdl-init-on-startupsdl-init-timersdl-init-videosdl-iyuv-overlaysdl-joystick-namesdl-no-framesdl-openglsdl-pre-allocsdl-quit-on-exitsdl-resizablesdl-rle-accelsdl-rle-accel-oksdl-src-alphasdl-src-color-keysdl-surfacesdl-sw-surfacesdl-uyvy-overlaysdl-wm-grab-inputsdl-yuy2-overlaysdl-yv12-overlaysdl-yvyu-overlayset-cellset-cell-*set-clip-rectset-colorset-color-*set-gl-attributeset-pointset-point-*set-positionset-position-*set-rectangleset-rectangle-*set-surfaceset-surface-*show-cursorsurfacesurface-infotime-scaleto-degreeto-radianupdate-displayupdate-surfaceupdate-surface-*video-dimensionsvideo-driver-namevideo-infovideo-memorywidthwindowwith-bezierwith-colorwith-curvewith-default-fontwith-eventswith-fontwith-foreign-color-copywith-initwith-locked-surfacewith-locked-surfaceswith-pointwith-rectanglewith-rectangleswith-shapewith-surfacewith-surface-slotswith-surfaceswithin-rangewithin-range-*xx2yy2zoom-surfaceThe following table describes the status of LISPBUILDER-SDL on the major Common Lisp implementations:
| Lisp Implementation | LISPBUILDER-SDL Status | Comments | ||
|---|---|---|---|---|
| Win32 | Linux | MacOS | ||
| CLISP v2.38 | Working | Working | Working | |
| Lispworks v4.4.6 Personal | Working | Working | Working | |
| Allegro Express 8.0 | Unknown | Working | Unknown | |
| OpenMCL | NA | NA | Unknown | |
| SBCL | Working | Working | Unknown | |
| CMUCL | Not Working | Not Working | Not Working | |
Current Version: The latest stable version of LISPBUILDER-SDL, together with this documentation can be downloaded from http://www.balooga.com/lispbuilder/lispbuilder-sdl.tgz. The current version is 0.9.5.
Enter the following at the REPL to compile and load the LISPBUILDER-SDL package:
(asdf:operate 'asdf:load-op :lispbuilder-sdl)
Enter the following at the REPL to compile and load the examples included in the LISPBUILDER-SDL-EXAMPLES package:
(asdf:operate 'asdf:load-op :lispbuilder-sdl-examples)
Run the examples by entering any of the following at the REPL:
(SDL-EXAMPLES:BEZIER) (SDL-EXAMPLES:BMP-SAMPLE) (SDL-EXAMPLES:CIRCLE-1) (SDL-EXAMPLES:CIRCLE-2) (SDL-EXAMPLES:CIRCLE-3) (SDL-EXAMPLES:CIRCLE-4) (SDL-EXAMPLES:CIRCLE-5) (SDL-EXAMPLES:DISTANCE-2D) (SDL-EXAMPLES:FLOOD-FILL) (SDL-EXAMPLES:INBUILT-FONTS) (SDL-EXAMPLES:LINE-DRAWING) (SDL-EXAMPLES:MANDELBROT) (SDL-EXAMPLES:METABALLS) (SDL-EXAMPLES:MOUSE-2D) (SDL-EXAMPLES:MOUSE-PAINTER) (SDL-EXAMPLES:PIXELS-1) (SDL-EXAMPLES:PIXELS-2) (SDL-EXAMPLES:PIXELS-3) (SDL-EXAMPLES:PIXELS-4) (SDL-EXAMPLES:POINTS-AND-LINES) (SDL-EXAMPLES:RANDOM-RECTS) (SDL-EXAMPLES:RANDOM-BOX-1) (SDL-EXAMPLES:RANDOM-BOX-2) (SDL-EXAMPLES:RANDOM-BOX-3) (SDL-EXAMPLES:RANDOM-BOX-4) (SDL-EXAMPLES:RECURSIVE-RECTS) (SDL-EXAMPLES:SETUP-AND-DRAW) (SDL-EXAMPLES:SIMPLE-FONT-DEMO) (SDL-EXAMPLES:STROKE) (SDL-EXAMPLES:VERTICES) (SDL-EXAMPLES:WIDTH-HEIGHT)
LISPBUILDER-SDL is distributed under the MIT-style license.
Functions and symbols exported from the LISPBUILDER-SDL package are
accessible from the LISPBUILDER-SDL: prefix or the
shorter form SDL: nickname.
The cffi/ directory contains the raw CFFI bindings.
These bindings may be automatically generated by SWIG or created by hand.
CFFI translation functions perform simple low-level conversions for example,
converting Lisp strings to C strings and back (see cffi-translate.lisp).
All functions in cffi/ accept and return foreign objects only.
The base/ directory defines wrappers over the functions in cffi/ .
The functions in base/ accept keyword arguments and accept NIL instead
of CFFI:NULL-POINTER where appropriate. Generally functions in base/ accept and return foreign
objects. base/ may perform some type checks (IS-VALID-PTR SURFACE) but
this layer is meant to be lean. Someone who implements a graphics engine
might use this layer instead of sdl/ if speed is a concern.
There are no fancy drawing primitives in this layer.
The sdl/ directory defines the abstractions over cffi/ and base/.
Foreign objects are passed around sdl/ neatly wrapped in CLOS objects, using TRIVIAL-GARBAGE for
automatic garbage collection (minimize foreign objects being left on the
heap). There are no functions in sdl/ that accept or return foreign
objects (with the exception of the functions that create the CLOS
wrapper objects) Functions in sdl/ call down into
cffi/ and base/ as appropriate. All LISPBUILDER-SDL symbols available in
SDL: are exported from sdl/, with symbols imported into sdl/ from
cffi/ and base/ as appropriate (e.g. WITH-EVENTS). All drawing primitives are
defined in this layer; circles, rectangles, lines, triangles, with-bezier etc.
Functions in sdl/ implement a lot of type checking.
An example of the difference between base/ and sdl/ is
WITH-RECTANGLE. The WITH-RECTANGLE macro in base/ creates and destroys a foreign
SDL_Rect. The WITH-RECTANGLE macro in sdl/ will create and destroy
a RECTANGLE object.
The SDL library and SDL subsystems must be initialized prior to use. This is handled automatically when using the macro WITH-INIT. WITH-INIT also uninitialises the SDL library upon exit. More detailed information on the LISPBUILDER-SDL initialisation process can be found in the documentation for WITH-INIT.
(WITH-INIT (SDL-INIT-VIDEO) ...)
A window must be created to display any kind of output. A window of a specific pixel width and height is created using the function WINDOW. WINDOW takes additional keyword parameters to set the requested video mode, color bit depth, the window title and the icon title. More detailed information can be found in in the documentation for WINDOW.
(WITH-INIT (SDL-INIT-VIDEO) (WINDOW 320 240))
LISPBUILDER-SDL provides the WITH-EVENTS macro that simplifies the game loop and handling SDL events. Event handlers are defined by specifying the event type a well as an optional list of fields specific to that event.
More detailed information on all SDL events (Keyboard events, Joystick events, User events etc.) can be found in in the documentation for WITH-EVENTS.
For example, to process the current x and y mouse position when the mouse is moved:
(:MOUSE-MOTION-EVENT (:X X-POS :Y Y-POS) ...)
Or to process the x and y relative mouse positions when the mouse is moved:
(:MOUSE-MOTION-EVENT (:X-REL relative-x :Y-REL relative-y) ...)
The only event that must be handled with WITH-EVENTS is the :QUIT-EVENT. If :QUIT-EVENT is ignored then it is impossible for the user to close the SDL Window or exit the game loop.
(WITH-EVENTS ()
(:QUIT-EVENT () T)
(:MOUSE-MOTION-EVENT (:X mouse-x :Y mouse-y)
...))
In addition to handling events, WITH-EVENTS also manages the game loop. Introducing the :IDLE event. :IDLE, although not technically an actual event, is executed once per game loop after all events have been processed in the SDL event queue. :IDLE is where the user can place code that needs to be executed once per game loop and that is not 'event' driven. This code may involve updating world physics, updating the state of game objects and rendering sprites to the display.
(WITH-EVENTS ()
(:QUIT-EVENT () T)
(:MOUSE-MOTION-EVENT (:X mouse-x :Y mouse-y)
...)
(:IDLE ()
(UPDATE-DISPLAY)))
WITH-EVENTS can also limit execution of the the game loop to a specific number
of iterations a second using FRAME-RATE. This effectively limits the number of
frames displayed per second. To set the frame rate to 60 frames per second,
(SETF (SDL:FRAME-RATE) 60). To unlock the frame rate effectively running the game loop as fast
as the CPU will allow set the FRAME-RATE to NIL, (SETF (SDL:FRAME-RATE) NIL)
The SDL display surface needs to be updated once per game loop, as described in the section SDL Display.
(SETF (FRAME-RATE) 30) (WITH-EVENTS () ...)
LISPBUILDER-SDL supports the SDL RECTANGLE and COLOR primitives. These are described below.
A new rectangle is created by the function RECTANGLE. The function RECTANGLE-FROM-EDGES will create a new rectangle from the specified top left and bottom right coordinates. The function RECTANGLE-FROM-MIDPOINT-* will create a new rectangle from midpoint.
The macros WITH-RECTANGLE and WITH-RECTANGLEs will create a new rectangle and free this rectangle when it goes out of scope.
The rectangle position and width and height can be inspected and modified using the following functions: X, Y, WIDTH and HEIGHT. X2 and Y2 will return the (+ x width) and (+ y height) of the rectangle respectively.
Additional functions that operate on rectangles are as follows:
A new SDL color is created by COLOR, returning either a new RGB or RGBA color.
RGB/A color componets can be manipulated using the functions R, G, B, A, SET-COLOR and SET-COLOR-*. Two colors may be compared using COLOR=.
Functions that accept a color parameter will most likely bind color to *DEFAULT-COLOR* when unspecified. The macro WITH-COLOR will bind a color to *DEFAULT-COLOR* within the scope of this macro. When *DEFAULT-COLOR* is bound to a color, all subsequent drawing functions will use this implied color while it remains in scope.
Additional functions that operate on colors are as follows:
LISPBULDER-SDL contains several predefined colors; *BLACK*, *WHITE*, *RED*, *GREEN*, *BLUE*, *YELLOW*, *CYAN*, *MAGENTA*.
LISPBUILDER-SDL provides low-level drawing support for several primitives. Most primitives can be drawn with or without alpha transparency. In addition, the filled primitives can be drawn with a single pixel outline (or stroke) that is a different color to the fill color.
Drawing functions require a target surface and color. LISPBUILDER-SDL uses defaults for both target surface (*DEFAULT-SURFACE*) and color (*DEFAULT-COLOR*) unless these are otherwise specified by the user. The macros with-surface, and with-surfaces will bind a surface to *DEFAULT-SURFACE* within the scope these macros. For example, instead of specifying a target surface for each draw-* function a user may bind *DEFAULT-SURFACE* to a surface once and subsequent draw-* functions will use this implied surface while it remains in scope.
(DRAW-POINT (sdl:point :x x1 :y y1) :surface a-surface :color *white*) (DRAW-POINT (sdl:point :x x2 :y y2) :surface a-surface :color *white*) (DRAW-POINT (sdl:point :x x3 :y y3) :surface a-surface :color *white*) (DRAW-POINT (sdl:point :x x4 :y y4) :surface a-surface :color *white*)
Now, we use WITH-SURFACE to bind a surface to *DEFAULT-SURFACE*.
(WITH-SURFACE (a-surface) (DRAW-POINT (sdl:point :x x1 :y y1) :color *white*) (DRAW-POINT (sdl:point :x x2 :y y2) :color *white*) (DRAW-POINT (sdl:point :x x3 :y y3) :color *white*) (DRAW-POINT (sdl:point :x x4 :y y4) :color *white*))
We can use WITH-COLOR to bind *DEFAULT-COLOR* to *WHITE*:
(WITH-SURFACE (a-surface)
(WITH-COLOR (*white*)
(DRAW-POINT (sdl:point :x x1 :y y1))
(DRAW-POINT (sdl:point :x x2 :y y2))
(DRAW-POINT (sdl:point :x x3 :y y3))
(DRAW-POINT (sdl:point :x x4 :y y4)))
Finally, if the target surface is the display then *WITH-SURFACE* is not required as :SURFACE when NIL will be bound to *DEFAULT-DISPLAY* as a default. So the above code can be shortened as follows:
(WITH-COLOR (*white*) (DRAW-POINT (sdl:point :x x1 :y y1)) (DRAW-POINT (sdl:point :x x2 :y y2)) (DRAW-POINT (sdl:point :x x3 :y y3)) (DRAW-POINT (sdl:point :x x4 :y y4)))
LISPBUILDER-SDL contains several bitmap fonts of different sizes and faces (italics/bolded). See INITIALISE-FONT for the complete list of built-in fonts.
Fonts are initialised using INITIALISE-DEFAULT-FONT, or INITIALISE-FONT. The resouces allocated to a font are freed by FREE-FONT. A font must be initialised prior to use.
LISPBUILDER-SDL provides the macros WITH-DEFAULT-FONT and WITH-FONT for the above functions that bind *DEFAULT-FONT* to font within the scope of the macro.
LISPBUILDER-SDL supports the rendering of colored text over a transparent background (Solid rendering), and the rendering of colored text over a solid colored background (Shaded rendering). Text may be left, right or center justified. Text can be drawn directly to a target surface using DRAW-STRING-SOLID and DRAW-STRING-SHADED. Text can be rendered to a new surface of character height and string width using RENDER-STRING-SOLID and RENDER-STRING-SHADED. This new surface may be optionally cached in the font object. A cached surface font can be accessed using CACHED-SURFACE) and can be blitted to a target surface using DRAW-FONT.
The font rendering functions accept a font object. This font parameter is bound to *DEFAULT-FONT* when unspecified. The function INITIALISE-DEFAULT-FONT and the macros WITH-FONT and WITH-DEFAULT-FONT will bind a font to *DEFAULT-FONT* within the scope of these macros. When *DEFAULT-FONT* is bound to a font, all subsequent font drawing or font rendering functions will use this implied font while it remains in scope.
The following methods also apply to fonts; X, Y, WIDTH, HEIGHT, Returns the width of the cached [SURFACE](#surface) when `OBJ` is a [FONT](#font).
(WITH-COLOR (*WHITE*)
(WITH-FONT (*FONT-8x8*)
(DRAW-STRING-SOLID-* "Font is 8x8." 10 10)
(WITH-FONT (*FONT-10x20*)
(DRAW-STRING-SOLID-* "Font is 10x20." 10 20))
(DRAW-STRING-SOLID-* "Font is 8x8 again." 10 40)))
An SDL surface, SURFACE, represents an area of graphical memory that can be drawn or rendered to, for example the video framebuffer or an image that is loaded from disk.
A surface is created:
Functions that accept a surface parameter will most likely bind surface to *DEFAULT-SURFACE* when unspecified. The macros WITH-SURFACE and WITH-SURFACES will bind a surface to *DEFAULT-SURFACE* within the scope of these macro. When *DEFAULT-SURFACE* is bound to a surface, all subsequent drawing functions will use this implied surface while it remains in scope.
A surface can be explicitely freed by calling FREE-SURFACE.
BMP images are loaded from disk using LOAD-IMAGE. Support for additional image formats is provided in the LISPBUILDER-SDL-IMAGE package. A surface is saved to disk as a BMP image using SAVE-IMAGE.
(DRAW-SURFACE (LOAD-IMAGE "sdl.bmp")
:surface *default-display*)
A SURFACE stores its own position X/Y coordinates. These coordinates can be inspected and modified using the following functions: X, Y, WIDTH and HEIGHT.
Additional functions and macros that manage surface coordinates are as follows:
The functions BLIT-SURFACE and DRAW-SURFACE will blit or draw a source surface onto a destination surface using the position coordinates stored in the source surface. DRAW-SURFACE-AT will draw the source surface at a specified position.
The composition rules that determine how the source surface is composed over the destination surface are described in the description of BLIT-SURFACE. FILL-SURFACE fill will the target surface with a single color. Drawing Primitives describes how *DEFAULT-SURFACE* is used when calling blitting operations.
Use SET-COLOR-KEY, CLEAR-COLOR-KEY and SET-ALPHA to modify the key color and alpha transparency properties of a surface after the surface has been created.
Set a clipping rectangle to limit the draw area on a destination surface. The clipping rectangle for a surface is manipulated using GET-CLIP-RECT and SET-CLIP-RECT. When this surface is the destination of a blit, only the area within the clip rectangle will be drawn into.
Set a cell rectangle to limit the surface area on the source surface. The cell rectangle for a surface is manipulated using CLEAR-CELL and SET-CELL. When this surface is the source of a blit, only the areas within the cell rectangle will be used. The cell is useful when only a small area of the source surface needs to be blitted to the destination surface. For example a sequence of images composed into a single sprite sheet and only the current frame of animation is to be drawn to the display at any one time.
The functions UPDATE-DISPLAY and UPDATE-SURFACE update the SDL display surface (or OpenGL context) and general SDL surfaces respectively.
The SDL display surface must be updated at least once each game loop using the function UPDATE-DISPLAY. This function will call SDL-GL-SWAP-BUFFERS to update the OpenGL display, or SDL-FLIP to update the SDL surface depending on the current *OPENGL-CONTEXT*. The display can be filled with a background color using CLEAR-DISPLAY.
The properties of an SDL surface can be queried using SURFACE-INFO. The properties of the SDL display and video hardware can be queried using VIDEO-INFO. The screen resolutions supported by a particular set of video flags can be retrieved using LIST-MODES. A pointer to the native SDL window can be retrieved using GET-NATIVE-WINDOW. The name of the video driver can be retrieved as a STRING using VIDEO-DRIVER-NAME.
The the current state of the cursor is returned using QUERY-CURSOR, and is set using SHOW-CURSOR.
Putting this all together, we can write short example showing a white rectangle that follows the users mouse movements within an SDL Window. Exit the example by closing the window or pressing the Esc key on the keyboard.
;; Initialise SDL and the Video subsystem
(WITH-INIT (SDL-INIT-VIDEO)
(WINDOW 320 240) ; Open a window, 320 x 240
(SETF (FRAME-RATE) 30) ; Lock the frame rate to 30 fps
(WITH-EVENTS ()
(:QUIT-EVENT () T) ; Absolutely have to handle the :QUIT-EVENT
(:KEY-DOWN-EVENT (:KEY key) (WHEN (KEY= key :SDL-KEY-ESCAPE) (PUSH-QUIT-EVENT)))
(:MOUSE-MOTION-EVENT (:X mouse-x :Y mouse-y)
(CLEAR-DISPLAY *black*)
;; Draw the box with center at the mouse x/y coordinates.
(DRAW-BOX-* (- mouse-x (/ 50 2)) (- mouse-y (/ 50 2)) 50 50 :color *white*))
(:IDLE ()
(UPDATE-DISPLAY))))
...
[Special variable]
*black*
RGBCOLOR black.
[Special variable]
*blue*
RGBCOLOR blue.
[Special variable]
*cyan*
RGBCOLOR cyan.
[Special variable]
*default-color*
Functions that accept the
KEYword parameterCOLORwill most likely bind to the symbol*DEFAULT-COLOR*by default ifCOLORis 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
KEYword parameterFONTwill most likely bind to the symbol*DEFAULT-FONT*by default ifFONTis 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-SDLpackages.
[Special variable]
*default-position*
[Special variable]
*default-rectangle*
[Special variable]
*default-surface*
Functions that accept the
KEYword parameter:SURFACEwill most likely bind to the symbol*DEFAULT-SURFACE*by default ifSURFACEis 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*
RGBCOLOR green.
[Special variable]
*magenta*
RGBCOLOR magenta.
[Special variable]
*opengl-context*
The symbol
*OPENGL-CONTEXT*isTwhen an OpenGL display context is created, andNILotherwise. UPDATE-SURFACE will swap theOPENGLbuffers when*OPENGL-CONTEXT*isT, and swap theSDLvideo buffers otherwise.
[Special variable]
*red*
RGBCOLOR red.
[Special variable]
*sdl-initialized*
[Special variable]
*white*
RGBCOLOR white.
[Special variable]
*yellow*
RGBCOLOR yellow.
[Generic accessor]
a color => result
(setf (a color) value)
Returns the alpha color component of the object.
[Macro]
all-integers? &rest values => result
Returns
Tif all values areINTEGERS.
[Generic accessor]
alpha surface => result
(setf (alpha surface) value)
[Specialized accessor]
alpha (surface sdl-surface) => result
(setf (alpha (surface sdl-surface)) value)
[Generic accessor]
alpha-enabled-p surface => result
(setf (alpha-enabled-p surface) value)
[Specialized accessor]
alpha-enabled-p (surface sdl-surface) => result
(setf (alpha-enabled-p (surface sdl-surface)) value)
[Generic function]
any-color-but-this color => result
Returns a new color that is different to
COLOR.
[Function]
average-fps => 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)
Returns the blue color component of the object.
[Function]
bit-depth &optional surface => result
Returns the number of bytes per pixel, or bpp, of
SURFACE.
[Standard class]
bitmap-font
The
BITMAP-FONTobject 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
[Function]
blit-surface source &optional surface => result
Performs a fast blit of the
SOURCEsurface to the destinationSURFACE. The area defined by theSOURCEcell 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 sdl-font => result
(setf (cached-surface sdl-font) value)
[Specialized accessor]
cached-surface (sdl-font sdl-font) => result
(setf (cached-surface (sdl-font sdl-font)) value)
[Macro]
cast type value => result
Coerces the value
VALUEto the typeTYPE.
[Macro]
cast-all-to-int &rest values => result
Casts the values in
RESTtoFIXNUMs.
[Macro]
cast-to-int value => result
Casts the value
VALUEto aFIXNUM.
[Function]
catmull-rom-spline val v0 v1 v2 v3 => result
[Generic function]
char-height bitmap-font => result
[Method]
char-height (bitmap-font bitmap-font) => result
[Generic function]
char-width bitmap-font => result
[Method]
char-width (bitmap-font bitmap-font) => result
[Macro]
check-types type &rest rest => result
Performs
CHECK-TYPEon items in rest.
[Function]
clear-cell &key surface index => result
Sets the
CELLatINDEXto 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
SURFACEusing colorCOLOR.SURFACEis bound to*DEFAULT-DISPLAY*if unspecified. The display is updated whenUPDATEisT.
[Generic accessor]
clip-rect surface => result
(setf (clip-rect surface) value)
[Specialized accessor]
clip-rect (surface sdl-surface) => result
(setf (clip-rect (surface sdl-surface)) value)
[Standard class]
color
A color containing
INTEGERRed, Green and Blue components. Free using FREE.
[Function]
color &key r g b a => result
Returns a new
RGBCOLOR from the specifiedRed,Green, andBlue components. Returns a newRGBACOLOR-A from the specifiedRed,Green,Blue, andAlpha components.
[Generic function]
color-* color => result
Returns the
RGB/Acolor 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
INTEGERRed, 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)
[Specialized accessor]
color-key-enabled-p (surface sdl-surface) => result
(setf (color-key-enabled-p (surface sdl-surface)) value)
[Generic function]
color= color1 color2 => result
Returns
Tif theRGB<->RGBorRGBA<->RGBAcolor components inCOLOR1andCOLOR2match. ReturnsNILotherwise.
[Function]
convert-surface &key surface to-surface enable-alpha enable-color-key free inherit type => result
Converts
:SURFACEand 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-KEYor:ENABLE-ALPHAto 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
TYPEis:SW. Will attempt to create the new surface in video menory whenTYPEis: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
:INHERITisNIL.Use
:FREEto 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*:INHERITisNIL`.Use
:ENABLE-COLOR-KEYor:ENABLE-ALPHAto 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-ALPHAto enable the pixel alpha component (alpha mask of 0xFF) for the new surface.Use
:FREEto 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-KEYor:ALPHAto 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
TYPEis:SW. Will attempt to create the new surface in video menory whenTYPEis: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
:FILLisNIL. The new surface will be filled with the color key of the old surface (if available) unless:COLOR-KEY-FILLisNIL.The new surface will inherit the pixel, alpha and color key components of the source, unless
:INHERITisNIL.Use
:FREEto delete the sourceSURFACE.
[Function]
create-list-if-not var => result
If
VARis not already a list, then returns(LIST VAR).
[Function]
create-path filename &optional path => result
Creates a new path from
FILENAMEandPATH.
[Function]
create-rwops-from-file filename => result
Creates and returns a new
RWOPSobject from the file at locationFILENAME.
Creates and returns a new
SURFACEwith the dimensionsWIDTHandHEIGHT.
:COLOR-KEYsets the color key of the surface and enables color-keying.
:ALPHAsets the surface alpha transparency and enables alpha blending. This allows a pixel color ofRGBwith the surfaceA.
:PIXEL-ALPHAenables a pixel alpha component (alpha mask of 0xFF) on the new surface. This allows a pixel color ofRGBA.
:RLE-ACCELenables RLE blit acceleration.
:BPPis the pixel depth of the surface, and my be 8, 16, 24 or 32.
:TYPEattempts to create theSURFACEin video memory when:HW, and in system memory when:SW
:Xand:Yare the positions of theSURFACEin 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
POINTsP1andP2.
[Function]
distance-* x1 y1 x2 y2 => result
Returns the distance between the coordinates
X1,Y1andX2,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
:VERTICESis a list of control points of POINT.:STYLEdescribes the line style used to draw the curve and may be one of:SOLID,:DASH, or:POINTS. Use:SOLIDto draw a single continuous line through the specified waypoints. Use:DASHto draw a line between alternate waypoint pairs. Use:POINTSto draw a single pixel at each waypoint.:SEGMENTSis 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.:SURFACEis the target SURFACE.:COLORis the line color, of COLOR or COLOR-A.:CLIPPINGwhen left as the default valueTwill 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 leaveCLIPPINGasT.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
:STYLEis ignored inLISPBUILDER-SDL-GFX.
[Function]
draw-box rect &key clipping surface color stroke-color alpha => result
See DRAW-BOX-*.
Parameters
RECTis 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
XandYare theINTEGERcoordinates of the top-left corner of the rectangle.WandHare the width and height of the rectangle, of typeINTEGER.:SURFACEis the target SURFACE.:COLORis the line color, of COLOR or COLOR-A.:STROKE-COLORwhen notNILwill draw a1pixel line of colorCOLORaround the perimiter of the box.:ALPHAwhen between0and255is 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.:CLIPPINGisNILThe default isNILas 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
P1is the POINT coordinates at the center of the circle.Packages
- Also supported in LISPBUILDER-SDL-GFX
:AAignored 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
XandYspecify the center coordinate of the circle, of typeINTEGER.Ris the circle r, of typeINTEGER.:AAdetermines if the line is to be drawn using antialiasing.:SURFACEis the target SURFACE.:COLORis the line color, of COLOR or COLOR-A.:ALPHAwhen between0and255is 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
:AAignored 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
VERTICESis a list of waypoints or vetices for the spline, of POINTSTYLEdescribes the line style used to draw the curve and may be one of:SOLID,:DASH, or:POINTS. Use:SOLIDto draw a single continuous line through the specified waypoints. Use:DASHto draw a line between alternate waypoint pairs. Use:POINTSto draw a single pixel at each waypoint.SEGMENTSis 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.:SURFACEis the target SURFACE.:COLORis the line color, of COLOR or COLOR-A.:CLIPPINGwhen left as the default valueTwill 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 leaveCLIPPINGasT.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
P1is 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
XandYspecify the center coordinate of the ellipse, of typeINTEGER.RXandRYspecify the ellipse radius, of typeINTEGER.:SURFACEis the target SURFACE.:COLORis 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
P1is 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
X0andY0specify the center coordinate of the circle, of typeINTEGER.Ris the circle radius, of typeINTEGER.:SURFACEis the target SURFACE.:COLORis the line color, of COLOR or COLOR-A.:STROKE-COLORwhen notNILwill draw a1pixel line of colorCOLORaround the perimiter of the box.:ALPHAwhen between0and255is 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
P1is 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
XandYspecify the center coordinate of the ellipse, of typeINTEGER.RXandRYspecify the ellipse radius, of typeINTEGER.:SURFACEis the target SURFACE.:COLORis 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
P1is 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
XandYspecify the center coordinate of the pie, of typeINTEGER.RADis the pie radius, of typeINTEGER.STARTis the pie start, of typeINTEGER.ENDis the pie end, of typeINTEGER.:SURFACEis the target SURFACE.:COLORis 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
VERTICESis the list of vertices of typeSDL:POINT.:SURFACEis the target SURFACE.:COLORis 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,P2andP3specify the vertices of the trigon, of typeSDL:POINT.:SURFACEis the target SURFACE.:COLORis 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
POSITIONPOINT.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
XandY.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
X0toX1throughYonto onto SURFACE.Parameters
X0andX1are the horizontal start and end points of the line, of typeINTEGER.Yis the verticalINTEGERcoordinate that the horizontal line must intersect.:SURFACEis the target SURFACE.:COLORis the line color, of COLOR or COLOR-A.:CLIPPINGisNILThe default isNILas the SDL library will perform the necessary clipping automatically.:TEMPLATEspecifies 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
P1andP2are 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
X0Y0are the start X/Y coordinates of the line, ofINTEGER.X1Y1are the end X/Y coordinates of the line, ofINTEGER.:AAdetermines if the line is to be drawn using antialiasing. NOTE: Supported only inLISPBUILDER-SDL-GFX, otherwise ignored.:SURFACEis the target SURFACE.:COLORis the line color, of COLOR or COLOR-A.:CLIPPINGwhen left as the default valueTwill 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 leaveCLIPPINGasT.Packages
- Also supported in LISPBUILDER-SDL-GFX
:AAnot supported in LISPBUILDER-SDL
[Function]
draw-pie p1 rad start end &key surface color => result
See DRAW-PIE-*.
Parameters
P1is 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
XandYspecify the center coordinate of the pie, of typeINTEGER.RADis the pie radius, of typeINTEGER.STARTis the pie start, of typeINTEGER.ENDis the pie end, of typeINTEGER.:SURFACEis the target SURFACE.:COLORis 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
POINTis 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
XandYcoordiates.Parameters
XandYspecify the coordinates of the pixel, and are of typeINTEGER.:SURFACEis the target SURFACE.:COLORis the pixel color, of COLOR or COLOR-A.:CLIPPINGwhen left as the default valueTwill 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 leaveCLIPPINGasT.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
:POINTSis the list of vertices for the polygon.POINTSis a list ofPOINTs.:AAdetermines if the line is to be drawn using antialiasing.:SURFACEis the target SURFACE.:COLORis the pixel color, of COLOR or COLOR-A.:CLIPPINGwhen left as the default valueTwill 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 leaveCLIPPINGasT.Packages
- Also supported in LISPBUILDER-SDL-GFX
:AAignored in LISPBUILDER-SDL
[Function]
draw-rectangle rect &key clipping surface color alpha => result
See DRAW-RECTANGLE-*.
Parameters
RECTis 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
XandYare theINTEGERcoordinates of the top-left corner of the rectangle.WandHare the width and height of the rectangle, of typeINTEGER.:SURFACEis the target SURFACE.:COLORis the line color, of COLOR or COLOR-A.:ALPHAwhen between0and255is 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.:CLIPPINGisNILThe default isNILas 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
VERTICESis a list of vertices, ofPOINTSTYLEdescribes the line style used to draw the polygon and may be one of:SOLID,:DASH, or:POINTS. Use:SOLIDto draw a single continuous line through the specified waypoints. Use:DASHto draw a line between alternate waypoint pairs. Use:POINTSto draw a single pixel at each waypoint.:SURFACEis the target SURFACE.:COLORis the line color, of COLOR or COLOR-A.:CLIPPINGwhen left as the default valueTwill 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 leaveCLIPPINGasT.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-shaded string p1 fg-color bg-color &key justify surface font => result
See DRAW-STRING-SHADED-*.
Parameters
P1is theXandYcoordinates 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
STRINGat locationXYusing fontFONTwith text colorFG-COLORand background colorBG-COLORonto surfaceSURFACE. The surface background is filled withBG-COLORso the surface cannot be keyed over other surfaces.
STRINGis the text to render.XandYare theXandYcoordinates, asINTEGERS.FG-COLORcolor is the text color, of typeCOLORBG-COLORcolor is the background color used to fill the surfaceSURFACE, of typeCOLORFONTis the font face used to render the text. Of typeFONT. Bound to*DEFAULT-FONT*if unspecified.SURFACEis 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
P1is theXandXcoordinates to render the text, of typePOINT.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Function]
draw-string-solid-* string x y &key justify surface font color => result
Draw text
STRINGat locationXYusing fontFONTwith colorCOLORonto surfaceSURFACE. The text is keyed ontoSURFACE.Parameters
STRINGis the text to render.XandYare theXandYposition coordinates, asINTEGERS.FONTis the font face used to render the string. Of typeFONT. Bound to*DEFAULT-FONT*if unspecified.SURFACEis the target surface, of typeSDL-SURFACE. Bound to*DEFAULT-SURFACE*if unspecified.COLORcolor 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
[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,P2andP3specify the vertices of the trigon, of typeSDL:POINT.:AAdetermines if the line is to be drawn using antialiasing.:SURFACEis the target SURFACE.:COLORis the pixel color, of COLOR or COLOR-A.:CLIPPINGwhen left as the default valueTwill 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 leaveCLIPPINGasT.Packages
- Also supported in LISPBUILDER-SDL-GFX
:AAignored in LISPBUILDER-SDL
[Function]
draw-vline x y0 y1 &key surface color clipping template => result
Draw a vertical line of COLOR from
Y0toY1throughXonto SURFACE.Parameters
Xis the horizontalINTEGERcoordinate that the vertical line must intersect.Y0andY1are the vertical start and end points of the line, ofINTEGER.:SURFACEis the target SURFACE.:COLORis the line color, of COLOR or COLOR-A.:CLIPPINGisNILThe default isNILas the SDL library will perform the necessary clipping automatically.:TEMPLATEspecifies 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. ASURFACEneed 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).
[Generic function]
enable-rle-accel value &key => result
[Method]
enable-rle-accel value &key => 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.:TEMPLATEaccepts aRECTANGLEdefining 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
RGB:AA. 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
SURFACEwith colorCOLOR. The fill starts at the position specified by theXandYcoordinates. 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
XandYareINTEGERcoordinates.SURFACEis the target surface, of typeSDL:SDL-SURFACE. Bound toSDL:*DEFAULT-SURFACE*if unspecified.COLORis the fill color, of typeSDL:COLORorSDL: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 foreign-object => result
(setf (fp rectangle-array) value)
Returns the foreign pointer in FOREIGN-OBJECT
[Accessor]
frame-rate => result
(setf (frame-rate ) rate)
Manage the target frame rate for the game loop.
RATE>0will lock the game loop to the specified frame rate, and calculate the average frame rate over a number of frames.RATE=0will unlock the frame rate, and calculate the average frame rate over a number of frames.RATE<0will 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 sdl-font) => result
[Generic accessor]
g color => result
(setf (g color) value)
Returns the green color component the object.
[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
XandYcoordinates of objectOBJas 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)
Returns the height of the object, as an
INTEGER. WhenOBJis a FONT, use the cached SURFACE.
[Generic function]
image-p source image-type => result
Returns
Twhen the image type inSOURCEis ofIMAGE-TYPE. ReturnsNILotherwise. Attempts to detect the image type using the magic number contained in the image if one is available.NILis always returned for images of typeTGAas aTGAimage does not contain a magic number.IMAGE-TYPEmust be one of:BMP,:GIF,:JPG,:LBM,:PCX,:PNG,:PNM,:TIF,:XCF,:XPMor: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,:XPMor:XV, if the image type can be determined. ReturnsNILif the image cannot be determined (The magic number is not supported or the magic number is not found).NILis always returned for images of typeTGAas aTGAimage 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
OPTIONALparameterINITisT, or the value returned by SDL-INIT-ON-STARTUP isT.
[Function]
init-sub-systems &optional flags => result
Initializes the SDL subsystems specified in
FLAGS.FLAGSis anINTEGERbitmask 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-EVENTTHREADandSDL-INIT-NOPARACHUTE.
INIT-SUB-SYSTEMScan be called only after SDL is succesfully initialized by INIT-SDL.
[Function]
initialise-default-font &optional font-definition => result
Returns a new BITMAP-FONT initialized from
FONT-DEFINITIONdata, orNILif the font cannot be created.FONT-DEFINITIONis 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 BITMAP-FONT initialized from
FONT-DEFINITIONdata, orNILif the font cannot be created.FONT-DEFINITIONmust 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
FLAGSmay 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-EVENTTHREADandSDL-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
SURFACEand video flagsFLAGS.LIST-MODESmust be called after SDL is initialised using INIT-SDL or WITH-INIT.Parameters
FLAGSis 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.SURFACEA surface of type SDL-SURFACE, orNIL. WHENNIL, the pixel format will be that returned by SDL-GET-VIDEO-INFO.Returns
- Returns a list of
VECTORs 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)). ReturnsNILif there are no dimensions available for a particular pixel format. ReturnsTif 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.
FLAGSis anINTEGERbitmask 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-EVENTTHREADandSDL-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
SURFACEfrom the image inSOURCE, or returnsNILifSOURCEdoes 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
TGAdo 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 :TGAParameters
SOURCEis an image.COLOR-KEYsets the color key, and turns on color keying.- 'COLOR-KEY-AT' uses the pixel color at
POINTx/y as the color key, and turns on color keying.ALPHAsets 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-TYPEspecifies the image type. May be:BMP,:GIF,:JPG,:LBM,:PCX,:PNG,:PNM,:TGA,:TIF,:XCF,:XPMor: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-TYPEis ignored.FORCEwhenTwill ignore any magic number present in the image and load an image as:IMAGE-TYPE. Images of typeTGAmust be loaded using:FORCE T.FREE-RWOPSwill free a RWOPS passed as a parameter inSOURCE. Default isTExample
- To load a
(LOAD-IMAGE "image.bmp") (LOAD-IMAGE "image.tga" :IMAGE-TYPE :TGA) (LOAD-IMAGE "image.bmp" :IMAGE-TYPE :BMP :FORCE T)BMPimage using the magic numberPackages
- Also supported in LISPBUILDER-SDL-IMAGE
- LISPBUILDER-SDL only supports
BMPimages. Any alpha channel present in the source image is ignored. The newSURFACEis created as anRGBsurface, notRGBA.- LISPBUILDER-SDL-IMAGE supports the following image formats,
BMP,GIF,JPG,LBM,PCX,PNG,PNM,TIF,XCF,XPM,XV.BMPandTGA. Alpha channels are supported. The newSURFACEis created asRGBorRGBAas appropriate.:IMAGE-TYPEand:FORCEare 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
1bits (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, andAcolor components to the pixel format of SURFACE and returns the pixel value that best approximates the color value of the surface. IfAis notNILthen 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
[Method]
pixel-alpha-enabled-p (surface sdl-surface) => result
Returns
Tif a pixel alpha component (RGBA) is available, orNILif 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
POINTset to the specified horizontalXand verticalYcoordinate.
[Generic function]
point-* point => result
Returns the
XandYcoordinates of the object as a spread. TheRESULTis(VALUES X Y)
[Generic function]
position-* obj => result
See POINT-*
[Function]
push-quit-event => result
Pushes a new
SDL_Eventof type:SDL-QUIT-EVENTonto the event queue.
[Function]
push-user-event &key code data1 data2 => result
Pushes a new
SDL_Eventof type:SDL-USER-EVENTonto the event queue.
[Function]
query-cursor => result
Queries the current state of the cursor. Returns
Tif the cursor is enabled and shown on the display. ReturnsNILif 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
FLAGSmay 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
OPTIONALparameterQUITisT, or the value returned by SDL-QUIT-ON-EXIT isT.
[Function]
quit-sub-systems &optional flags => result
Uninitializes the SDL subsystems specified in the
INTEGERbitmaskFLAGS.FLAGScontains 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-SYSTEMScan be called only after SDL is successfully intialized using INIT-SDL.
[Generic accessor]
r color => result
(setf (r color) value)
Returns the red color component of the object.
[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
RECTANGLEof random x, y width and height within the specified bounds of widthBOUND-Wand heightBOUND-H.RECTANGLEif unset will force the creation of a newRECTANGLEobject.RECTANGLEif set will be modified with the coordinates.
[Function]
read-pixel point &key clipping surface => result
See READ-PIXEL-*.
Parameters
POINTis 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
XandYcoordiates from SURFACE.Parameters
XandYspecify the coordinates of the pixel, and are of typeINTEGER.:SURFACEis the target SURFACE.:COLORis the pixel color, of COLOR or COLOR-A.:CLIPPINGwhen left as the default valueTwill 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 leaveCLIPPINGasT.Packages
- Also supported in LISPBUILDER-SDL-GFX
[Standard class]
rectangle
A
RECTANGLEobject manages the foreign SDL_Rect object. Free using FREE.
[Function]
rectangle &key x y w h fp => result
Creates a new
RECTANGLEfrom the specifiedX,Y, widthWand heightH. IfFP' isNILthen a foreign SDL_Rect is created. IfFPis a pointer to a foreign SDL_Rect object thenFP` is used.
[Generic function]
rectangle-* obj => result
Returns the
X,Y,WIDTHandHEIGHTcoordinates of the object as a spread. TheRESULTis(VALUES X Y WIDTH HEIGHT)
[Function]
rectangle-from-edges p1 p2 &optional rectangle => result
P1andP2arePOINTSthat specify the bounds of theRECTANGLE.P1specifies the top left coordinate.P2specifies the lower right coordinate.
[Function]
rectangle-from-edges-* x1 y1 x2 y2 &optional rectangle => result
Returns a new
RECTANGLEusing the bounds specified by theINTEGERSX1,X2,Y1andY2. The coordinates of the rectangle are X = X1, Y = Y1, WIDTH = (- X2 X1), HEIGHT = (- Y2 Y1)Parameters
X1,Y1specify the top left coordinate asINTEGERS.X2,Y2specify the bottom right coordinate asINTEGERS.RECTANGLEif unset will force the creation of a newRECTANGLEobject.RECTANGLEif set will be modified with the coordinates.
[Function]
rectangle-from-midpoint-* x y w h &optional rectangle => result
Returns a
RECTANGLEof widthWand heightHwith the rectangle mid-point at coordinatesXandY.RECTANGLEif unset will force the creation of a newRECTANGLEobject.RECTANGLEif set will be modified with the coordinates.
[Function]
render-string-shaded string fg-color bg-color &key font free cache => result
Render the string
STRINGusing fontFONTwith text colorFG-COLORand background colorBG-COLORto a newSURFACE. The dimensions of the new surface are height ==FONTheight, and width ==FONTwidth *STRINGlength. The surface background is filled withBG-COLORso the surface cannot be keyed over other surfaces. Use:CACHE Tto cache the new surface in theFONTobject. When:FREE Tany exisiting cached surface inFONTis automatically freed. When:FREE NILthe caller is responsible for freeing any existing cached surface inFONT.Parameters
STRINGis the text to render.FONTis the font face used to render theSTRING. Of typeFONT. Bound to*DEFAULT-FONT*if unspecified.FG-COLORcolor is the text color, of typeCOLORBG-COLORcolor is the background color used to fill the surface, of typeCOLORFREEwhenTwill free any exisiting cached surface inFONT.CACHEwhenTwill 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
STRINGusing fontFONTwith text colorCOLORto a newSURFACE. The dimensions of the new surface are height ==FONTheight, and width ==FONTwidth *STRINGlength. The surface background is transparent and therefore can be keyed over other surfaces. Use:CACHE Tto cache the new surface in theFONTobject. When:FREE Tany exisiting cached surface inFONTis automatically freed. When:FREE NILthe caller is responsible for freeing any existing cached surface inFONT.Parameters
STRINGis the text to render.FONTis the font face used to render theSTRING. Of typeFONT. Bound to*DEFAULT-FONT*if unspecified.COLORcolor is the text color, of typeCOLOR.FREEwhenTwill free any exisitng cached surface inFONT.CACHEwhenTwill 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
[Function]
return-sub-systems-of-status flags status => result
Returns the status
STATUSof the the specified SDL subsystems inFLAGSas an INTEGER bitmask.Parameters
FLAGSmay 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.STATUSwhenTdetermines the status of initialised subsystems.STATUSwhenNIL, determines the status of uninitialised subsystems.Returns
- Returns an INTEGER bitmask of the SDL subsystems in
FLAGSthat are initialised whenSTATUSisTor uninitialised whenSTATUSisNIL.
[Generic accessor]
rle-accel-enabled-p surface => result
(setf (rle-accel-enabled-p surface) value)
[Specialized accessor]
rle-accel-enabled-p (surface sdl-surface) => result
(setf (rle-accel-enabled-p (surface sdl-surface)) value)
[Function]
rotate-surface degrees &key surface free zoom smooth => result
Returns a new SURFACE rotated to
DEGREES.Parameters
DEGREESis the rotation in degrees.:SURFACEis the surface to rotate SURFACE.:FREEwhenTwill freeSURFACE.:ZOOMis the scaling factor.:SMOOTHwhenTwill anti-aliase the new surface.Packages
- Also supported in LISPBUILDER-SDL-GFX
- LISPBUILDER-SDL supports rotations of only
0,90,180, or270degrees. 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
DEGREESis the rotation in degrees.:SURFACEis the surface to rotate SURFACE.:FREEwhenTwill freeSURFACE.:ZOOMXandZOOMYare the the scaling factors. A negative scaling factor will flip the corresponding axis. Note: Flipping is only supported with anti-aliasing turned off.:SMOOTHwhenTwill 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
SURFACEas aBMPimage to a file at locationFILENAME.
[Constant]
sdl-any-format
Applies to DISPLAY-SURFACE.
- When passed as a
FLAGto WINDOW; Causes SDL to return a DISPLAY-SURFACE of any pixel depth if the requested pixel depth is unavailable.- When read from the
FLAGSfield 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-FORMATprevents 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
FLAGto WINDOW; Enables the use of asynchronous updates of the DISPLAY-SURFACE.- When read from the
FLAGSfield 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.
[Constant]
sdl-doublebuf
Applies to DISPLAY-SURFACE.
- When passed as a
FLAGto WINDOW; Enable hardware double buffering; only valid with SDL-HW-SURFACE.- When read from the
FLAGSfield 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
FLAGto 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
FLAGSfield 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
FLAGSfield 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
FLAGto WINDOW; Gives SDL exclusive palette access to DISPLAY-SURFACE.- When read from the
FLAGSfield 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
FLAGto WINDOW or CREATE-SURFACE; Create the SURFACE or DISPLAY-SURFACE in video memory.- When read from the
FLAGSfield 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
Tif the SDL library must be initialised in INIT-SDL, or WITH-INIT. ReturnsNILotherwise.
[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
FLAGto WINDOW; If possible,SDL-NO-FRAMEcauses SDL to create a window with no title bar or frame decoration.- When read from the
FLAGSfield 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
FLAGto WINDOW; Create an OpenGL rendering context. You should have previously set OpenGL video attributes with SDL-GL-SET-ATTRIBUTE.- When read from the
FLAGSfield in DISPLAY-SURFACE; Indicates that the surface has an OpenGL rendering context.
[Constant]
sdl-pre-alloc
Applies to SURFACE.
- When read from the
FLAGSfield in SURFACE; Indicates that surface uses preallocated memory.
[Function]
sdl-quit-on-exit => result
Returns
Tif the SDL library must be uninitialised in QUIT-SDL, or WITH-INIT. ReturnsNILotherwise.
[Constant]
sdl-resizable
Applies to DISPLAY-SURFACE.
- When passed as a
FLAGto WINDOW; Create a resizable window.- When read from the
FLAGSfield 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
FLAGto 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
FLAGSfield 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
FLAGto 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
FLAGSfield in SURFACE; Indicates that surface blitting uses alpha blending.
[Constant]
sdl-src-color-key
Applies to SURFACE.
- When passed as a
FLAGto 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
FLAGSfield 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
FLAGto WINDOW or CREATE-SURFACE; Create the SURFACE or DISPLAY-SURFACE in system memory.- When read from the
FLAGSfield 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
CELLatINDEXto the bounds ofRECTANGLE. Note: WhenSURFACEis 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
CELLatINDEXto a rectangle bounded byX,Y,WandH. Note: WhenSURFACEis 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/Acolor components to the destinationDSTfrom the sourceSRC.
[Generic function]
set-color-* color &key r g b a => result
Sets
COLORto the redR, greenG, blueBand alphaAcolor components.
[Function]
set-gl-attribute attribute value => result
[Generic function]
set-point dst src => result
Copies the
XandYcoordinates to the destinationDSTfrom the sourceSRC.
[Generic function]
set-point-* obj &key x y => result
Sets the
XandYcoordinates of the objectOBJ.XandYareKEYword 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,WIDTHandHEIGHTcoordinates to the destination rectangleDSTfrom the source rectangleSRC.
[Generic function]
set-rectangle-* rectangle &key x y w h => result
Sets the
X,Y,WIDTHandHEIGHTcoordinates of the rectangleRECTANGLE.X,Y,WIDTHandHEIGHTareKEYword parameters having default values of0if 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.XandYareKEYword parameters having default values of0if 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_Surfaceobject freed when out of scope. Free using FREE.
[Function]
surface-info surface &optional info => result
Returns information about the SDL surface
SURFACE.Parameters
SURFACEis an SDL surface of type SDL-SURFACE.INFOmust 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-RESIZABLESDL-HW-ACCEL, SDL-SRC-COLOR-KEY, SDL-RLE-ACCEL, SDL-SRC-ALPHA or SDL-PRE-ALLOC.Returns
INFOwhenNILwill return a list of all enabled surface flags. Otherwise will returnINFOasTorNILif supported by the surface.Example
(SURFACE-INFO A-SURFACE '(SDL-HW-SURFACE SDL-HW-PALETTE SDL-HW-ACCELL))
[Function]
time-scale => 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-DISPLAYwill flip the SDL video buffers and update the screenSURFACEifSDL-HW-SURFACEis 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-DISPLAYwill call SDL-GL-SWAP-BUFFERS to update the OpenGL display context.
SURFACEis 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
STRINGcontaining 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-INFOmust be called after SDL is initialised using INIT-SDL or WITH-INIT. IfGET-VIDEO-INFOis called before WINDOW, the information returned is of the best video mode. IfGET-VIDEO-INFOis called after WINDOW, the information returned is of the current video mode.Parameters
INFOcan be one of:HW-AVAILABLE,:WM-AVAILABLE,:BLIT-HW,:BLIT-HW-CC,:BLIT-HW-A,:BLIT-SW,:BLIT-SW-CC,:BLIT-SW-Aor: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)
Returns the width of the object, as an
INTEGER. WhenOBJis a FONT, use the cached SURFACE.
[Function]
window width height &key bpp flags title-caption icon-caption => result
Creates a new SDL window of pixel width
WIDTHand heightHEIGHTusing SDL_SetVideoMode.Use
SDL-SW-SURFACEif 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=centerorSDL_VIDEO_WINDOW_POS=x,y. These may be set using SDL-PUT-ENV.Parameters
WIDTHthe pixel width of the window, of typeINTEGER.HEIGHTthe pixel height of the window, of typeINTEGER. IfWIDTHandHEIGHTare both0, then the width and height of the current video mode is used (or the desktop mode, if no mode has been set).BPPthe number of bits per pixel. Defaults to0which is the current display bits per pixel. Note: ABPPof24uses the packed representation of 3 bytes/pixel. For the more common 4 bytes/pixel mode, use aBPPof 32.FLAGSis 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-CAPTIONis the title that appears in the Window title bar, of typeSTRING.ICON-CAPTIONis the title that appears when the Window is minimized, of typeSTRING.Returns
- Returns a new
DISPLAY-SURFACEif successful,NILif unsuccessful. Whatever flags SDL_SetVideoMode could satisfy are set in the flags member ofSURFACE. TheSURFACEreturned 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
SEGENTSused 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-VERTEXwhich accepts anPOINT, orADD-VERTEX-*which is the x/y spread version
ADD-VERTEXandADD-VERTEX-*are valid only within the scop ofWITH-BEZIER.Parameters
STYLEis one of:SOLID,:DASH, or:POINTS. WhenSTYLEis:SOLID, a single continuous line is drawn through the specified waypoints. WhenSTYLEis:DASH, a line is drawn to alternate waypoint pairs. WhenSTYLEis:POINTS, a single point is drawn at each waypoint.SEGMENTSis 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*toVARwithin the scope ofWITH-COLOR.VARis set toCOLORwhenCOLORis notNIL.VARmust be of type COLOR, or COLOR-A.VARis freed using FREE whenFREEisT.
[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-VERTEXwhich accepts anSDL:POINT, orADD-VERTEX-*which is the x/y spread version
ADD-VERTEXandADD-VERTEX-*are valid only within the scope ofWITH-CURVE.Parameters
STYLEdescribes the line style used to draw the curve and may be one of:SOLID,:DASH, or:POINTS. Use:SOLIDto draw a single continuous line through the specified waypoints. Use:DASHto draw a line between alternate waypoint pairs. Use:POINTSto draw a single pixel at each waypoint.SEGMENTSis 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*toFONTwithin 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-EVENTSis 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
TYPEas:POLLor:WAITrespectively.NOTE:
WITH-EVENTSmust 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-TYPEmust be one of the followingKEYwords;: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-EVENTor:IDLE.KEYSspecify the members of the event to return and are specific to each event type. These are discussed in detail below.NOTE:
:QUIT-EVENTmust returnTto exit theWITH-EVENTmacro.NOTE:
:IDLEis ignored whenTYPEis:WAIT.Polling for Events
When
TYPEis:POLL,WITH-EVENTSwill continually poll for currently pending events. If no events are available then the game loop is run and the forms in:IDLEare executed.Waiting for Events
When
TYPEis:WAIT,WITH-EVENTSwill 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
:IDLEevent is special in that it is not generated by SDL. Rather the forms in:IDLEare executed once each game loop after event queue is emptied.:IDLEis ignored when the event mechanism specified byTYPEis:WAIT.Active Event
(:ACTIVE-EVENT (:GAIN GAIN :STATE STATE) &BODY BODY)When the mouse leaves or enters the window area an
SDL-APP-MOUSE-FOCUStype activation event is generated. If the mouse has entered the window thenGAINwill be1, otherwiseGAINwill be0. AnSDL-APP-INPUT-FOCUStype activation event occurs when the application loses or gains keyboard focus, usually when a different application is made active. Finally, anSDL-APP-ACTIVEtype event occurs when the application is either minimised/iconified,GAINis0, or restored. A single event can have multiple values set inSTATE. Note: This event does not occur when an application window is first created.
GAINis0if the event is a loss or1if it is a gain.STATEa bitmask of the following values:SDL-APP-MOUSE-FOCUSif mouse focus was gained or lost,SDL-APP-INPUT-FOCUSif input focus was gained or lost, andSDL-APP-ACTIVEif the application was iconified,GAINis0, or restoredGAINis1.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
KEYandMOD.The
SDL-CAPS-LOCKandSDL-NUM-LOCKkeys are special cases and report anSDL-KEY-DOWNwhen first pressed, then anSDL-RELEASEDwhen 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-DOWNevents will occur if key repeat is enabled using SDL-ENABLE-KEY-REPEAT.
STATEisSDL-PRESSEDorSDL-RELEASEDif the key is pressed or released respectively.SCANCODEis the hardware-dependent scancode returned by the keyboard.KEYis is the SDL-defined value of the key that generated the event. The SDL-defined value forKEYgenerally takes the following format::SDL-KEY-0to:SDL-KEY-1for numeric keys.SDL-KEY-atoSDL-KEY-zfor alpha keys in the range a-z. Other keys are generally spelled out, for exampleSDL-KEY-PAGEDOWN,SDL-KEY-F1orSDL-KEY-NUMLOCK.MODis 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.UNICODEis 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-EVENTevent occurs when the mouse moves within the application window or when SDL-WARP-MOUSE is called. Both the absoluteXandYand relativeX-RELandY-RELcoordinates 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.
STATEis the current button state.Xis theXcoordinates of the mouseYis theYcoordinates of the mouseX-RELis the relative motion in theXdirectionY-RELis the relative motion in theYdirectionMouse 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 theXand theYfields.Mouse wheel events are reported as buttons 4 (up) and 5 (down). Two events are generated i.e. a
SDL-MOUSE-BUTTON-DOWNfollowed by aSDL-MOUSE-BUTTON-UPevent.
BUTTONis the mouse button index which is one ofSDL-BUTTON-LEFT,SDL-BUTTON-MIDDLE,SDL-BUTTON-RIGHT,SDL-BUTTON-WHEELUPorSDL-BUTTON-WHEELDOWN.STATEis the state of the button which isSDL-PRESSEDorSDL-RELEASED.Xis theXcoordinates of the mouse at press/release time.Yis theYcoordinates 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.
WHICHis the joystick device index. The index of the joystick that reported the event.AXISis the joystick axis indexVALUEis 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-EVENTorJOY-BUTTON-DOWN-EVENTevent occurs whenever a user presses or releases a button on a joystick.
WHICHis the index of the joystick that reported the event.BUTTONis the button pressed that caused the event.STATEis the current state of the button and is eitherSDL-PRESSEDorSDL-RELEASED.Joystick Hat Motion Event
(:JOY-HAT-MOTION-EVENT (:WHICH WHICH :HAT HAT :VALUE VALUE) &BODY BODY)A
JOY-HAT-MOTION-EVENTevent occurs when ever a user moves a hat on the joystick.
WHICHis the index of the joystick that reported the event.HATis the index of the hat that generated the event.VALUEis 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-UPandSDL-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-EVENTevent occurs when a user moves a trackball on the joystick. Trackballs only return relative motion.
WHICHis the index of the joystick that reported the event.BALLis the index of the trackball that generated the event.X-RELis the change inXposition of the ball since it was last polled (last cycle of the event loop).Y-RELis the change inYposition of the ball since it was last polled (last cycle of the event loop).Quit Event
(:QUIT-EVENT () &BODY BODY)If
QUIT-EVENTis filtered or ignored then it is impossible for the user to close the window. IfQUIT-EVENTis accepted and returnsTthen the application window will be closed. Note: Screen updates will continue to report success even though the application is no longer visible. IfQUIT-EVENTis accepted and returnsNILthen the application window will not be closed. SDL_QUIT-REQUESTED will return non-zero if aQUIT-EVENTevent is pending.SDL Window Resize Event
(:VIDEO-RESIZE-EVENT (:W W :H H) ...)When
SDL-RESIZABLEis passed as a flag to WINDOW, the user is allowed to resize the application window. When the window is resized aVIDEO-RESIZE-EVENTevent is reported, with the new window width and height values stored inWandHrespectively. When anVIDEO-RESIZE-EVENTevent is recieved the window should be resized to the new dimensions using WINDOW.
Wis the window width as anINTEGER.His the window height as an INTERGER`.SDL Window Expose Event
(:VIDEO-EXPOSE-EVENT () ...)
VIDEO-EXPOSE-EVENTis 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-INFOstructure using SDL-VERSION, and pass it to the function: SDL-GET-WM-INFOUser
(:USER-EVENT (:TYPE TYPE :CODE CODE :DATA1 DATA1 :DATA2 DATA2) ...)
USER-EVENTis unique in that it is created by the user not SDL.USER-EVENTcan be pushed onto the event queue using PUSH-USER-EVENT. The contents of the event are completely up to the programmer.
TYPEis a value fromSDL-USER-EVENT to(- SDL-NUM-EVENTS 1)` inclusive.CODEis a user defined event codeDATA1is a user defined data pointerDATA2is 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 inFONTwithin the scope ofWITH-FONT. FreesFONTwhenWITH-FONTgoes out of scope.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_ColortoSTRUCT. Then copies the color components fromCOLORintoSTRUCT.STRUCTis free'd when out of scope.
[Macro]
with-init flags declaration* statement* => result
WITH-INITis a convenience macro that will attempt to initialise the SDL library and SDL subsystems prior to executing the forms inBODY. Upon exitWITH-INITwill 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-INITwill only initialise theSDL-INIT-VIDEOSDL subsystem. Additional SDL subsystems can be initialized by calling INITIALIZE-ON-STARTUP.- By default
WITH-INITwill only uninitialise theSDL-INIT-VIDEOSDL 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
FLAGSmay 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-EVENTTHREADandSDL-INIT-NOPARACHUTE. Note: WhenFLAGSis set byWITH-INIT, subsequent calls to INITIALIZE-ON-STARTUP and QUIT-ON-EXIT are ignored.WITH-INITwill 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*toVARwithin the scope ofWITH-POINT.VARmust be of typePOINT. IfPOINTis notNIL, thenVAR is set toPOINT`.
[Macro]
with-rectangle (var &optional rectangle free) declaration* statement* => result
A convenience macro that binds
*DEFAULT-RECTANGLE*toVARwithin the scope ofWITH-RECTANGLE.VARmust be of typeRECTANGLE.VARis set toRECTANGLEwhenRECTANGLEis notNIL.VARis freed whenFREEisT.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-VERTEXwhich 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
STYLEdescribes the line style used to draw the shape and may be one of:SOLID,:DASH, or:POINTS. Use:SOLIDto draw a single continuous line through the specified waypoints. Use:DASHto draw a line between alternate waypoint pairs. Use:POINTSto 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 thePOINTsP1P2is <= the distanceDISTANCE.
[Function]
within-range-* x1 y1 x2 y2 distance => result
Returns true
T, if the distance between the coordinatesX1,Y1andX2,Y2is <= the distanceDISTANCE.
[Generic accessor]
x obj => result
(setf (x obj) value)
Returns the
Xcoordinate of the object, as anINTEGER. WhenOBJis a FONT, use the cached SURFACE.
[Generic accessor]
x2 obj => result
(setf (x2 obj) value)
Returns
(+ X WIDTH)of the object, as anINTEGER.
[Generic accessor]
y obj => result
(setf (y obj) value)
Returns the
Ycoordinate of the object, as anINTEGER. WhenOBJis a FONT, use the cached SURFACE.
[Generic accessor]
y2 obj => result
(setf (y2 obj) value)
Returns
(+ Y HEIGHT)of the object, as anINTEGER.
[Function]
zoom-surface zoomx zoomy &key surface free smooth => result
Returns a new SURFACE scaled to
ZOOMXandZOOMY.Parameters
:ZOOMXandZOOMYare the scaling factors. A negative scaling factor will flip the corresponding axis. Note: Flipping is only supported with anti-aliasing turned off.:SURFACEis the surface to rotate SURFACE.:FREEwhenTwill freeSURFACE.:SMOOTHwhenTwill 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)