예제 #1
0
        JobHandle RenderPass(JobHandle dependencies = default)
        {
            var chunkArray             = _renderQuery.CreateArchetypeChunkArray(Allocator.TempJob);
            var versionType            = GetArchetypeChunkComponentType <ChunkCullingSystemVersion>();
            var blockCulledVersionType = GetArchetypeChunkComponentType <BlockCulledFacesComponent.Version>();

            var blockActiveVersionType = GetArchetypeChunkComponentType <BlockActiveComponent.Version>(true);

            var VoxelChunkEntityArchetype = GetArchetypeChunkEntityType();

            Profiler.BeginSample("Process ECS Chunk");
            foreach (var ecsChunk in chunkArray)
            {
                var systemVersions        = ecsChunk.GetNativeArray(versionType);
                var activeVersions        = ecsChunk.GetNativeArray(blockActiveVersionType);
                var blockCulledVersions   = ecsChunk.GetNativeArray(blockCulledVersionType);
                var voxelChunkEntityArray = ecsChunk.GetNativeArray(VoxelChunkEntityArchetype);

                var i = 0;
                foreach (var voxelChunkEntity in voxelChunkEntityArray)
                {
                    var version        = systemVersions[i];
                    var currentVersion = new ChunkCullingSystemVersion()
                    {
                        ActiveVersion = activeVersions[i]
                    };

                    if (currentVersion.DidChange(version))
                    {
                        Profiler.BeginSample("Update Chunk");
                        var job = UpdateVoxelChunkV2(voxelChunkEntity, dependencies);
                        job.Complete();
                        Profiler.EndSample();
                        systemVersions[i]      = currentVersion;
                        blockCulledVersions[i] = blockCulledVersions[i].GetDirty();
                    }

                    i++;
                }
            }


            Profiler.EndSample();

            chunkArray.Dispose();
//            return merged;
            return(dependencies);
        }
예제 #2
0
 public bool DidChange(ChunkCullingSystemVersion version)
 {
     return(ChangeVersionUtility.DidChange(ActiveVersion, version.ActiveVersion));
 }