protected override void WriteMeshPrimitive(MeshPrimitiveReader srcPrimitive, Effect effect) { if (srcPrimitive.IsSkinned) { WriteMeshPrimitive <VertexSkinned>(effect, srcPrimitive); } else { WriteMeshPrimitive <VertexPositionNormalTexture>(effect, srcPrimitive); } }
private void _WriteMeshPrimitive(MeshPrimitiveReader srcPrim, SRCMATERIAL srcMaterial) { if (srcMaterial == null) { srcMaterial = GetDefaultMaterial(); } var effect = _MatFactory.GetMaterial(srcMaterial, srcPrim.IsSkinned); if (effect == null) { effect = CreateEffect(srcMaterial, srcPrim.IsSkinned); _MatFactory.Register(srcMaterial, srcPrim.IsSkinned, effect); } WriteMeshPrimitive(srcPrim, effect); }
private void CreateMeshPart(ModelMeshPart dstPart, MeshPrimitive srcPart, MeshNormalsFallback normalsFunc, int maxBones) { var doubleSided = srcPart.Material?.DoubleSided ?? false; var srcGeometry = new MeshPrimitiveReader(srcPart, doubleSided, normalsFunc); var eff = srcGeometry.IsSkinned ? _MatFactory.UseSkinnedEffect(srcPart.Material) : _MatFactory.UseStaticEffect(srcPart.Material); dstPart.Effect = eff; var vb = srcGeometry.IsSkinned ? CreateVertexBuffer(srcGeometry.ToXnaSkinned()) : CreateVertexBuffer(srcGeometry.ToXnaStatic()); dstPart.VertexBuffer = vb; dstPart.NumVertices = srcGeometry.VertexCount; dstPart.VertexOffset = 0; dstPart.IndexBuffer = CreateIndexBuffer(srcGeometry.TriangleIndices); dstPart.PrimitiveCount = srcGeometry.TriangleIndices.Length; dstPart.StartIndex = 0; }
protected void WriteMeshPrimitive <TVertex>(Effect effect, MeshPrimitiveReader primitive) where TVertex : unmanaged, IVertexType { _MeshWriter.WriteMeshPrimitive <TVertex>(_CurrentMeshIndex, effect, primitive); }
protected abstract void WriteMeshPrimitive(MeshPrimitiveReader srcPrimitive, Effect effect);