public WaitRenderChunkJob DequeueWaitRender() { lock (_waitRenderChunkJobs) { if (_waitRenderChunkJobs.Count > 0) { WaitRenderChunkJob job = _waitRenderChunkJobs.Dequeue(); return(job); } return(null); } }
private IEnumerator Render() { while (_render) { WaitRenderChunkJob job = _world.WorldGenerator.DataProcessorManager.DequeueWaitRender(); if (job != null) { _isRendering = true; EventManager.SendEvent(EventMacro.CHUNK_RENDER_START, job.chunk); RenderChunkMesh(job.chunk, job.meshData); if (!job.chunk.isGenerated) { job.chunk.isGenerated = true; EventManager.SendEvent(EventMacro.CHUNK_GENERATE_FINISH, job.chunk); } } else { _isRendering = false; } yield return(null); } }
//进入等待渲染队列,worldRender将从该队列中拿出数据渲染 public void EnqueueWaitRender(Chunk chunk, MeshData meshData) { lock (_waitRenderChunkJobs) { WaitRenderChunkJob job = null; foreach (var item in _waitRenderChunkJobs) { if (item.chunk.worldPos.EqualOther(chunk.worldPos)) { job = item; break; } } if (job == null) { job = new WaitRenderChunkJob(chunk, meshData); _waitRenderChunkJobs.Enqueue(job); } else { job.meshData = meshData; } } }