]> git.jsancho.org Git - guile-irrlicht.git/commitdiff
Check null objects
authorJavier Sancho <jsf@jsancho.org>
Sun, 17 May 2020 11:49:58 +0000 (13:49 +0200)
committerJavier Sancho <jsf@jsancho.org>
Sun, 17 May 2020 11:49:58 +0000 (13:49 +0200)
examples/01-hello-world.scm
irrlicht.scm
irrlicht/base.scm
irrlicht/device.scm
irrlicht/foreign.scm
irrlicht/scene.scm

index 4029b7ec23a15c16c577ea99607460cd7d83b769..c320ed3af560ff81bb835129b3e75abbf61c2d77 100644 (file)
@@ -29,8 +29,6 @@
   (create-device
    #:device-type 'software
    #:window-size '(640 480)))
   (create-device
    #:device-type 'software
    #:window-size '(640 480)))
-(when (not device)
-  (exit #f))
 
 (set-window-caption! device "Hello World! - Irrlicht Engine Demo")
 
 
 (set-window-caption! device "Hello World! - Irrlicht Engine Demo")
 
 
 ;; load a Quake2 model
 (define mesh (get-mesh scene-manager "media/sydney.md2"))
 
 ;; load a Quake2 model
 (define mesh (get-mesh scene-manager "media/sydney.md2"))
-(when (is-empty? mesh)
-  (drop! device)
-  (exit #f))
-
 (define node (add-animated-mesh-scene-node! scene-manager mesh))
 (define node (add-animated-mesh-scene-node! scene-manager mesh))
-(when node
-  (set-material-flag! node 'lighting #f)
-  (set-md2-animation! node 'stand)
-  (set-material-texture! node 0 (get-texture driver "media/sydney.bmp")))
+(set-material-flag! node 'lighting #f)
+(set-md2-animation! node 'stand)
+(set-material-texture! node 0 (get-texture driver "media/sydney.bmp"))
 
 ;; place camera
 (add-camera-scene-node! scene-manager #:position '(0 30 -40) #:lookat '(0 5 0))
 
 ;; place camera
 (add-camera-scene-node! scene-manager #:position '(0 30 -40) #:lookat '(0 5 0))
index 0e468c2957981dda7f6fa303cc9f6983154fef5d..c9bbd68b0dc57f1b1361a5e74654d377ea5b531e 100644 (file)
@@ -56,7 +56,6 @@
                get-scene-manager
                get-texture
                get-video-driver
                get-scene-manager
                get-texture
                get-video-driver
-               is-empty?
                is-window-active?
                make-box3d
                make-material
                is-window-active?
                make-box3d
                make-material
index db1de76f1bd8333f03a0a74bcb93528f74dcedb8..76a7a6bd1c725c3e1dc7b3206e3813cd58b26123 100644 (file)
@@ -23,8 +23,7 @@
   #:use-module (system foreign)
   #:export (<irrlicht-base>
             irr-class
   #:use-module (system foreign)
   #:export (<irrlicht-base>
             irr-class
-            irr-pointer
-            is-empty?))
+            irr-pointer))
 
 (define-class <irrlicht-base> ()
   (irr-class #:init-value "")
 
 (define-class <irrlicht-base> ()
   (irr-class #:init-value "")
@@ -34,6 +33,3 @@
 ;; in multiple inherited classes
 (define-method (irr-class (obj <irrlicht-base>))
   (slot-ref obj 'irr-class))
 ;; in multiple inherited classes
 (define-method (irr-class (obj <irrlicht-base>))
   (slot-ref obj 'irr-class))
-
-(define-method (is-empty? (obj <irrlicht-base>))
-  (equal? (irr-pointer obj) %null-pointer))
index b18a58e690c49870a4b340f33b86ee6b76008757..04988d39602e24deb51ead3f2cce967fccbaa750 100644 (file)
        "In procedure create-device: Wrong type argument (expecting <event-receiver>):"
        receiver))
 
        "In procedure create-device: Wrong type argument (expecting <event-receiver>):"
        receiver))
 
-  (make <irrlicht-device>
-    #:irr-pointer
-    ((get-irrlicht-proc "createDevice")
-     device-type
-     window-size
-     bits
-     fullscreen
-     stencilbuffer
-     vsync
-     receiver)))
+  (let* ((createDevice (get-irrlicht-proc "createDevice"))
+         (device-pointer (createDevice device-type window-size bits fullscreen stencilbuffer
+                                       vsync receiver)))
+    (cond ((null-pointer? device-pointer)
+           (error "In procedure create-device: Device cannot be created"))
+          (else
+           (make <irrlicht-device> #:irr-pointer device-pointer)))))
 
 (define-method (get-cursor-control (device <irrlicht-device>))
   (let ((getCursorControl (get-irrlicht-proc "getCursorControl" device)))
 
 (define-method (get-cursor-control (device <irrlicht-device>))
   (let ((getCursorControl (get-irrlicht-proc "getCursorControl" device)))
index f6e203622f55db18eae8907fce38f3c26533c4dd..94aab7c8fe7c7c979c68877b00c24cef922d7e64 100644 (file)
 
 
 (define-module (irrlicht foreign)
 
 
 (define-module (irrlicht foreign)
+  #:use-module (system foreign)
   #:use-module (irrlicht base)
   #:use-module (irrlicht base)
-  #:export (get-irrlicht-proc))
+  #:export (get-irrlicht-proc
+            null-pointer?))
 
 ;; We use a hash table to store foreign irrlicht methods related with their
 ;; classes
 
 ;; We use a hash table to store foreign irrlicht methods related with their
 ;; classes
@@ -40,3 +42,6 @@
              new-proc))
           (else
            proc))))
              new-proc))
           (else
            proc))))
+
+(define (null-pointer? pointer)
+  (eq? pointer %null-pointer))
index 425d01ec026bd8c08fa666beb6d764518deab0f8..9626f4b33cdabe64723d1463852fd9a016492327 100644 (file)
          (rotation '(0 0 0))
          (scale '(1 1 1))
          (also-add-if-mesh-pointer-zero #f))
          (rotation '(0 0 0))
          (scale '(1 1 1))
          (also-add-if-mesh-pointer-zero #f))
-    (make <animated-mesh-scene-node>
-      #:irr-pointer
-      ((get-irrlicht-proc "addAnimatedMeshSceneNode" scene-manager parent)
-       scene-manager
-       mesh
-       parent
-       id
-       position
-       rotation
-       scale
-       also-add-if-mesh-pointer-zero))))
+    (let* ((addAnimatedMeshSceneNode (get-irrlicht-proc "addAnimatedMeshSceneNode"
+                                                        scene-manager
+                                                        parent))
+           (node-pointer (addAnimatedMeshSceneNode scene-manager mesh parent id position
+                                                   rotation scale also-add-if-mesh-pointer-zero)))
+      (cond ((null-pointer? node-pointer)
+             (error "In procedure add-animated-mesh-scene-node!: Scene node cannot be created"))
+            (else
+             (make <animated-mesh-scene-node> #:irr-pointer node-pointer))))))
 
 (define-method (add-camera-scene-node! (scene-manager <scene-manager>) . rest)
   (let-keywords rest #f
 
 (define-method (add-camera-scene-node! (scene-manager <scene-manager>) . rest)
   (let-keywords rest #f
    scene-manager))
 
 (define-method (get-mesh (scene-manager <scene-manager>) filename)
    scene-manager))
 
 (define-method (get-mesh (scene-manager <scene-manager>) filename)
-  (make <animated-mesh>
-    #:irr-pointer
-    ((get-irrlicht-proc "getMesh" scene-manager)
-     scene-manager
-     filename)))
+  (let* ((getMesh (get-irrlicht-proc "getMesh" scene-manager))
+         (mesh-pointer (getMesh scene-manager filename)))
+    (cond ((null-pointer? mesh-pointer)
+           (error "In procedure get-mesh: Mesh cannot be created"))
+          (else
+           (make <animated-mesh> #:irr-pointer mesh-pointer)))))
 
 (define-method (get-root-scene-node (scene-manager <scene-manager>))
   (let ((getRootSceneNode (get-irrlicht-proc "getRootSceneNode" scene-manager)))
 
 (define-method (get-root-scene-node (scene-manager <scene-manager>))
   (let ((getRootSceneNode (get-irrlicht-proc "getRootSceneNode" scene-manager)))