From 0e627ad72df828882664b87293f9fec3602c5ceb Mon Sep 17 00:00:00 2001 From: Leo Prikler Date: Tue, 1 Dec 2020 15:16:50 +0100 Subject: render: Add more bindings. * sdl2/bindings.scm (sdl-render-get-integer-scale, sdl-render-get-scale) (sdl-render-get-logical-size, sdl-render-get-viewport) (sdl-render-set-integer-scale, sdl-render-set-scale) (sdl-render-set-logical-size, sdl-render-set-viewport): New procedures. * sdl2/render.scm (render-get-integer-scale, render-get-logical-size) (render-get-scale, render-get-viewport, render-set-integer-scale) (render-set-logical-size, render-set-scale, render-set-viewport): New procedures. * doc/api.texi: Document new (sdl2 render) bindings. --- sdl2/bindings.scm | 24 +++++++++++++++++++++ sdl2/render.scm | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) (limited to 'sdl2') diff --git a/sdl2/bindings.scm b/sdl2/bindings.scm index d2f3bbe..586011e 100644 --- a/sdl2/bindings.scm +++ b/sdl2/bindings.scm @@ -333,6 +333,30 @@ RETURN-TYPE and accept arguments of ARG-TYPES." (define-foreign sdl-render-fill-rects int "SDL_RenderFillRects" (list '* '* int)) +(define-foreign sdl-render-get-integer-scale + sdl-bool "SDL_RenderGetIntegerScale" (list '*)) + +(define-foreign sdl-render-get-logical-size + void "SDL_RenderGetLogicalSize" (list '* '* '*)) + +(define-foreign sdl-render-get-scale + void "SDL_RenderGetScale" (list '* '* '*)) + +(define-foreign sdl-render-get-viewport + void "SDL_RenderGetViewport" (list '* '*)) + +(define-foreign sdl-render-set-integer-scale + int "SDL_RenderSetIntegerScale" (list '* sdl-bool)) + +(define-foreign sdl-render-set-logical-size + int "SDL_RenderSetLogicalSize" (list '* int int)) + +(define-foreign sdl-render-set-scale + int "SDL_RenderSetScale" (list '* float float)) + +(define-foreign sdl-render-set-viewport + int "SDL_RenderSetViewport" (list '* '*)) + ;;; ;;; Events diff --git a/sdl2/render.scm b/sdl2/render.scm index 6a9c0b2..4cf0a28 100644 --- a/sdl2/render.scm +++ b/sdl2/render.scm @@ -122,6 +122,68 @@ color." "Display RENDERER." (ffi:sdl-render-present (unwrap-renderer renderer))) +(define (renderer-logical-size renderer) + "Return the logical size used by RENDERER." + (let ((bv (make-bytevector (* 2 (sizeof int)) 0))) + (ffi:sdl-render-get-logical-size (unwrap-renderer renderer) + (bytevector->pointer bv) + (bytevector->pointer (sizeof int))) + (bytevector->sint-list bv (native-endianness) (sizeof int)))) + +(define (set-renderer-logical-size! renderer width height) + "Set the logical size of RENDERER to WIDTH x HEIGHT." + (unless (zero? (ffi:sdl-render-set-logical-size + (unwrap-renderer renderer) + width height)) + (sdl-error "set-renderer-logical-size!" "Failed to set logical size"))) + +(define (renderer-scale renderer) + "Return the scale used by RENDERER." + (let ((bv (make-bytevector (* 2 (sizeof float)) 0))) + (ffi:sdl-render-get-scale (unwrap-renderer renderer) + (bytevector->pointer bv) + (bytevector->pointer (sizeof float))) + (list (bytevector-ieee-single-native-ref bv 0) + (bytevector-ieee-single-native-ref bv 1)))) + +(define (set-renderer-scale! renderer scale-x scale-y) + "Set the drawing scale of RENDERER according to SCALE-X and SCALE-Y +scaling factors." + (unless (zero? (ffi:sdl-render-set-logical-size (unwrap-renderer renderer) + scale-x scale-y)) + (sdl-error "set-renderer-scale!" "Failed to set scale"))) + +(define (renderer-integer-scale renderer) + "Returns #t if integer scaling is forced on RENDERER." + (not + (zero? + (ffi:sdl-render-get-integer-scale + (unwrap-renderer renderer))))) + +(define (set-renderer-integer-scale! renderer enabled?) + "If ENABLED? is #t, enable integer scaling for RENDERER, otherwise +disable it." + (unless (zero? (ffi:sdl-render-set-integer-scale + (unwrap-renderer renderer) + (ffi:boolean->sdl-bool enabled?))) + (sdl-error "set-renderer-integer-scale!" "Failed to set integer scale"))) + +(define (renderer-viewport renderer) + "Return the drawing area used by RENDERER." + (let ((rect ((@@ (sdl2 rect) make-rect) 0 0 0 0))) + (ffi:sdl-render-get-viewport (unwrap-renderer renderer) + ((@@ (sdl2 rect) unwrap-rect) rect)) + rect)) + +(define (set-renderer-viewport! renderer rect) + "Set the drawing area for RENDERER to RECT." + (unless (zero? (ffi:sdl-render-set-viewport + (unwrap-renderer renderer) + (if rect + ((@@ (sdl2 rect) unwrap-rect) rect) + %null-pointer))) + (sdl-error "set-renderer-viewport!" "Failed to set viewport"))) + (define (set-render-draw-blend-mode renderer blend-mode) "Set blend mode of RENDERER to BLEND-MODE." (ffi:sdl-set-render-draw-blend-mode -- cgit v1.2.3