]> git.jsancho.org Git - guile-irrlicht.git/blobdiff - irrlicht/video.scm
SMaterial and vertices
[guile-irrlicht.git] / irrlicht / video.scm
index b0f48d999957b95dd1a2cca85b00989b093718ee..a394c01b667de8580b8dd1877f599b8fd385a9eb 100644 (file)
   #:use-module ((irrlicht bindings core) #:prefix ffi-core:)
   #:use-module ((irrlicht bindings video) #:prefix ffi-video:)
   #:use-module (irrlicht util)
+  #:use-module (irrlicht util foreign)
   #:export (begin-scene
             end-scene
             get-fps
             get-texture
-            get-video-driver-name)
-  #:re-export ((ffi-video:make-s3dvertex . make-s3dvertex)
-               (ffi-video:vertex-position . vertex-position)))
+            get-video-driver-name
+            make-s3dvertex
+            vertex-position
+            make-material))
 
 (define* (begin-scene driver
                       #:key
 (define (get-video-driver-name driver)
   (pointer->string
    (ffi-video:get-video-driver-name driver)))
+
+;; s3d vertices
+(define (make-s3dvertex position normal color t-coords)
+  (ffi-video:pointer->s3dvertex
+   (make-c-struct ffi-video:s3dvertex
+                  (list position normal color t-coords))))
+
+(define (vertex-position vertex)
+  (let ((data (parse-c-struct (ffi-video:s3dvertex->pointer vertex)
+                              ffi-video:s3dvertex)))
+    (car data)))
+
+;; smaterial
+(define* (make-material #:key (wireframe #f) (lighting #t))
+  (let ((material
+         (list
+          ;; textureLayer[4]
+          (list %null-pointer 0 0 0 0 0 0 %null-pointer %null-pointer)
+          (list %null-pointer 0 0 0 0 0 0 %null-pointer %null-pointer)
+          (list %null-pointer 0 0 0 0 0 0 %null-pointer %null-pointer)
+          (list %null-pointer 0 0 0 0 0 0 %null-pointer %null-pointer)
+          ffi-video:EMT_SOLID         ; materialType
+          (list 255 255 255 255)      ; ambientColor
+          (list 255 255 255 255)      ; diffuseColor
+          (list 0 0 0 0)              ; emissiveColor
+          (list 255 255 255 255)      ; specularColor
+          0                           ; shininess
+          0                           ; materialTypeParam
+          0                           ; materialTypeParam2
+          1                           ; thickness
+          ffi-video:ECFN_LESSEQUAL    ; zBuffer
+          ffi-video:EAAM_SIMPLE       ; antiAliasing
+          (list
+           ffi-video:ECP_ALL          ; colorMask
+           ffi-video:ECM_DIFFUSE      ; colorMaterial
+           ffi-video:EBO_NONE         ; blendOperation
+           0                          ; polygonOffsetFactor
+           ffi-video:EPO_FRONT        ; polygonOffsetDirection
+           (bool->integer wireframe)  ; wireframe
+           (bool->integer #f)         ; pointCloud
+           (bool->integer #t)         ; gouraudShading
+           (bool->integer lighting)   ; lighting
+           (bool->integer #t)         ; zWriteEnable
+           (bool->integer #t)         ; backfaceCulling
+           (bool->integer #f)         ; frontfaceCulling
+           (bool->integer #f)         ; fogEnable
+           (bool->integer #f)         ; normalizeNormals
+           (bool->integer #t)         ; useMipMaps
+           ))))
+    (ffi-video:pointer->smaterial
+     (make-c-struct+ ffi-video:smaterial material))))