void UpdateMesh(ref GeomMesh gm, Mesh dst) { if (dst == null) { return; } dst.Clear(); if (m_ogc.FillPoints(ref gm, m_points)) { dst.SetVertices(m_points.List); } if (m_ogc.FillNormals(ref gm, m_normals)) { dst.SetNormals(m_normals.List); } if (m_ogc.FillTangents(ref gm, m_tangents)) { dst.SetTangents(m_tangents.List); } if (m_ogc.FillUV0(ref gm, m_uv0)) { dst.SetUVs(0, m_uv0.List); } if (m_ogc.FillUV1(ref gm, m_uv1)) { dst.SetUVs(1, m_uv0.List); } if (m_ogc.FillColors(ref gm, m_colors)) { dst.SetColors(m_colors.List); } int si = 0; var subm = new GeomSubmesh(); for (int smi = 0; smi < gm.submeshCount; ++smi) { m_ogc.GetSubmesh(gm.submeshOffset + smi, ref subm); if (subm.topology == Topology.Triangles) { m_ogc.FillIndices(ref subm, m_indices); dst.SetTriangles(m_indices.List, si++, false); } } }
void UpdateMeshes() { if (!m_ogc) { m_ogc = OutputGeomCache.Create(); } if (m_gc.Assign(m_ogc)) { var gm = new GeomMesh(); int meshCount = m_ogc.meshCount; for (int mi = 0; mi < meshCount; ++mi) { m_ogc.GetMesh(mi, ref gm); UpdateMesh(ref gm, FindOrAddMesh(m_gc.GetPath(mi))); } } }
[DllImport("NativeVertexCache")] static extern bool nvcOGCCopyColors(IntPtr self, ref GeomMesh gm, IntPtr dst);
[DllImport("NativeVertexCache")] static extern void nvcOGCGetMesh(IntPtr self, int index, ref GeomMesh dst);
public bool FillColors(ref GeomMesh gm, PinnedList <Color> dst) { dst.ResizeDiscard(gm.vertexCount); return(nvcOGCCopyColors(self, ref gm, dst)); }
public bool FillUV1(ref GeomMesh gm, PinnedList <Vector2> dst) { dst.ResizeDiscard(gm.vertexCount); return(nvcOGCCopyUV1(self, ref gm, dst)); }
public void GetMesh(int index, ref GeomMesh dst) { nvcOGCGetMesh(self, index, ref dst); }