WIP Caching Hints and Caching Sampler

This commit is contained in:
Zoe Gidiere
2024-10-09 23:36:12 -06:00
parent 370b2e0122
commit 1ae0d1f867
11 changed files with 222 additions and 9 deletions

View File

@@ -81,4 +81,7 @@ public interface Platform extends LoaderRegistrar {
@NotNull
@Contract(pure = true)
Profiler getProfiler();
@Contract(pure = true)
int getGenerationThreads();
}

View File

@@ -7,6 +7,8 @@
package com.dfsek.terra.api.world.biome.generation;
import com.dfsek.terra.api.Platform;
import org.jetbrains.annotations.Contract;
import java.util.Optional;
@@ -91,11 +93,11 @@ public interface BiomeProvider {
return StreamSupport.stream(getBiomes().spliterator(), false);
}
default CachingBiomeProvider caching() {
default CachingBiomeProvider caching(Platform platform) {
if(this instanceof CachingBiomeProvider cachingBiomeProvider) {
return cachingBiomeProvider;
}
return new CachingBiomeProvider(this);
return new CachingBiomeProvider(this, platform.getGenerationThreads());
}

View File

@@ -21,19 +21,20 @@ public class CachingBiomeProvider implements BiomeProvider, Handle {
private final LoadingCache<SeededVector3, Biome> cache;
private final LoadingCache<SeededVector2, Optional<Biome>> baseCache;
protected CachingBiomeProvider(BiomeProvider delegate) {
protected CachingBiomeProvider(BiomeProvider delegate, int generationThreads) {
this.delegate = delegate;
this.res = delegate.resolution();
int size = generationThreads * 98304;
this.cache = Caffeine
.newBuilder()
.scheduler(Scheduler.disabledScheduler())
.initialCapacity(98304)
.maximumSize(98304) // 1 full chunk (high res)
.initialCapacity(size)
.maximumSize(size) // 1 full chunk (high res)
.build(vec -> delegate.getBiome(vec.x * res, vec.y * res, vec.z * res, vec.seed));
this.baseCache = Caffeine
.newBuilder()
.maximumSize(256) // 1 full chunk (high res)
.maximumSize(256L * generationThreads) // 1 full chunk (high res)
.build(vec -> delegate.getBaseBiome(vec.x * res, vec.z * res, vec.seed));
}
@@ -77,7 +78,7 @@ public class CachingBiomeProvider implements BiomeProvider, Handle {
int code = x;
code = 31 * code + y;
code = 31 * code + z;
return 31 * code + ((int) (seed ^ (seed >>> 32)));
return 31 * code + (Long.hashCode(seed));
}
}
@@ -95,7 +96,7 @@ public class CachingBiomeProvider implements BiomeProvider, Handle {
public int hashCode() {
int code = x;
code = 31 * code + z;
return 31 * code + ((int) (seed ^ (seed >>> 32)));
return 31 * code + (Long.hashCode(seed));
}
}
}