internal ModelInstance(Model model, AssetLoadContext loadContext) { Model = model; _graphicsDevice = loadContext.GraphicsDevice; ModelBoneInstances = new ModelBoneInstance[model.BoneHierarchy.Bones.Length]; for (var i = 0; i < model.BoneHierarchy.Bones.Length; i++) { ModelBoneInstances[i] = new ModelBoneInstance(model.BoneHierarchy.Bones[i]); } RelativeBoneTransforms = new Matrix4x4[model.BoneHierarchy.Bones.Length]; AbsoluteBoneTransforms = new Matrix4x4[model.BoneHierarchy.Bones.Length]; BoneVisibilities = new bool[model.BoneHierarchy.Bones.Length]; BoneFrameVisibilities = new bool[model.BoneHierarchy.Bones.Length]; for (var i = 0; i < model.BoneHierarchy.Bones.Length; i++) { BoneVisibilities[i] = true; BoneFrameVisibilities[i] = true; } if (model.HasSkinnedMeshes) { _skinningBuffer = SkinningBuffer = AddDisposable(_graphicsDevice.ResourceFactory.CreateBuffer( new BufferDescription( (uint)(64 * model.BoneHierarchy.Bones.Length), BufferUsage.StructuredBufferReadOnly | BufferUsage.Dynamic, 64, true))); _skinningBones = new Matrix4x4[model.BoneHierarchy.Bones.Length]; } else { SkinningBuffer = loadContext.StandardGraphicsResources.GetNullStructuredBuffer(64); } AnimationInstances = new List <AnimationInstance>(); RenderItemConstantsBufferPS = AddDisposable(new ConstantBuffer <MeshShaderResources.RenderItemConstantsPS>(_graphicsDevice, "RenderItemConstantsPS")); RenderItemConstantsBufferPS.Value = new MeshShaderResources.RenderItemConstantsPS { HouseColor = Vector3.One, Opacity = 1.0f, TintColor = Vector3.One }; RenderItemConstantsBufferPS.Update(_graphicsDevice); MeshInstances = new ModelMeshInstance[model.SubObjects.Length]; for (var i = 0; i < model.SubObjects.Length; i++) { var renderObject = model.SubObjects[i].RenderObject; if (!(renderObject is ModelMesh mesh)) { continue; } MeshInstances[i] = AddDisposable( new ModelMeshInstance( mesh, this, loadContext)); } UnknownBools = new bool[model.SubObjects.Length]; }