-(define AI_MAX_NUMBER_OF_COLOR_SETS 8)
-
-(define-type mesh
- (num-primitive-types (lambda (p) (bv-uint-ref p 0)))
- (vertices (get-pointer-of-pointers 4 12))
- (faces (get-structs-array 8 124 8 wrap-face))
- (normals (lambda (p) (bv-uint-ref p 16)))
- (tangents (lambda (p) (bv-uint-ref p 20)))
- (bitangents (lambda (p) (bv-uint-ref p 24)))
- (colors (lambda (p) (bv-uint-ref p 28))) ;AI_MAX_NUMBER_OF_COLOR_SETS
- (texture-coords (lambda (p) (bv-uint-ref p 60))) ;AI_MAX_NUMBER_OF_TEXTURECOORDS
- (num-uv-components (lambda (p) (bv-uint-ref p 92))) ;AI_MAX_NUMBER_OF_TEXTURECOORDS
- (bones (get-pointer-of-pointers 128 132))
- (material-index (lambda (p) (bv-uint-ref p 136))))
+(define-conversion-type parse-aiMesh -> mesh
+ (name (sized-string 'mName))
+ (primitive-types (field 'mPrimitiveTypes))
+ (vertices (array 'mNumVertices 'mVertices #:element-proc get-element-address))
+ (faces (wrap (array 'mNumFaces 'mFaces #:element-size 8 #:element-proc get-element-address) wrap-face))
+ (normals (array 'mNumVertices 'mNormals #:element-size 12 #:element-proc get-element-address))
+ (tangents (array 'mNumVertices 'mTangents #:element-size 12 #:element-proc get-element-address))
+ (bitangents (array 'mNumVertices 'mBitangents #:element-size 12 #:element-proc get-element-address))
+ (colors (field 'mColors))
+ (texture-coords (field 'mTextureCoords))
+ (num-uv-components (field 'mNumUVComponents))
+ (bones (array 'mNumBones 'mBones))
+ (material-index (field 'mMaterialIndex))
+)