コード例 #1
0
        private IMeshImp RegisterNewMesh(Mesh mesh)
        {
            // Configure newly created MeshImp to reflect Mesh's properties on GPU (allocate buffers)
            var meshImp = _renderContextImp.CreateMeshImp();

            // Begin Setup GPU Buffers / allocate GPU memory
            if (mesh.VerticesSet)
            {
                _renderContextImp.SetVertices(meshImp, mesh.Vertices);
            }

            if (mesh.UVsSet)
            {
                _renderContextImp.SetUVs(meshImp, mesh.UVs);
            }

            if (mesh.NormalsSet)
            {
                _renderContextImp.SetNormals(meshImp, mesh.Normals);
            }

            if (mesh.ColorsSet)
            {
                _renderContextImp.SetColors(meshImp, mesh.Colors);
            }

            if (mesh.BoneIndicesSet)
            {
                _renderContextImp.SetBoneIndices(meshImp, mesh.BoneIndices);
            }

            if (mesh.BoneWeightsSet)
            {
                _renderContextImp.SetBoneWeights(meshImp, mesh.BoneWeights);
            }

            if (mesh.TrianglesSet)
            {
                _renderContextImp.SetTriangles(meshImp, mesh.Triangles);
            }

            if (mesh.TangentsSet)
            {
                _renderContextImp.SetTangents(meshImp, mesh.Tangents);
            }

            if (mesh.BiTangentsSet)
            {
                _renderContextImp.SetBiTangents(meshImp, mesh.BiTangents);
            }

            // End Setup GPU Buffers

            // Setup handler to observe changes of the mesh data and dispose event (deallocation)
            mesh.MeshChanged += MeshChanged;

            meshImp.MeshType = (OpenGLPrimitiveType)mesh.MeshType;

            _identifierToMeshImpDictionary.Add(mesh.SessionUniqueIdentifier, meshImp);

            return(meshImp);
        }