X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=gacela%2Fimage.scm;h=278a7d767846db11e4a92af2d6fe3f7769593cfb;hb=e1e0e1c4a98a9b27391eeef40dea40a59d983710;hp=370bbd179cdf0415e340d3ba66d2b58df4b79ea9;hpb=2a08d93dcd9a52442e59c185ac85d4344e716650;p=gacela.git diff --git a/gacela/image.scm b/gacela/image.scm index 370bbd1..278a7d7 100644 --- a/gacela/image.scm +++ b/gacela/image.scm @@ -22,21 +22,35 @@ #:use-module ((sdl2 image) #:prefix sdl2:) #:use-module ((sdl2 render) #:prefix sdl2:) #:use-module ((sdl2 surface) #:prefix sdl2:) - #:export (import-bitmap - move-xy)) + #:use-module (gl) + #:export (image + move-xy + scale)) -(define (import-bitmap filename) +(define (image filename) (make-scene - "bitmap" + "image" (let ((image (sdl2:load-image filename)) - (texture #f)) - (let ((a 0)) - (lambda* (#:key (xy '(0 0))) - (if (not texture) - (set! texture (sdl2:surface->texture %sdl-renderer image))) - (sdl2:clear-renderer %sdl-renderer) - (sdl2:render-copy %sdl-renderer texture #:dest-rect (sdl2:make-rect (car xy) (cadr xy) (sdl2:surface-width image) (sdl2:surface-height image))) - (sdl2:present-renderer %sdl-renderer)))))) + (texture #f) + (w/2 0) + (h/2 0)) + (lambda () + (when (not texture) + (set! texture (sdl2:surface->texture %sdl-renderer image)) + (set! w/2 (/ (sdl2:surface-width image) 2)) + (set! h/2 (/ (sdl2:surface-height image) 2))) + (gl-enable (oes-framebuffer-object texture-2d)) + (sdl2:bind-texture texture) + (gl-begin (begin-mode quads) + (gl-texture-coordinates 0 0) + (gl-vertex (- w/2) h/2 0) + (gl-texture-coordinates 1 0) + (gl-vertex w/2 h/2 0) + (gl-texture-coordinates 1 1) + (gl-vertex w/2 (- h/2) 0) + (gl-texture-coordinates 0 1) + (gl-vertex (- w/2) (- h/2) 0)) + (gl-disable (oes-framebuffer-object texture-2d)))))) (define (move-xy x y scene) (define (to-integer n) @@ -45,5 +59,12 @@ "move-xy" (lambda () (let ((xy (list (to-integer (if (procedure? x) (x) x)) - (to-integer (if (procedure? y) (y) y))))) + (to-integer (if (procedure? y) (y) y))))) (display-scene scene #:xy xy))))) + +(define* (scale scene x #:optional (y x) (z y)) + (make-scene + "scale" + (lambda () + (gl-scale x y z) + (display-scene scene))))