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); }
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); }
public void RebuildMesh() { if (SurfExtractorsMan.B45BuildSurfExtractor != null) { foreach (Block45OctNode octNode in _octNodesToBuild) { SurfExtractorsMan.B45BuildSurfExtractor.AddSurfExtractReq(SurfExtractReqB45.Get(octNode.GetStamp(), octNode, ChunkProcPostGenMesh)); } } }
void ChunkProcPostGenMesh(IVxSurfExtractReq ireq) { if (this == null) { return; } SurfExtractReqB45 req = ireq as SurfExtractReqB45; Block45ChunkGo b45Go = Block45ChunkGo.CreateChunkGo(req, transform); req._chunkData.AttachChunkGo(b45Go); }
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); }
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)); } }
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; }
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(); } }