summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo Prikler <leo.prikler@student.tugraz.at>2021-06-14 18:35:33 +0200
committerDavid Thompson <dthompson2@worcester.edu>2021-06-15 09:21:24 -0400
commit031605783e630d46b7294d6ac8bfbf5e4884bb82 (patch)
tree5f035448c22dedeec37a0d321165c7cbfdd99b2d
parentac42781f672a855ea6f1553b071055409501f2b0 (diff)
Add support for texture blend modes.
* sdl2/bindings.scm (sdl-set-texture-blend-mode): New variable. * sdl2/render.scm (set-texture-blend-mode!): New variable.
-rw-r--r--doc/api.texi5
-rw-r--r--sdl2/bindings.scm3
-rw-r--r--sdl2/render.scm6
3 files changed, 14 insertions, 0 deletions
diff --git a/doc/api.texi b/doc/api.texi
index 288d0a6..8a352a4 100644
--- a/doc/api.texi
+++ b/doc/api.texi
@@ -1254,6 +1254,11 @@ Set the color mod of @var{texture}.
Set the alpha mod of @var{texture}.
@end deffn
+@deffn {Procedure} set-texture-blend-mode! texture blend-mode
+Set the blend of @var{texture} to @var{blend-mode}. @xref{Blend
+Modes} for more information.
+@end deffn
+
@node Blend Modes
@section Blend Modes
diff --git a/sdl2/bindings.scm b/sdl2/bindings.scm
index 8d85c63..7f12b45 100644
--- a/sdl2/bindings.scm
+++ b/sdl2/bindings.scm
@@ -321,6 +321,9 @@ RETURN-TYPE and accept arguments of ARG-TYPES."
(define-foreign sdl-get-texture-alpha-mod
int "SDL_GetTextureAlphaMod" '(* *))
+(define-foreign sdl-set-texture-blend-mode
+ int "SDL_SetTextureBlendMode" (list '* int))
+
(define-foreign sdl-set-render-draw-blend-mode
int "SDL_SetRenderDrawBlendMode" (list '* int))
diff --git a/sdl2/render.scm b/sdl2/render.scm
index e12fad1..5c3b9b0 100644
--- a/sdl2/render.scm
+++ b/sdl2/render.scm
@@ -403,6 +403,12 @@ TEXTURE."
(bytevector-uint-ref bv (* 2 (sizeof int)) (native-endianness) (sizeof int))
(bytevector-uint-ref bv (* 3 (sizeof int)) (native-endianness) (sizeof int)))))
+(define (set-texture-blend-mode! texture blend-mode)
+ (unless (zero? (ffi:sdl-set-texture-blend-mode
+ (unwrap-texture texture)
+ ((@@ (sdl2 blend-mode) blend-mode-bitmask) blend-mode)))
+ (sdl-error "set-texure-blend-mode!" "Failed to set texture blend mode")))
+
(define (set-texture-color-mod! texture r g b)
"Get color mod of TEXTURE as a list of the integers."
(unless (zero? (ffi:sdl-set-texture-color-mod (unwrap-texture texture) r g b))