示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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();
        }
示例#4
0
        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);
                }
            }
        }
示例#5
0
 public void MainThreadUpdate(LargeSketch sketch, object tag)
 {
     onReady();
 }