; 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})