render: Add SDL_RenderDrawLines binding.
authorPierre-Antoine Rouby <contact@parouby.fr>
Wed, 29 May 2019 20:53:44 +0000 (22:53 +0200)
committerDavid Thompson <dthompson2@worcester.edu>
Fri, 31 May 2019 13:51:18 +0000 (09:51 -0400)
* sdl2/bindings.scm (sdl-render-draw-lines): New procedure.
* sdl2/render.scm (render-draw-lines): New procedure.
* doc/api.texi: Document it.

doc/api.texi
sdl2/bindings.scm
sdl2/render.scm

index b692725..85d03b3 100644 (file)
@@ -1061,6 +1061,11 @@ Draw a line from (@var{x1}, @var{y1}) to (@var{x2}, @var{y2}) on the
 current rendering target of @var{renderer}.
 @end deffn
 
+@deffn {Procedure} render-draw-lines renderer point
+Draw a series of connected lines from @var{points} on the current
+rendering target of @var{renderer}.
+@end deffn
+
 @deffn {Procedure} render-draw-point renderer x y
 Draw a point at (@var{x}, @var{y}) on the current rendering target
 of @var{renderer}.
index bf8db7a..900b641 100644 (file)
@@ -252,6 +252,9 @@ RETURN-TYPE and accept arguments of ARG-TYPES."
 (define-foreign sdl-render-draw-line
   int "SDL_RenderDrawLine" (list '* int int int int))
 
+(define-foreign sdl-render-draw-lines
+  int "SDL_RenderDrawLines" (list '* '* int))
+
 (define-foreign sdl-render-draw-point
   int "SDL_RenderDrawPoint" (list '* int int))
 
index 326745f..0b92bc4 100644 (file)
@@ -39,6 +39,7 @@
             render-copy
             set-render-draw-color
             render-draw-line
+            render-draw-lines
             render-draw-point
             render-draw-points
 
@@ -115,6 +116,21 @@ color."
   "Draw line on RENDERER."
   (ffi:sdl-render-draw-line (unwrap-renderer renderer) x1 y1 x2 y2))
 
+(define (render-draw-lines renderer points)
+  "Draw lines connecting POINTS on RENDERER."
+  (define (fill-bv bv l n)
+    (match l
+      (() bv)
+      (((x y) . r)
+       (s32vector-set! bv n x)
+       (s32vector-set! bv (+ n 1) y)
+       (fill-bv bv r (+ 2 n)))))
+  (let* ((count (length points))
+         (bv (fill-bv (make-s32vector (* count 2)) points 0)))
+    (ffi:sdl-render-draw-lines (unwrap-renderer renderer)
+                               (bytevector->pointer bv)
+                               count)))
+
 (define (render-draw-point renderer x y)
   "Draw point on RENDERER."
   (ffi:sdl-render-draw-point (unwrap-renderer renderer) x y))