(define-module (irrlicht bindings video)
#:use-module (system foreign)
+ #:use-module ((irrlicht bindings core) #:prefix ffi-core:)
#:use-module (irrlicht util foreign))
;; E_DRIVER_TYPE enum
(define-foreign get-video-driver-name
'* "irr_video_getName" (list '*))
+
+;; s3dvertex struct
+(define-wrapped-pointer-type s3dvertex-type
+ s3dvertex?
+ pointer->s3dvertex s3dvertex->pointer
+ (lambda (vertex port)
+ (format port "#<s3dvertex ~x>"
+ (pointer-address (s3dvertex->pointer vertex)))))
+
+(export s3dvertex->pointer)
+
+(define-public s3dvertex
+ (list ffi-core:vector3df
+ ffi-core:vector3df
+ scolor
+ ffi-core:vector2df))
+
+(define-public (make-s3dvertex position normal color t-coords)
+ (pointer->s3dvertex
+ (make-c-struct s3dvertex (list position normal color t-coords))))
+
+(define-public (vertex-position vertex)
+ (let ((data (parse-c-struct (s3dvertex->pointer vertex) s3dvertex)))
+ (car data)))
+
+;; smateriallayer struct
+(define-public smateriallayer
+ (list '* uint8 uint8 uint8 uint8 uint8 int8 '* '*))
+
+;; smaterial struct
+(define-wrapped-pointer-type smaterial-type
+ smaterial?
+ pointer->smaterial smaterial->pointer
+ (lambda (material port)
+ (format port "#<smaterial ~x>"
+ (pointer-address (smaterial->pointer material)))))
+
+(export smaterial->pointer)
+
+(define-public smaterial
+ (list smateriallayer smateriallayer smateriallayer smateriallayer ; textureLayer[4]
+ uint32 ; materialType
+ scolor ; ambientColor
+ scolor ; diffuseColor
+ scolor ; emissiveColor
+ scolor ; specularColor
+ float ; shininess
+ float ; materialTypeParam
+ float ; materialTypeParam2
+ float ; thickness
+ uint8 ; zBuffer
+ uint8 ; antiAliasing
+ (bit-field-group
+ (uint8 4) ; colorMask:4
+ (uint8 3) ; colorMaterial:3
+ (uint32 4) ; blendOperation:4
+ (uint8 3) ; polygonOffsetFactor:3
+ (uint32 1) ; polygonOffsetDirection:1
+ (uint8 1) ; wireframe:1
+ (uint8 1) ; pointCloud:1
+ (uint8 1) ; gouraudShading:1
+ (uint8 1) ; lighting:1
+ (uint8 1) ; zWriteEnable:1
+ (uint8 1) ; backfaceCulling:1
+ (uint8 1) ; frontfaceCulling:1
+ (uint8 1) ; fogEnable:1
+ (uint8 1) ; normalizeNormals:1
+ (uint8 1) ; useMipMaps:1
+ )))
+
+;; (define-public (make-material #:key
+;; (wireframe #f)
+;; (lighting #t))
+;; material)