internal MeshGameObject(LargeSketch sketch, MeshBuilder builder, object tag) { this.sketch = sketch; geom_ids = builder.geom_ids; face_mat_builder = builder.face_mat; all_triangles = builder.triangles_final; all_stems = builder.stems_final; mesh = new Mesh(); if (builder.positions.Count >= 0xFFE0) { mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; } mesh.SetVertices(builder.positions); if (builder.normals != null) { mesh.SetNormals(builder.normals); } if (builder.uvs != null) { mesh.SetUVs(0, builder.uvs); } RefreshRenderer(tag); }
public void MainThreadUpdate(LargeSketch sketch, object tag) { var mgos = sketch.mgos; int index = renderer_index; while (!(index < mgos.Count)) { mgos.Add(null); } Debug.Assert(mgos[index] == null); mgos[index] = new MeshGameObject(sketch, this, tag); }
internal MeshBuilder(LargeSketch sketch, IMaterialBuilder face_mat, int level) { this.face_mat = face_mat; positions = new List <Vector3>(); if (level >= 1) { normals = new List <Vector3>(); } if (level >= 2) { uvs = new List <Vector2>(); } triangles = new List <int>(); // if level == 0, should remain empty stems = new List <int>(); geom_ids = new List <int>(); renderer_index = sketch.NewRendererIndex(); }
public void MainThreadUpdate(LargeSketch sketch, object tag) { foreach (var gindex in renderers) { Debug.Assert((gindex & GINDEX_MASK) == 0); int renderer_index = (int)(gindex >> GINDEX_SHIFT); var mgo = sketch.mgos[renderer_index]; if (mgo == null) { continue; } mgo.UpdateRendering(tag); if (mgo.IsDefinitelyEmpty()) { mgo.DestroyMesh(); sketch.mgos[renderer_index] = null; sketch.AddFreeRendererIndex(renderer_index); } } }
public void MainThreadUpdate(LargeSketch sketch, object tag) { onReady(); }