9 Drawing
This section covers 2D drawing operations: colors, shapes, and rendering.
9.1 Basic Rendering
procedure
(render-clear! ren) → void?
ren : renderer?
procedure
(render-present! ren) → void?
ren : renderer?
The basic rendering pattern is:
;; Each frame: (set-draw-color! ren 0 0 0) ; Black background (render-clear! ren) ;; ... draw shapes, textures, text ... (render-present! ren)
9.2 Colors
procedure
(set-draw-color! ren r g b [a]) → void?
ren : renderer? r : (integer-in 0 255) g : (integer-in 0 255) b : (integer-in 0 255) a : (integer-in 0 255) = 255
r —
Red component g —
Green component b —
Blue component a —
Alpha (opacity), 255 = fully opaque (default)
(set-draw-color! ren 255 0 0) ; Red (set-draw-color! ren 0 255 0 128) ; Semi-transparent green
procedure
(get-draw-color ren) →
(integer-in 0 255) (integer-in 0 255) (integer-in 0 255) (integer-in 0 255) ren : renderer?
procedure
(set-draw-color-float! ren r g b [a]) → void?
ren : renderer? r : real? g : real? b : real? a : real? = 1.0
procedure
(color->SDL_Color color) → any/c
color : (or/c list? vector?)
A list '(r g b) or '(r g b a)
A vector #(r g b) or #(r g b a)
9.3 Blend Modes
procedure
(set-blend-mode! ren mode) → void?
ren : renderer? mode : (or/c 'none 'blend 'add 'mod 'mul symbol?)
'none —
No blending, overwrites destination 'blend (or 'alpha) —
Standard alpha blending 'add (or 'additive) —
Additive blending (good for glow effects) 'mod (or 'modulate) —
Color modulation 'mul (or 'multiply) —
Multiply blending
procedure
(get-blend-mode ren)
→ (or/c 'none 'blend 'add 'mod 'mul symbol?) ren : renderer?
procedure
(symbol->blend-mode sym) → exact-integer?
sym : symbol?
procedure
(blend-mode->symbol mode) → symbol?
mode : exact-integer?
9.4 Drawing Shapes
All shape-drawing functions use the current draw color set by set-draw-color!. Coordinates can be integers or floats.
9.4.1 Points
procedure
(draw-point! ren x y) → void?
ren : renderer? x : real? y : real?
procedure
(draw-points! ren points) → void?
ren : renderer?
points :
(listof (or/c (list/c real? real?) (vector/c real? real?)))
(draw-points! ren '((100 100) (150 120) (200 100)))
9.4.2 Lines
procedure
(draw-line! ren x1 y1 x2 y2) → void?
ren : renderer? x1 : real? y1 : real? x2 : real? y2 : real?
procedure
(draw-lines! ren points) → void?
ren : renderer?
points :
(listof (or/c (list/c real? real?) (vector/c real? real?)))
;; Draw a triangle outline (draw-lines! ren '((100 200) (200 100) (300 200) (100 200)))
9.4.3 Rectangles
(set-draw-color! ren 255 0 0) (fill-rect! ren 100 100 200 150) ; Red filled rectangle
procedure
(draw-rects! ren rects) → void?
ren : renderer?
rects :
(listof (or/c (list/c real? real? real? real?) (vector/c real? real? real? real?)))
procedure
(fill-rects! ren rects) → void?
ren : renderer?
rects :
(listof (or/c (list/c real? real? real? real?) (vector/c real? real? real? real?)))
9.5 Geometry Rendering
For complex shapes, use vertex-based geometry rendering.
procedure
(make-vertex x y r g b [a #:uv uv]) → any/c
x : real? y : real? r : real? g : real? b : real? a : real? = 1.0 uv : (or/c (cons/c real? real?) #f) = #f
x, y —
Position coordinates r, g, b, a —
Color (0.0 to 1.0) uv —
Optional texture coordinates as (cons u v)
procedure
(render-geometry! ren vertices [ #:indices indices #:texture tex]) → void? ren : renderer? vertices : (listof any/c) indices : (or/c (listof exact-nonnegative-integer?) #f) = #f tex : (or/c any/c #f) = #f
vertices —
List of vertices from make-vertex indices —
Optional index list for indexed rendering tex —
Optional texture for textured triangles
Vertices are rendered as triangles (every 3 vertices form a triangle).
;; Draw a colored triangle (render-geometry! ren (list (make-vertex 400 100 1.0 0.0 0.0) ; Top (red) (make-vertex 200 400 0.0 1.0 0.0) ; Bottom-left (green) (make-vertex 600 400 0.0 0.0 1.0))) ; Bottom-right (blue)
9.6 Debug Text
procedure
(render-debug-text! ren x y text) → void?
ren : renderer? x : real? y : real? text : string?
The text color is controlled by set-draw-color!.
(set-draw-color! ren 255 255 255) (render-debug-text! ren 10 10 "FPS: 60")
9.7 Viewport and Clipping
procedure
(set-render-viewport! ren rect) → void?
ren : renderer? rect : (or/c any/c #f)
procedure
(get-render-viewport ren) → any/c
ren : renderer?
procedure
(set-render-clip-rect! ren rect) → void?
ren : renderer? rect : (or/c any/c #f)
procedure
(get-render-clip-rect ren) → any/c
ren : renderer?
procedure
(render-clip-enabled? ren) → boolean?
ren : renderer?
procedure
(set-render-scale! ren scale-x scale-y) → void?
ren : renderer? scale-x : real? scale-y : real?
procedure
(get-render-scale ren) →
real? real? ren : renderer?
9.8 Renderer Information
procedure
(renderer-name ren) → string?
ren : renderer?
procedure
(render-output-size ren) →
exact-nonnegative-integer? exact-nonnegative-integer? ren : renderer?
procedure
(current-render-output-size ren) →
exact-nonnegative-integer? exact-nonnegative-integer? ren : renderer?
procedure
procedure
(render-driver-name index) → string?
index : exact-nonnegative-integer?
9.9 VSync
procedure
(set-render-vsync! ren vsync) → void?
ren : renderer? vsync : exact-integer?
0 —
VSync off 1 —
VSync on -1 —
Adaptive VSync (if supported)
procedure
(get-render-vsync ren) → exact-integer?
ren : renderer?