public WaitRenderChunkJob DequeueWaitRender()
        {
            lock (_waitRenderChunkJobs)
            {
                if (_waitRenderChunkJobs.Count > 0)
                {
                    WaitRenderChunkJob job = _waitRenderChunkJobs.Dequeue();

                    return(job);
                }
                return(null);
            }
        }
Beispiel #2
0
 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;
         }
     }
 }