Allow parallelisation of masks (#636)

* Allow parallelisation of masks
Increasing performance improvement with increased masking complexity and edit size.

* Address comments
 - Rename Mask#clone to Mask#copy
 - Rename Mask2D#copy to Mask2D#copy2D
 - Correct formatting

* cx -> centerX

* Make various operations relying on a single SingleThreadQueueExtent instance (mainly brushes) thread safe
This commit is contained in:
dordsor21
2020-09-25 15:00:42 +01:00
committed by GitHub
parent 3f1e8fa4d4
commit 855389c785
70 changed files with 893 additions and 266 deletions

View File

@ -71,6 +71,7 @@ import com.sk89q.worldedit.function.mask.NoiseFilter2D;
import com.sk89q.worldedit.function.mask.RegionMask;
import com.sk89q.worldedit.function.mask.SingleBlockTypeMask;
import com.sk89q.worldedit.function.mask.SolidBlockMask;
import com.sk89q.worldedit.function.mask.WallMakeMask;
import com.sk89q.worldedit.function.operation.ChangeSetExecutor;
import com.sk89q.worldedit.function.operation.ForwardExtentCopy;
import com.sk89q.worldedit.function.operation.Operations;
@ -1406,15 +1407,7 @@ public class EditSession extends PassthroughExtent implements AutoCloseable {
if (region instanceof CuboidRegion) {
return makeCuboidWalls(region, pattern);
} else {
replaceBlocks(region, new Mask() {
@Override
public boolean test(BlockVector3 position) {
int x = position.getBlockX();
int z = position.getBlockZ();
return !region.contains(x, z + 1) || !region.contains(x, z - 1) || !region
.contains(x + 1, z) || !region.contains(x - 1, z);
}
}, pattern);
replaceBlocks(region, new WallMakeMask(region), pattern);
}
return changes;
}