示例#1
0
    public static Block45ChunkGo CreateChunkGo(IVxSurfExtractReq req, Transform parent = null)
    {
        if (req.FillMesh(null) == 0)
        {
            return(null);
        }

        Block45ChunkGo b45Go = VFGoPool <Block45ChunkGo> .GetGo();

        req.FillMesh(b45Go._mf.mesh);

        // set material
        SurfExtractReqB45 b45ret = req as SurfExtractReqB45;

        if (b45ret != null)
        {
            List <Material> tmpMatList = new List <Material>();
            for (int i = 0; i < b45ret.matCnt; i++)
            {
                tmpMatList.Add(_defMats[b45ret.materialMap[i]]);
            }
            b45Go._mr.sharedMaterials = tmpMatList.ToArray();
        }
        if (parent != null)
        {
            b45Go.transform.parent = parent;
        }
        b45Go.gameObject.SetActive(true);
        return(b45Go);
    }
示例#2
0
    public void ChunkProcPostGenMesh(IVxSurfExtractReq ireq)
    {
        SurfExtractReqB45 req   = ireq as SurfExtractReqB45;
        Block45ChunkGo    b45Go = Block45ChunkGo.CreateChunkGo(req);

        req._chunkData.AttachChunkGo(b45Go);
    }
 public static void Free(SurfExtractReqB45 req)
 {
     req.verts       = null;
     req.uvs         = null;
     req.materialMap = null;
     req.subMeshIndices.Clear();
     s_reqPool.Free(req);
 }
示例#4
0
 public void RebuildMesh()
 {
     if (SurfExtractorsMan.B45BuildSurfExtractor != null)
     {
         foreach (Block45OctNode octNode in _octNodesToBuild)
         {
             SurfExtractorsMan.B45BuildSurfExtractor.AddSurfExtractReq(SurfExtractReqB45.Get(octNode.GetStamp(), octNode, ChunkProcPostGenMesh));
         }
     }
 }
示例#5
0
    void ChunkProcPostGenMesh(IVxSurfExtractReq ireq)
    {
        if (this == null)
        {
            return;
        }
        SurfExtractReqB45 req   = ireq as SurfExtractReqB45;
        Block45ChunkGo    b45Go = Block45ChunkGo.CreateChunkGo(req, transform);

        req._chunkData.AttachChunkGo(b45Go);
    }
示例#6
0
 public void RebuildMesh()
 {
     if (SurfExtractorsMan.B45BuildSurfExtractor != null)
     {
         for (int i = 0; i < _octNodesToBuild.Count; i++)
         {
             Block45OctNode octNode = _octNodesToBuild [i];
             SurfExtractorsMan.B45BuildSurfExtractor.AddSurfExtractReq(SurfExtractReqB45.Get(octNode.GetStamp(), octNode, ChunkProcPostGenMesh));
         }
     }
 }
    public static SurfExtractReqB45 Get(int chunkStamp, Block45OctNode chunkData, Action <SurfExtractReqB45> finHandler, int nVertsPerMesh = SurfExtractorsMan.c_vertsCntMax)
    {
        //SurfExtractReqB45 req = new SurfExtractReqB45 ();
        SurfExtractReqB45 req = s_reqPool.Get();

        req._chunkStamp    = chunkStamp;
        req._chunkData     = chunkData;
        req._nVertsPerMesh = nVertsPerMesh;
        req._finHandler    = finHandler;
        return(req);
    }
示例#8
0
 public void AddOctNode(Block45OctNode octNode)
 {
     if (_lstBlock45Datas == null)
     {
         _lstBlock45Datas       = new List <Block45OctNode>();
         _lstBlock45DatasStatus = new List <int>();
     }
     _lstBlock45Datas.Add(octNode);
     _lstBlock45DatasStatus.Add(Block45OctNodeStatus_Idle);
     if (IsInReq && octNode.VecData != null)
     {
         BuildStep = BuildStep_StartGoCreating;
         _lstBlock45DatasStatus[_lstBlock45DatasStatus.Count - 1] = Block45OctNodeStatus_InBuild;
         _helperProc.SurfExtractor.AddSurfExtractReq(SurfExtractReqB45.Get(octNode.GetStamp(), octNode, _helperProc.ChunkProcPostGenMesh, SurfExtractorsMan.c_vertsCntMax));
     }
 }
示例#9
0
 public void AddToBuildList(Block45OctNode octNode)          // need test
 {
     if (_lstBlock45Datas != null)
     {
         int n = _lstBlock45Datas.Count;
         for (int i = 0; i < n; i++)
         {
             if (_lstBlock45Datas[i] == octNode)
             {
                 _lstBlock45DatasStatus[i] = Block45OctNodeStatus_InBuild;
                 BuildStep = BuildStep_StartGoCreating;
                 break;
             }
         }
     }
     _helperProc.SurfExtractor.AddSurfExtractReq(SurfExtractReqB45.Get(octNode.GetStamp(), octNode, _helperProc.ChunkProcPostGenMesh, SurfExtractorsMan.c_vertsCntMax));
 }
    public void Exec()
    {
        reqToProceed = null;
        lock (_reqList)
            reqToProceed = PickReqToProceed();
        if (reqToProceed == null)
        {
            return;
        }

        swBlock45.setInputChunkData(_chunkDataToProceed);
        swBlock45.Rebuild();

        SurfExtractReqB45 req = reqToProceed as SurfExtractReqB45;
        //usedMaterialIndicesList.Add(swBlock45.getMaterialMap());

        int chunkTotalVerts = swBlock45.verts.Count;

        if (chunkTotalVerts > 0)
        {
            int chunkVertsCntThreshold = reqToProceed.MeshSplitThreshold;
            if (chunkTotalVerts <= chunkVertsCntThreshold)
            {
                req.verts       = swBlock45.verts.ToArray();
                req.uvs         = swBlock45.uvs.ToArray();
                req.matCnt      = swBlock45.matCnt;
                req.materialMap = swBlock45.materialMap;
                foreach (List <int> indice in swBlock45.subMeshIndices)
                {
                    req.subMeshIndices.Add(indice.ToArray());
                }
            }
            else
            {
                Debug.LogError("[SurfB45_CPU]:Out Of chunkVertsCntThreshold.");
            }
        }

        lock (_reqFinishedList)
            _reqFinishedList.Add(reqToProceed);
        _chunkDataToProceed = null;
    }
示例#11
0
    private void AddToBuildList()       // Can be called from the main thread
    {
        if (_lstBlock45Datas != null && _lstBlock45Datas.Count > 0)
        {
            int n = _lstBlock45Datas.Count;
            for (int i = 0; i < n; i++)
            {
                if (_lstBlock45Datas[i].VecData != null)
                {
                    BuildStep = BuildStep_StartGoCreating;
                    _lstBlock45DatasStatus[i] = Block45OctNodeStatus_InBuild;
                    _helperProc.SurfExtractor.AddSurfExtractReq(SurfExtractReqB45.Get(_lstBlock45Datas[i].GetStamp(), _lstBlock45Datas[i], _helperProc.ChunkProcPostGenMesh, SurfExtractorsMan.c_vertsCntMax));
                }
            }
        }

        if (BuildStep != BuildStep_StartGoCreating)
        {
            BuildStep = BuildStep_NotInBuild;
            EndUpdateNodeData();
        }
    }