public void OnUpdate() { // deal map request var dt = DateTime.Now; while (mapTasks.Count > 0) { var task = mapTasks.Dequeue(); DealMapRequest(task); TimeSpan span = DateTime.Now - dt; if (span.TotalMilliseconds > 2.0) // { break; } } // deal mesh request result if (meshDataThreadInfoQueue.Count > 0) { for (int i = 0; i < meshDataThreadInfoQueue.Count; i++) { MeshTaskInfo threadInfo = meshDataThreadInfoQueue.Dequeue(); threadInfo.callBack(threadInfo); } } }
protected override void DealMeshRequest(MeshTaskInfo info) { info.meshData = GenerateTerrainMesh(info.mapData, TexWid, info.lod); lock (meshDataThreadInfoQueue) { meshDataThreadInfoQueue.Enqueue(info); } }
void OnMeshDataReceived(MeshTaskInfo info) { MeshData meshData = info.meshData; //主线程回调 isWaitForData = false; mesh = meshData.CreateMesh();// TODO pool mesh DictionaryPool <MeshData> .Return(meshData); hasMesh = true; updateCallback(); }
protected virtual void DealMeshRequest(MeshTaskInfo info) { }