#: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-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)))
+ (window-size '(640 480))
+ (bits 16)
+ (fullscreen #f)
+ (stencilbuffer #f)
+ (vsync #f))
(let ((driver (match device-type
('null ffi-video:EDT_NULL)
('software ffi-video:EDT_SOFTWARE)
('opengl ffi-video:EDT_OPENGL)
('count ffi-video:EDT_COUNT)))
(wsize (make-c-struct ffi-core:dimension2d window-size)))
- (ffi:create-device driver wsize)))
+ (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))