X-Git-Url: https://git.jsancho.org/?p=guile-assimp.git;a=blobdiff_plain;f=src%2Fassimp.scm;h=5de82f271b3220fd18cb9bcd67ec9ba51a9ce7c3;hp=e4d8f8e6f1b78e342a74c5e10e6f68f0bc11123a;hb=f8051b0cda2d613101577273959b60cff09eb427;hpb=279b472d96c8bbe3edb18f1bd3998bb39b65324b diff --git a/src/assimp.scm b/src/assimp.scm index e4d8f8e..5de82f2 100644 --- a/src/assimp.scm +++ b/src/assimp.scm @@ -16,6 +16,7 @@ (define-module (assimp assimp) + #:use-module (ice-9 iconv) #:use-module (rnrs bytevectors) #:use-module (system foreign)) @@ -75,6 +76,22 @@ (native-endianness) 4)) +(define (get-aiString index) + (lambda (pointer) + (let* ((length (bv-uint-ref pointer index)) + (data (pointer->bytevector pointer length (+ index 4)))) + (bytevector->string data (fluid-ref %default-port-encoding))))) + +(define* (get-pointer index #:optional wrap-proc) + (lambda (pointer) + (let ((p (bv-uint-ref pointer index))) + (cond ((= p 0) '()) + (else + (let ((p2 (make-pointer p))) + (list + (cond (wrap-proc (wrap-proc p2)) + (else p2))))))))) + (define* (get-pointer-of-pointers-procedure num-index root-index #:optional wrap-proc) (lambda (pointer) (let* ((num (bv-uint-ref pointer num-index)) @@ -113,11 +130,11 @@ ;;; Nodes (define-type node - (name (lambda (p) (bv-uint-ref p 0))) ;check, it's a struct - (transformation (lambda (p) (bv-uint-ref p 1028))) ;check, it's a struct - (parent (lambda (p) (bv-uint-ref p 1092))) - (children (get-pointer-of-pointers-procedure 1096 1100)) - (meshes (get-pointer-of-pointers-procedure 1104 1108))) + (name (get-aiString 0)) + (transformation (lambda (p) (array->list (pointer->bytevector p 16 1028 'f32)))) + (parent (get-pointer 1092 wrap-node)) + (children (get-pointer-of-pointers-procedure 1096 1100 wrap-node)) + (meshes (get-pointer-of-pointers-procedure 1104 1108 wrap-mesh))) (export node? node-contents)