<!ELEMENT mesh (sharedgeometry?, submeshes, 
	skeletonlink?, boneassignments?, levelofdetail?, submeshnames?)>
<!ELEMENT sharedgeometry (vertexbuffer+)>
<!ATTLIST sharedgeometry
	vertexcount CDATA #REQUIRED>
<!ELEMENT submeshes (submesh+)>
<!ELEMENT submesh (faces,geometry?,boneassignments?)>
<!ATTLIST submesh 
	material 			CDATA 			#REQUIRED
	usesharedvertices	(true|false)	"false"
	use32bitindexes		(true|false)	"false"
	operationtype       (triangle_list|triangle_strip|triangle_fan)	"triangle_list">
<!ELEMENT faces (face+)>
<!ATTLIST faces 
	count		CDATA	#REQUIRED>
<!ELEMENT face EMPTY>
<!-- Do not need all 3 vertex indexes if triangle_strip or triangle_fan
     since every face after the first one is defined by a single vertex -->
<!ATTLIST face 
	v1		CDATA	#REQUIRED
	v2		CDATA	#IMPLIED
	v3		CDATA	#IMPLIED>
<!ELEMENT geometry (vertexbuffer+)>
<!ATTLIST geometry
	vertexcount		CDATA		#REQUIRED >
<!ELEMENT skeletonlink EMPTY>
<!ATTLIST skeletonlink
	name	CDATA	#REQUIRED>
<!ELEMENT boneassignments (vertexboneassignment+)>
<!ELEMENT vertexboneassignment EMPTY>
<!ATTLIST vertexboneassignment 
	vertexindex		CDATA	#REQUIRED
	boneindex		CDATA	#REQUIRED
	weight			CDATA	"1.0">
<!ELEMENT levelofdetail ( (lodmanual|lodgenerated)+ )>
<!ATTLIST levelofdetail 
	numlevels		CDATA			#REQUIRED
	manual			(true|false)	"false">
<!ELEMENT lodmanual EMPTY>
<!ATTLIST lodmanual
	fromdepthsquared	CDATA 	#REQUIRED
	meshname			CDATA	#REQUIRED>
<!ELEMENT lodgenerated (lodfacelist)>
<!ATTLIST lodgenerated
	fromdepthsquared	CDATA 	#REQUIRED
	meshname			CDATA	#REQUIRED>
<!ELEMENT lodfacelist (face)+>
<!ATTLIST lodfacelist
	submeshindex		CDATA	#REQUIRED
	numfaces			CDATA	#REQUIRED>
	
<!ELEMENT vertexbuffer (vertex+)>
<!ATTLIST vertexbuffer
	positions 					(true|false)	"false"
	normals 					(true|false)	"false"
	colours_diffuse 			(true|false)	"false"
	colours_specular 			(true|false)	"false"
	texture_coords				(0|1|2|3|4|5|6|7) 	"0"
	texture_coord_dimensions_0 	(0|1|2)		 	"2"
	texture_coord_dimensions_1 	(0|1|2)		 	"2"
	texture_coord_dimensions_2 	(0|1|2)		 	"2"
	texture_coord_dimensions_3 	(0|1|2)		 	"2"
	texture_coord_dimensions_4 	(0|1|2)		 	"2"
	texture_coord_dimensions_5 	(0|1|2)		 	"2"
	texture_coord_dimensions_6 	(0|1|2)		 	"2"
	texture_coord_dimensions_7 	(0|1|2)		 	"2">
<!ELEMENT vertex (position?, normal?, colour_diffuse?, colour_specular?, 
	texcoord*)>
<!ELEMENT position EMPTY>
<!ATTLIST position 
	x	CDATA	#REQUIRED	
	y	CDATA	#REQUIRED	
	z	CDATA	#REQUIRED >
<!ELEMENT normal EMPTY>
<!ATTLIST normal 
	x	CDATA	#REQUIRED	
	y	CDATA	#REQUIRED	
	z	CDATA	#REQUIRED >
<!ELEMENT colour_diffuse EMPTY>
<!ATTLIST colour_diffuse 
	value	CDATA	#REQUIRED>
<!ELEMENT colour_specular EMPTY>
<!ATTLIST colour_specular 
	value	CDATA	#REQUIRED>
<!ELEMENT texcoord EMPTY>
<!ATTLIST texcoord
	u	CDATA	#REQUIRED	
	v	CDATA	"0"	
	w	CDATA	"0" >
<!ELEMENT submeshnames (submeshname+)>
<!ELEMENT submeshname EMPTY>
<!ATTLIST submeshname 
	name	CDATA	#REQUIRED
	index	CDATA	#REQUIRED >
	
				
	




