]> git.jsancho.org Git - gacela.git/blobdiff - gacela/image.scm
Merge branch 'feature/stretch-images' into develop
[gacela.git] / gacela / image.scm
index b1ee674bbe501fe38e8b514277665d49c3c2485d..1fa861f09b440746c45c3a11d82dfa3d4352f3a1 100644 (file)
   #:use-module ((sdl2 image) #:prefix sdl2:)
   #:use-module ((sdl2 render) #:prefix sdl2:)
   #:use-module ((sdl2 surface) #:prefix sdl2:)
+  #:use-module (gl)
   #:export (bitmap
-           move-xy))
+            move-xy
+            stretch))
 
 (define (bitmap filename)
   (make-scene
    "bitmap"
    (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)
    "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* (stretch scene x #:optional (y x) (z y))
+  (make-scene
+   "stretch"
+   (lambda ()
+     (gl-scale x y z)
+     (display-scene scene))))