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); }
public bool DidChange(ChunkCullingSystemVersion version) { return(ChangeVersionUtility.DidChange(ActiveVersion, version.ActiveVersion)); }