X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=irrlicht.scm;h=1946da1c6b5c21c3b4247ba2f45393843ae49eaa;hb=c0cf88d754a6df204df73d4d043905a2760cfb85;hp=7cbb8860f72f19aa870ca18526b9c2fb17b0b4da;hpb=e5e7eb38adfd41fb25e8f808f0501ffaac2812b8;p=guile-irrlicht.git diff --git a/irrlicht.scm b/irrlicht.scm index 7cbb886..1946da1 100644 --- a/irrlicht.scm +++ b/irrlicht.scm @@ -23,11 +23,24 @@ #:use-module (system foreign) #:use-module ((irrlicht bindings) #:prefix ffi:) #:use-module ((irrlicht bindings core) #:prefix ffi-core:) + #:use-module ((irrlicht bindings gui) #:prefix ffi-gui:) #:use-module ((irrlicht bindings video) #:prefix ffi-video:) - #:export (create-device + #:export (;; device + create-device get-video-driver - get-scene-manager)) + get-gui-environment + get-scene-manager + set-window-caption! + device-run? + device-drop! + ;; driver + begin-scene + end-scene + ;; gui + add-static-text! + gui-draw-all)) +;; Device functions (define* (create-device #:optional (device-type 'software) (window-size '(640 480)) @@ -44,13 +57,68 @@ ('opengl ffi-video:EDT_OPENGL) ('count ffi-video:EDT_COUNT))) (wsize (make-c-struct ffi-core:dimension2d window-size))) - (ffi:create-device driver wsize bits - (if fullscreen 1 0) - (if stencilbuffer 1 0) - (if vsync 1 0)))) + (let ((device (ffi:create-device driver wsize bits + (if fullscreen 1 0) + (if stencilbuffer 1 0) + (if vsync 1 0)))) + (if (null-pointer? device) #f device)))) (define (get-video-driver device) (ffi:get-video-driver device)) +(define (get-gui-environment device) + (ffi:get-gui-environment device)) + (define (get-scene-manager device) (ffi:get-scene-manager device)) + +(define (set-window-caption! device text) + (ffi:set-window-caption device (string->pointer text))) + +(define (device-run? device) + (if (> (ffi:run device) 0) #t #f)) + +(define (device-drop! device) + (if (> (ffi:drop device) 0) #t #f)) + + +;; Driver functions +(define* (begin-scene driver + #:optional + (back-buffer #t) + (z-buffer #t) + (color '(255 0 0 0)) + (video-data %null-pointer) + (source-rect '())) + (ffi-video:begin-scene driver + (if back-buffer 1 0) + (if z-buffer 1 0) + (make-c-struct ffi-video:scolor color) + video-data + (if (null? source-rect) + %null-pointer + (make-c-struct ffi-core:rect source-rect)))) + +(define (end-scene driver) + (ffi-video:end-scene driver)) + + +;; GUI functions +(define* (add-static-text! gui-env text rectangle + #:optional + (border #f) + (word-wrap #t) + (parent %null-pointer) + (id -1) + (fill-background #f)) + (ffi-gui:add-static-text gui-env + (string->pointer text) + (make-c-struct ffi-core:rect rectangle) + (if border 1 0) + (if word-wrap 1 0) + parent + id + (if fill-background 1 0))) + +(define (gui-draw-all gui-env) + (ffi-gui:draw-all gui-env))