mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-10 07:48:29 -04:00
bump kutil
This speeds up loading a lot, it uses ConcurrentIterator instead of ConcurrentSpliterator for model baking
This commit is contained in:
parent
81b1241563
commit
de30a0cc48
@ -17,5 +17,5 @@ lwjgl.version=3.3.3
|
|||||||
ikonli.version=12.3.1
|
ikonli.version=12.3.1
|
||||||
netty.version=4.1.101.Final
|
netty.version=4.1.101.Final
|
||||||
jackson.version=2.16.0
|
jackson.version=2.16.0
|
||||||
kutil.version=1.24.6
|
kutil.version=1.25.0
|
||||||
glm.version=0.9.9.1-12
|
glm.version=0.9.9.1-12
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
package de.bixilon.minosoft.data.world.chunk.manager
|
package de.bixilon.minosoft.data.world.chunk.manager
|
||||||
|
|
||||||
import de.bixilon.kotlinglm.vec2.Vec2i
|
import de.bixilon.kotlinglm.vec2.Vec2i
|
||||||
import de.bixilon.kutil.collections.iterator.async.ConcurrentIterator
|
import de.bixilon.kutil.collections.iterator.AsyncIteration.async
|
||||||
import de.bixilon.kutil.concurrent.pool.ThreadPool
|
import de.bixilon.kutil.concurrent.pool.ThreadPool
|
||||||
import de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk.ChunkUtil.isInViewDistance
|
import de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk.ChunkUtil.isInViewDistance
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@ -24,10 +24,9 @@ class ChunkTicker(val manager: ChunkManager) {
|
|||||||
|
|
||||||
|
|
||||||
fun tick(simulationDistance: Int, cameraPosition: Vec2i) {
|
fun tick(simulationDistance: Int, cameraPosition: Vec2i) {
|
||||||
val iterator = ConcurrentIterator(manager.chunks.unsafe.entries.spliterator(), priority = ThreadPool.HIGH)
|
manager.chunks.unsafe.entries.async(priority = ThreadPool.HIGH) {
|
||||||
iterator.iterate {
|
|
||||||
if (!it.key.isInViewDistance(simulationDistance, cameraPosition)) {
|
if (!it.key.isInViewDistance(simulationDistance, cameraPosition)) {
|
||||||
return@iterate
|
return@async
|
||||||
}
|
}
|
||||||
it.value.tick(manager.world.connection, it.key, random)
|
it.value.tick(manager.world.connection, it.key, random)
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.data.world.entities
|
package de.bixilon.minosoft.data.world.entities
|
||||||
|
|
||||||
import de.bixilon.kutil.collections.iterator.async.ConcurrentIterator
|
import de.bixilon.kutil.collections.iterator.AsyncIteration.async
|
||||||
import de.bixilon.kutil.concurrent.pool.ThreadPool
|
import de.bixilon.kutil.concurrent.pool.ThreadPool
|
||||||
import de.bixilon.minosoft.data.entities.entities.Entity
|
import de.bixilon.minosoft.data.entities.entities.Entity
|
||||||
import de.bixilon.minosoft.data.entities.entities.LivingEntity
|
import de.bixilon.minosoft.data.entities.entities.LivingEntity
|
||||||
@ -48,10 +48,9 @@ class EntityTicker(val entities: WorldEntities) {
|
|||||||
|
|
||||||
|
|
||||||
fun tick() {
|
fun tick() {
|
||||||
val iterator = ConcurrentIterator(entities.entities.spliterator(), priority = ThreadPool.HIGH)
|
entities.entities.async(priority = ThreadPool.HIGH) {
|
||||||
iterator.iterate {
|
|
||||||
if (it.attachment.vehicle != null) {
|
if (it.attachment.vehicle != null) {
|
||||||
return@iterate
|
return@async
|
||||||
}
|
}
|
||||||
tickEntity(it)
|
tickEntity(it)
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,8 @@
|
|||||||
package de.bixilon.minosoft.gui.rendering.entities
|
package de.bixilon.minosoft.gui.rendering.entities
|
||||||
|
|
||||||
import de.bixilon.kutil.cast.CastUtil.nullCast
|
import de.bixilon.kutil.cast.CastUtil.nullCast
|
||||||
import de.bixilon.kutil.collections.iterator.async.ConcurrentIterator
|
|
||||||
import de.bixilon.kutil.collections.map.LockMap
|
import de.bixilon.kutil.collections.map.LockMap
|
||||||
|
import de.bixilon.kutil.collections.spliterator.async.ConcurrentSpliterator
|
||||||
import de.bixilon.kutil.concurrent.lock.simple.SimpleLock
|
import de.bixilon.kutil.concurrent.lock.simple.SimpleLock
|
||||||
import de.bixilon.kutil.concurrent.pool.ThreadPool
|
import de.bixilon.kutil.concurrent.pool.ThreadPool
|
||||||
import de.bixilon.kutil.exception.ExceptionUtil.ignoreAll
|
import de.bixilon.kutil.exception.ExceptionUtil.ignoreAll
|
||||||
@ -97,7 +97,7 @@ class EntityRendererManager(val renderer: EntitiesRenderer) : Iterable<EntityRen
|
|||||||
|
|
||||||
fun iterate(executor: ((EntityRenderer<*>) -> Unit)) {
|
fun iterate(executor: ((EntityRenderer<*>) -> Unit)) {
|
||||||
lock.acquire()
|
lock.acquire()
|
||||||
ConcurrentIterator(renderers.unsafe.values.spliterator(), priority = ThreadPool.HIGHER).iterate(executor)
|
ConcurrentSpliterator(renderers.unsafe.values.spliterator(), priority = ThreadPool.HIGHER).iterate(executor)
|
||||||
lock.release()
|
lock.release()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
package de.bixilon.minosoft.gui.rendering.models.loader
|
package de.bixilon.minosoft.gui.rendering.models.loader
|
||||||
|
|
||||||
import de.bixilon.kutil.cast.CastUtil.nullCast
|
import de.bixilon.kutil.cast.CastUtil.nullCast
|
||||||
import de.bixilon.kutil.collections.iterator.async.ConcurrentIterator
|
import de.bixilon.kutil.collections.iterator.AsyncIteration.async
|
||||||
import de.bixilon.kutil.collections.map.LockMap
|
import de.bixilon.kutil.collections.map.LockMap
|
||||||
import de.bixilon.kutil.concurrent.pool.ThreadPool
|
import de.bixilon.kutil.concurrent.pool.ThreadPool
|
||||||
import de.bixilon.kutil.latch.AbstractLatch
|
import de.bixilon.kutil.latch.AbstractLatch
|
||||||
@ -71,16 +71,15 @@ class BlockLoader(private val loader: ModelLoader) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun load(latch: AbstractLatch?) {
|
fun load(latch: AbstractLatch?) {
|
||||||
val iterator = ConcurrentIterator(loader.context.connection.registries.block.spliterator(), priority = ThreadPool.HIGH) // TODO: ConcurrentIterator
|
loader.context.connection.registries.block.async(priority = ThreadPool.HIGH) {
|
||||||
iterator.iterate {
|
if (it.model != null) return@async // model already set
|
||||||
if (it.model != null) return@iterate // model already set
|
|
||||||
val prototype: BlockModelPrototype
|
val prototype: BlockModelPrototype
|
||||||
try {
|
try {
|
||||||
prototype = loadState(it) ?: return@iterate
|
prototype = loadState(it) ?: return@async
|
||||||
} catch (error: Exception) {
|
} catch (error: Exception) {
|
||||||
Log.log(LogMessageType.RENDERING, LogLevels.WARN) { "Can not load block model for block $it: $error" }
|
Log.log(LogMessageType.RENDERING, LogLevels.WARN) { "Can not load block model for block $it: $error" }
|
||||||
Log.log(LogMessageType.RENDERING, LogLevels.VERBOSE) { error }
|
Log.log(LogMessageType.RENDERING, LogLevels.VERBOSE) { error }
|
||||||
return@iterate
|
return@async
|
||||||
}
|
}
|
||||||
|
|
||||||
it.model = prototype
|
it.model = prototype
|
||||||
@ -89,9 +88,8 @@ class BlockLoader(private val loader: ModelLoader) {
|
|||||||
|
|
||||||
fun bake(latch: AbstractLatch?) {
|
fun bake(latch: AbstractLatch?) {
|
||||||
val context = loader.context
|
val context = loader.context
|
||||||
val iterator = ConcurrentIterator(loader.context.connection.registries.block.spliterator(), priority = ThreadPool.HIGH) // TODO: ConcurrentIterator
|
loader.context.connection.registries.block.async(priority = ThreadPool.HIGH) {
|
||||||
iterator.iterate {
|
val prototype = it.model.nullCast<BlockModelPrototype>() ?: return@async
|
||||||
val prototype = it.model.nullCast<BlockModelPrototype>() ?: return@iterate
|
|
||||||
it.model = null
|
it.model = null
|
||||||
|
|
||||||
prototype.bake(context, it)
|
prototype.bake(context, it)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user