Example #1
0
        protected override void EndGeneration(Mesh mesh)
        {
            uint flags = MeshDataBufferFlags;

            if (HasUVs)
            {
                flags |= (uint)MeshBuffer.UV;
            }

            using (MeshData data = new MeshData(vertices.Length, triangles.Length, Allocator.Temp, flags))
            {
                NativeArray <float3> .Copy(vertices, data.Vertices);

                NativeArray <int> .Copy(triangles, data.Triangles);

                if (HasNormals)
                {
                    NativeArray <float3> .Copy(normals, data.Normals);
                }
                if (HasUVs)
                {
                    NativeArray <float2> .Copy(uvs, data.UVs);
                }

                data.UpdateMesh(mesh, MeshData.UpdateMode.Clear);
            }

            Dispose();
        }
        protected override void EndGeneration(Mesh mesh)
        {
            var(doesGenerateUvs, doesGenerateNormals) = CheckAllInfoForMiscData();

            NativeList <float3> vertices  = new NativeList <float3>(Allocator.Temp);
            NativeList <int>    triangles = new NativeList <int>(Allocator.Temp);
            NativeList <float3> normals   = doesGenerateNormals ? new NativeList <float3>(Allocator.Temp) : default;
            NativeList <float2> uvs       = doesGenerateUvs ? new NativeList <float2>(Allocator.Temp) : default;

            List <Offset> submeshOffsets = new List <Offset>();
            int           submeshStart   = 0;
            int           vertexOffset   = 0;

            foreach (var handlerArray in submeshInfos)
            {
                int submeshLength = 0;
                foreach (var handler in handlerArray)
                {
                    var(addedVerts, addedTris) = handler.CompleteAppendData(vertices, triangles, normals, uvs);

                    OffsetTriangles(triangles, submeshStart + submeshLength, addedTris, vertexOffset);

                    submeshLength += addedTris;
                    vertexOffset  += addedVerts;

                    if (normals.IsCreated && !handler.DoesGenerateNormals)
                    {
                        FillList(normals, vertices.Length - normals.Length, DefaultNormal);
                    }
                    if (uvs.IsCreated && !handler.DoesGenerateUvs)
                    {
                        FillList(uvs, vertices.Length - uvs.Length, DefaultUV);
                    }
                }
                submeshOffsets.Add(new Offset()
                {
                    index = submeshStart, length = submeshLength
                });
                submeshStart += submeshLength;
            }

            uint flags = MeshDataBufferFlags;

            if (uvs.IsCreated)
            {
                flags |= (uint)MeshBuffer.UV;
            }

            using (MeshData data = new MeshData(vertices.Length, triangles.Length, submeshOffsets.ToArray(), Allocator.Temp, flags))
            {
                NativeArray <float3> .Copy(vertices, data.Vertices);

                NativeArray <int> .Copy(triangles, data.Triangles);

                if (normals.IsCreated)
                {
                    NativeArray <float3> .Copy(normals, data.Normals);
                }
                if (uvs.IsCreated)
                {
                    NativeArray <float2> .Copy(uvs, data.UVs);
                }

                data.UpdateMesh(mesh, MeshData.UpdateMode.Clear);
            }

            SafeDispose(ref vertices);
            SafeDispose(ref triangles);
            SafeDispose(ref normals);
            SafeDispose(ref uvs);
        }
Example #3
0
 public void UpdateMesh(Mesh mesh)
 {
     combinedMesh.UpdateMesh(mesh, MeshData.UpdateMode.Clear);
 }