42 lines
1.5 KiB
Fennel
42 lines
1.5 KiB
Fennel
; LIBGL_ALWAYS_INDIRECT=1
|
|
(local fennel (require :fennel))
|
|
(import-macros {: def : q : ttype : static : eval : printform} :terra)
|
|
(local SDL (require :SDL))
|
|
|
|
(local CreateWindowAndRenderer (def [w int h int flags uint32]
|
|
(var window [SDL.Window] nil)
|
|
(var renderer [SDL.Renderer] nil)
|
|
(var result (SDL.CreateWindowAndRenderer w h flags (& window) (& renderer)))
|
|
(return result window renderer)))
|
|
|
|
(local clear (static (def [renderer [SDL.Renderer]]
|
|
(SDL.SetRenderDrawColor renderer 0 0 0 255)
|
|
(SDL.RenderClear renderer))))
|
|
|
|
(local hello (def [renderer [SDL.Renderer]]
|
|
(clear renderer)
|
|
(SDL.SetRenderDrawColor renderer 0 0 255 255)
|
|
(var rect (SDL.Rect {x 100 y 100 w 50 h 30}))
|
|
(SDL.RenderFillRect renderer (& rect))
|
|
(SDL.RenderPresent renderer)))
|
|
|
|
(local last-event (printform (static (q (SDL.Event {type 0})))))
|
|
(fn event-loop [f]
|
|
(while (not= (SDL.PollEvent (last-event:getpointer)) 0) (f (last-event:get))))
|
|
|
|
(local rect (def [x int y int w int h int]
|
|
(return (SDL.Rect {x x y y w w h h}))))
|
|
|
|
(fn patch-clear [r g b]
|
|
(let [new-clear (def [renderer [SDL.Renderer]]
|
|
(SDL.SetRenderDrawColor renderer r g b 255)
|
|
(SDL.RenderClear renderer))]
|
|
((def [] (set clear new-clear))))) ; no idea why (clear:set new-clear) doesn't work
|
|
|
|
(SDL.Init SDL.INIT_EVERYTHING)
|
|
(let [windowflags SDL.WINDOW_RESIZABLE
|
|
(ok window renderer) (unpacktuple (CreateWindowAndRenderer 640 480 windowflags))]
|
|
(event-loop #nil)
|
|
(hello renderer)
|
|
{: window : renderer : rect : event-loop : clear : hello : patch-clear})
|