]> git.jsancho.org Git - guile-assimp.git/blobdiff - src/assimp.scm
A lot of functionality added
[guile-assimp.git] / src / assimp.scm
index 917a6853732dece010142646e1294684b19cca5f..dad56342e5eff3afa8a23cbd42048090b615325c 100644 (file)
   #:use-module (assimp low-level material)
   #:use-module (assimp low-level matrix)
   #:use-module (assimp low-level mesh)
+  #:use-module (assimp low-level postprocess)
   #:use-module (assimp low-level scene)
   #:use-module (assimp low-level types)
   #:use-module (assimp low-level vector)
-  #:use-module (system foreign))
+  #:use-module (system foreign)
+  #:re-export (ai-material-key
+              ai-process-steps
+              ai-process-convert-to-left-handed
+              ai-process-preset-target-realtime-fast
+              ai-process-preset-target-realtime-quality
+              ai-process-preset-target-realtime-max-quality))
 
 
 ;;; Scenes
        ai-material-num-allocated)
 
 
+(define-public (ai-get-material-color mat color-type)
+  (let ((pmat (unwrap-ai-material mat))
+       (pkey (string->pointer (car color-type)))
+       (type (cadr color-type))
+       (index (caddr color-type))
+       (pout (parse-aiColor4D (make-list 4 0) #:reverse #t)))
+    (let ((res (aiGetMaterialColor pmat pkey type index pout)))
+      (if (< res 0)
+         res
+         (wrap-ai-color4d pout)))))
+
+(define-public (ai-get-material-float-array mat color-type max)
+  (let ((pmat (unwrap-ai-material mat))
+       (pkey (string->pointer (car color-type)))
+       (type (cadr color-type))
+       (index (caddr color-type))
+       (pout (make-c-struct (make-list max float) '(0)))
+       (pmax (make-c-struct (list unsigned-int) (list max))))
+    (let ((res (aiGetMaterialFloatArray pmat pkey type index pout pmax)))
+      (if (< res 0)
+         res
+         (parse-c-struct pout (make-list max float))))))
+
+(define-public (ai-get-material-integer-array mat color-type max)
+  (let ((pmat (unwrap-ai-material mat))
+       (pkey (string->pointer (car color-type)))
+       (type (cadr color-type))
+       (index (caddr color-type))
+       (pout (make-c-struct (make-list max int) '(0)))
+       (pmax (make-c-struct (list unsigned-int) (list max))))
+    (let ((res (aiGetMaterialIntegerArray pmat pkey type index pout pmax)))
+      (if (< res 0)
+         res
+         (parse-c-struct pout (make-list max int))))))
+
+
 ;;; Faces
 
 (define-conversion-type parse-aiFace -> ai-face
     (aiTransformVecByMatrix4 cvec cmat)
     (wrap-ai-vector3d cvec)))
 
+(define-public (ai-multiply-matrix3 m1 m2)
+  (let ((cm1 (parse-aiMatrix3x3 (map cdr (ai-matrix3x3-contents m1)) #:reverse #t))
+       (cm2 (parse-aiMatrix3x3 (map cdr (ai-matrix3x3-contents m2)) #:reverse #t)))
+    (aiMultiplyMatrix3 cm1 cm2)
+    (wrap-ai-matrix3x3 cm1)))
+
 (define-public (ai-multiply-matrix4 m1 m2)
   (let ((cm1 (parse-aiMatrix4x4 (map cdr (ai-matrix4x4-contents m1)) #:reverse #t))
        (cm2 (parse-aiMatrix4x4 (map cdr (ai-matrix4x4-contents m2)) #:reverse #t)))
     (aiMultiplyMatrix4 cm1 cm2)
     (wrap-ai-matrix4x4 cm1)))
+
+(define-public (ai-identity-matrix3)
+  (let ((cmat (parse-aiMatrix3x3 (make-list 9 0) #:reverse #t)))
+    (aiIdentityMatrix3 cmat)
+    (wrap-ai-matrix3x3 cmat)))
+
+(define-public (ai-identity-matrix4)
+  (let ((cmat (parse-aiMatrix4x4 (make-list 16 0) #:reverse #t)))
+    (aiIdentityMatrix4 cmat)
+    (wrap-ai-matrix4x4 cmat)))
+
+(define-public (ai-transpose-matrix3 mat)
+  (let ((cmat (parse-aiMatrix3x3 (map cdr (ai-matrix3x3-contents mat)) #:reverse #t)))
+    (aiTransposeMatrix3 cmat)
+    (wrap-ai-matrix3x3 cmat)))
+
+(define-public (ai-transpose-matrix4 mat)
+  (let ((cmat (parse-aiMatrix4x4 (map cdr (ai-matrix4x4-contents mat)) #:reverse #t)))
+    (aiTransposeMatrix4 cmat)
+    (wrap-ai-matrix4x4 cmat)))