bake block models async

This commit is contained in:
Moritz Zwerger 2023-12-12 23:49:43 +01:00
parent 44004d5919
commit 1a8603dabc
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4

View File

@ -14,8 +14,9 @@
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.AsyncIterator.Companion.async 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.concurrent.pool.ThreadPool
import de.bixilon.kutil.latch.AbstractLatch import de.bixilon.kutil.latch.AbstractLatch
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
import de.bixilon.minosoft.assets.minecraft.MinecraftPackFormat import de.bixilon.minosoft.assets.minecraft.MinecraftPackFormat
@ -70,15 +71,16 @@ class BlockLoader(private val loader: ModelLoader) {
} }
fun load(latch: AbstractLatch?) { fun load(latch: AbstractLatch?) {
loader.context.connection.registries.block.async { val iterator = ConcurrentIterator(loader.context.connection.registries.block.spliterator(), priority = ThreadPool.HIGH)
if (it.model != null) return@async // model already set iterator.iterate {
if (it.model != null) return@iterate // model already set
val prototype: BlockModelPrototype val prototype: BlockModelPrototype
try { try {
prototype = loadState(it) ?: return@async prototype = loadState(it) ?: return@iterate
} 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@async return@iterate
} }
it.model = prototype it.model = prototype
@ -87,11 +89,12 @@ class BlockLoader(private val loader: ModelLoader) {
fun bake(latch: AbstractLatch?) { fun bake(latch: AbstractLatch?) {
val context = loader.context val context = loader.context
for (block in loader.context.connection.registries.block) { val iterator = ConcurrentIterator(loader.context.connection.registries.block.spliterator(), priority = ThreadPool.HIGH)
val prototype = block.model.nullCast<BlockModelPrototype>() ?: continue iterator.iterate {
block.model = null val prototype = it.model.nullCast<BlockModelPrototype>() ?: return@iterate
it.model = null
prototype.bake(context, block) prototype.bake(context, it)
} }
} }