render: Add texture color/alpha mod bindings.
authorHugo Hörnquist <hugo@lysator.liu.se>
Sun, 9 Jun 2019 18:48:21 +0000 (20:48 +0200)
committerDavid Thompson <dthompson2@worcester.edu>
Sun, 9 Jun 2019 22:15:04 +0000 (18:15 -0400)
* sdl2/bindings.scm (sdl-set-texture-color-mod,
  sdl-get-texture-color-mod, sdl-set-texture-alpha-mod,
  sdl-get-texture-alpha-mood): New procedures.
* sdl2/render.scm (set-texture-color-mod!, set-texture-alpha-mod!,
  get-texture-color-mod, get-texture-alpha-mod): New procedures.
* doc/api.texi: Document new procedures.

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

index 67bb1b2..9184ed3 100644 (file)
@@ -1130,6 +1130,22 @@ Convert @var{surface} to a texture suitable for @var{renderer}.
 Free the memory used by @var{texture}.
 @end deffn
 
+@deffn {Procedure} get-texture-color-mod texture
+Get color mod of @var{texture} as a list of the integers.
+@end deffn
+
+@deffn {Procedure} get-texture-alpha-mod texture
+Get alpha mod of @var{texture} as a single integer.
+@end deffn
+
+@deffn {Procedure} set-texture-color-mod! texture r g b
+Set the color mod of @var{texture}.
+@end deffn
+
+@deffn {Procedure} set-texture-alpha-mod! texture a
+Set the alpha mod of @var{texture}.
+@end deffn
+
 @node Images
 @section Images
 
index 2ebc2ed..238320c 100644 (file)
@@ -259,6 +259,18 @@ RETURN-TYPE and accept arguments of ARG-TYPES."
 (define-foreign sdl-destroy-texture
   void "SDL_DestroyTexture" '(*))
 
+(define-foreign sdl-set-texture-color-mod
+  int "SDL_SetTextureColorMod" (list '* uint8 uint8 uint8))
+
+(define-foreign sdl-get-texture-color-mod
+  int "SDL_GetTextureColorMod" '(* * * *))
+
+(define-foreign sdl-set-texture-alpha-mod
+  int "SDL_SetTextureAlphaMod" (list '* uint8))
+
+(define-foreign sdl-get-texture-alpha-mod
+  int "SDL_GetTextureAlphaMod" '(* *))
+
 (define-foreign sdl-set-render-draw-color
   int "SDL_SetRenderDrawColor" (list '* uint8 uint8 uint8 uint8))
 
index 57a0e17..d48d938 100644 (file)
             render-fill-rect
             render-fill-rects
 
+            set-texture-color-mod!
+            get-texture-color-mod
+            set-texture-alpha-mod!
+            get-texture-alpha-mod
+
             make-texture
             delete-texture!
             surface->texture))
@@ -238,6 +243,39 @@ created with 'texture')"
   "Free the memory used by TEXTURE."
   (ffi:sdl-destroy-texture (unwrap-texture texture)))
 
+(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))
+    (sdl-error "set-texture-color-mod!" "Failed to set texture color mod")))
+
+(define (set-texture-alpha-mod! texture a)
+  "Sets alpha mod of TEXTURE."
+  (unless (zero? (ffi:sdl-set-texture-alpha-mod (unwrap-texture texture) a))
+    (sdl-error "set-texture-alpha-mod!" "Failed to set texture alpha mod")))
+
+(define (get-texture-alpha-mod texture)
+  "Get alpha mod of TEXTURE as a single integer."
+  (let ((bv (make-bytevector 1)))
+    (let ((result (ffi:sdl-get-texture-alpha-mod
+                   (unwrap-texture texture)
+                   (bytevector->pointer bv 0))))
+      (unless (zero? result)
+        (sdl-error "get-texture-alpha-mod" "Failed to get texture allpha mod"))
+
+      (bytevector-u8-ref bv 0))))
+
+(define (get-texture-color-mod texture)
+  "Get color mod of TEXTURE as a list of the integers."
+  (let ((bv (make-bytevector 3)))
+    (let ((result (ffi:sdl-get-texture-color-mod
+                   (unwrap-texture texture)
+                   (bytevector->pointer bv 0)
+                   (bytevector->pointer bv 1)
+                   (bytevector->pointer bv 2))))
+      (unless (zero? result)
+        (sdl-error "get-texture-color-mod" "Failed to get texture color mod"))
+      (bytevector->u8-list bv))))
+
 (define* (render-copy renderer texture
                       #:key (angle 0) srcrect dstrect center)
   "Copy TEXTURE to the rendering target of RENDERER."