private void MeshChanged(object sender, MeshDataEventArgs meshDataEventArgs) { IMeshImp toBeUpdatedMeshImp; if (!_identifierToMeshImpDictionary.TryGetValue(meshDataEventArgs.Mesh.SessionUniqueIdentifier, out toBeUpdatedMeshImp)) { throw new KeyNotFoundException("Mesh is not registered."); } Mesh mesh = meshDataEventArgs.Mesh; switch (meshDataEventArgs.ChangedEnum) { case MeshChangedEnum.Disposed: // Add the meshImp to the toBeDeleted Stack... _toBeDeletedMeshImps.Push(toBeUpdatedMeshImp); // remove the meshImp from the dictionary, the meshImp data now only resides inside the gpu and will be cleaned up on bottom of Render(Mesh mesh) _identifierToMeshImpDictionary.Remove(mesh.SessionUniqueIdentifier); // add the identifier to the reusable identifiers stack //_reusableIdentifiers.Push(meshDataEventArgs.Mesh.Identifier); break; case MeshChangedEnum.Vertices: _renderContextImp.SetVertices(toBeUpdatedMeshImp, mesh.Vertices); break; case MeshChangedEnum.Triangles: _renderContextImp.SetTriangles(toBeUpdatedMeshImp, mesh.Triangles); break; case MeshChangedEnum.Colors: _renderContextImp.SetColors(toBeUpdatedMeshImp, mesh.Colors); break; case MeshChangedEnum.Normals: _renderContextImp.SetNormals(toBeUpdatedMeshImp, mesh.Normals); break; case MeshChangedEnum.Uvs: _renderContextImp.SetUVs(toBeUpdatedMeshImp, mesh.UVs); break; case MeshChangedEnum.BoneIndices: _renderContextImp.SetBoneIndices(toBeUpdatedMeshImp, mesh.BoneIndices); break; case MeshChangedEnum.BoneWeights: _renderContextImp.SetBoneWeights(toBeUpdatedMeshImp, mesh.BoneWeights); break; case MeshChangedEnum.Tangents: _renderContextImp.SetTangents(toBeUpdatedMeshImp, mesh.Tangents); break; case MeshChangedEnum.BiTangents: _renderContextImp.SetBiTangents(toBeUpdatedMeshImp, mesh.BiTangents); break; } }