;;; guile-irrlicht --- FFI bindings for Irrlicht Engine
-;;; Copyright (C) 2019 Javier Sancho <jsf@jsancho.org>
+;;; Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
;;;
;;; This file is part of guile-irrlicht.
;;;
(define-module (irrlicht)
- #:use-module (ice-9 match)
- #: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 (;; 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))
- (bits 16)
- (fullscreen #f)
- (stencilbuffer #f)
- (vsync #f))
- (let ((driver (match device-type
- ('null ffi-video:EDT_NULL)
- ('software ffi-video:EDT_SOFTWARE)
- ('burnings ffi-video:EDT_BURNINGSVIDEO)
- ('direct3d8 ffi-video:EDT_DIRECT3D8)
- ('direct3d9 ffi-video:EDT_DIRECT3D9)
- ('opengl ffi-video:EDT_OPENGL)
- ('count ffi-video:EDT_COUNT)))
- (wsize (make-c-struct ffi-core:dimension2d window-size)))
- (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))
+ #:use-module (irrlicht device)
+ #:use-module (irrlicht gui)
+ #:re-export (add-static-text!
+ create-device
+ get-gui-environment
+ get-scene-manager
+ get-video-driver
+ set-window-caption!))