5 Windows and Renderers
SDL3 applications display graphics through windows and renderers. A window is an OS window that can display content. A renderer is a 2D rendering context attached to a window.
5.1 Creating Windows and Renderers
syntax
(with-window+renderer title width height (win-id ren-id) maybe-window-flags body ...)
maybe-window-flags =
| #:window-flags flags
flags : (or/c symbol? (listof symbol?))
This is the recommended way to create a window and renderer.
'resizable —
Window can be resized 'fullscreen —
Fullscreen window 'high-pixel-density —
High-DPI mode 'opengl —
OpenGL rendering context
(with-sdl (with-window+renderer "My Game" 800 600 (win ren) ;; win and ren are available here (render-clear! ren) (render-present! ren))) (with-window+renderer "Resizable" 800 600 (win ren) #:window-flags 'resizable ;; ... ) (with-window+renderer "HiDPI" 800 600 (win ren) #:window-flags '(resizable high-pixel-density) ;; ... )
syntax
(with-window title width height win-id body ...)
syntax
(with-renderer win ren-id body ...)
5.2 Window Functions
procedure
(make-window title width height [ #:flags flags #:custodian cust]) → window? title : string? width : exact-positive-integer? height : exact-positive-integer? flags : (or/c symbol? (listof symbol?) #f) = '() cust : custodian? = (current-custodian)
Returns a window? value.
procedure
(window-destroy! win) → void?
win : window?
5.2.1 Window Properties
procedure
(window-title win) → string?
win : window?
procedure
(window-set-title! win title) → void?
win : window? title : string?
procedure
(window-size win) →
exact-nonnegative-integer? exact-nonnegative-integer? win : window?
(define-values (w h) (window-size win)) (printf "Window is ~ax~a~n" w h)
procedure
(window-set-size! win width height) → void?
win : window? width : exact-positive-integer? height : exact-positive-integer?
procedure
(window-position win) →
exact-integer? exact-integer? win : window?
procedure
(window-set-position! win x y) → void?
win : window? x : exact-integer? y : exact-integer?
procedure
(window-pixel-density win) → real?
win : window?
procedure
(window-id win) → exact-nonnegative-integer?
win : window?
procedure
(window-from-id id) → (or/c window? #f)
id : exact-nonnegative-integer?
5.2.2 Window State
procedure
(show-window! win) → void?
win : window?
procedure
(hide-window! win) → void?
win : window?
procedure
(raise-window! win) → void?
win : window?
procedure
(maximize-window! win) → void?
win : window?
procedure
(minimize-window! win) → void?
win : window?
procedure
(restore-window! win) → void?
win : window?
procedure
(window-fullscreen? win) → boolean?
win : window?
procedure
(window-set-fullscreen! win fullscreen?) → void?
win : window? fullscreen? : boolean?
5.2.3 Window Decoration
procedure
(set-window-bordered! win bordered?) → void?
win : window? bordered? : boolean?
procedure
(set-window-resizable! win resizable?) → void?
win : window? resizable? : boolean?
procedure
(set-window-minimum-size! win width height) → void?
win : window? width : exact-positive-integer? height : exact-positive-integer?
procedure
(set-window-maximum-size! win width height) → void?
win : window? width : exact-positive-integer? height : exact-positive-integer?
procedure
(window-minimum-size win) →
exact-nonnegative-integer? exact-nonnegative-integer? win : window?
procedure
(window-maximum-size win) →
exact-nonnegative-integer? exact-nonnegative-integer? win : window?
5.2.4 Window Effects
procedure
(window-opacity win) → real?
win : window?
procedure
(set-window-opacity! win opacity) → void?
win : window? opacity : real?
procedure
(flash-window! win [operation]) → void?
win : window? operation : (or/c 'cancel 'briefly 'until-focused) = 'briefly
'briefly —
Flash briefly (default) 'until-focused —
Flash until the window gains focus 'cancel —
Cancel any ongoing flash
procedure
(set-window-icon! win surface) → void?
win : window? surface : any/c
5.3 Renderer Functions
procedure
(make-renderer win [ #:name name #:custodian cust]) → renderer? win : window? name : (or/c string? #f) = #f cust : custodian? = (current-custodian)
procedure
(renderer-destroy! ren) → void?
ren : renderer?
procedure
(make-window+renderer title width height [ #:window-flags window-flags #:renderer-name renderer-name #:custodian cust])
→
window? renderer? title : string? width : exact-positive-integer? height : exact-positive-integer? window-flags : (or/c symbol? (listof symbol?)) = '() renderer-name : (or/c string? #f) = #f cust : custodian? = (current-custodian)
(define-values (win ren) (make-window+renderer "My App" 800 600))
5.4 Functional Alternatives
For users who prefer explicit callbacks over syntax forms:
procedure
(call-with-sdl proc [#:flags flags]) → any
proc : (-> any) flags : (or/c symbol? (listof symbol?)) = 'video
procedure
(call-with-window title width height proc [ #:flags flags]) → any title : string? width : exact-positive-integer? height : exact-positive-integer? proc : (-> window? any) flags : (or/c symbol? (listof symbol?)) = '()
procedure
(call-with-renderer win proc [#:name name]) → any
win : window? proc : (-> renderer? any) name : (or/c string? #f) = #f
procedure
(call-with-window+renderer title width height proc [ #:window-flags window-flags #:renderer-name renderer-name]) → any title : string? width : exact-positive-integer? height : exact-positive-integer? proc : (-> window? renderer? any) window-flags : (or/c symbol? (listof symbol?)) = '() renderer-name : (or/c string? #f) = #f