public unsafe bool SetTextureVertices(IMesh maxMesh, MyMesh myMesh) { bool countChanged = false; if (maxMesh.NumTVerts != myMesh.NumTextureCoordinates) { maxMesh.SetNumTVerts(myMesh.NumTextureCoordinates, false); countChanged = true; } IntPtr p3h = maxMesh.GetTVertPtr(0).NativePointer; float* p3 = (float*)p3h.ToPointer(); int elementsPerVertex = myMesh.TextureCoordinates.Count / myMesh.NumTextureCoordinates; switch (elementsPerVertex) { case 2: for (int i = 0; i < myMesh.NumTextureCoordinates; i++) { p3[(i * 3) + 0] = myMesh.TextureCoordinates[(i * 2) + 0]; p3[(i * 3) + 1] = myMesh.TextureCoordinates[(i * 2) + 1]; p3[(i * 3) + 2] = 0.0f; }; break; case 3: Marshal.Copy(myMesh.TextureCoordinates.ToArray(), 0, p3h, myMesh.NumTextureCoordinates * 3); break; default: throw new NotImplementedException(("Unable to handle texture coordinates with " + elementsPerVertex + " elements.")); } return countChanged; }