X-Git-Url: https://git.jsancho.org/?p=gacela.git;a=blobdiff_plain;f=gacela%2Fimage.scm;fp=gacela%2Fimage.scm;h=236ac744fd420e83bf770e606346c46c02cf0d3a;hp=e6c8f4ef74a38fbf24a59213656ec51d8645facf;hb=bd985fa207b6aef6ed73096e9ea0e0db52a5f21c;hpb=6cc07be7e64e74546bf295ad42b5d2475624e3fc diff --git a/gacela/image.scm b/gacela/image.scm index e6c8f4e..236ac74 100644 --- a/gacela/image.scm +++ b/gacela/image.scm @@ -25,7 +25,8 @@ #:use-module (gl) #:export (image move - scale)) + scale + over)) (define (calculate proc-or-value) (if (procedure? proc-or-value) @@ -46,6 +47,9 @@ (set! h/2 (/ (sdl2:surface-height image) 2))) (gl-enable (oes-framebuffer-object texture-2d)) (sdl2:bind-texture texture) + (gl-enable (oes-framebuffer-object blend)) + (set-gl-blend-function (blending-factor-src src-alpha) + (blending-factor-dest one-minus-src-alpha)) (gl-begin (begin-mode quads) (gl-texture-coordinates 0 0) (gl-vertex (- w/2) h/2 0) @@ -55,6 +59,7 @@ (gl-vertex w/2 (- h/2) 0) (gl-texture-coordinates 0 1) (gl-vertex (- w/2) (- h/2) 0)) + (gl-disable (oes-framebuffer-object blend)) (gl-disable (oes-framebuffer-object texture-2d)))))) (define* (move scene x y #:optional (z 0)) @@ -70,5 +75,17 @@ (make-scene "scale" (lambda () - (gl-scale x y z) + (gl-scale (calculate x) + (calculate y) + (calculate z)) (display-scene scene)))) + +(define (over . scenes) + (make-scene + "over" + (lambda () + (let display ((sc scenes)) + (cond ((not (null? sc)) + (with-gl-push-matrix + (display-scene (car sc))) + (display (cdr sc))))))))