Example #1
0
        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;
            }
        }