From 6032ed0bdcd102d66ed3af93c758cfe668015d1f Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Mon, 18 Dec 2023 18:05:37 +0100 Subject: [PATCH] particle: cache textures That speeds up texture retrieving --- .../data/registries/particle/ParticleType.kt | 2 ++ .../gui/rendering/particle/ParticleRenderer.kt | 7 +++++-- .../render/texture/simple/SimpleTextureParticle.kt | 12 ++++++------ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/particle/ParticleType.kt b/src/main/java/de/bixilon/minosoft/data/registries/particle/ParticleType.kt index 09be9f8ac..3d7040445 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/particle/ParticleType.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/particle/ParticleType.kt @@ -22,6 +22,7 @@ import de.bixilon.minosoft.data.registries.registries.registry.codec.IdentifierC import de.bixilon.minosoft.gui.rendering.particle.DefaultParticleFactory import de.bixilon.minosoft.gui.rendering.particle.ParticleFactory import de.bixilon.minosoft.gui.rendering.particle.types.Particle +import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.Texture import de.bixilon.minosoft.gui.rendering.textures.TextureUtil.texture import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.nbt.tag.NBTUtil.listCast @@ -32,6 +33,7 @@ data class ParticleType( val overrideLimiter: Boolean = false, val factory: ParticleFactory? = null, ) : RegistryItem() { + var loadedTextures: Array = emptyArray() override fun toString(): String { return identifier.toString() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt index aae89b44c..3fe74752b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleRenderer.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft.gui.rendering.particle import de.bixilon.kotlinglm.vec3.Vec3 +import de.bixilon.kutil.array.ArrayUtil.cast import de.bixilon.kutil.latch.AbstractLatch import de.bixilon.kutil.observer.DataObserver.Companion.observe import de.bixilon.minosoft.data.registries.identified.Namespaces.minosoft @@ -29,6 +30,7 @@ import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem import de.bixilon.minosoft.gui.rendering.system.base.layer.OpaqueLayer import de.bixilon.minosoft.gui.rendering.system.base.layer.TranslucentLayer import de.bixilon.minosoft.gui.rendering.system.base.phases.SkipAll +import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.Texture import de.bixilon.minosoft.modding.event.listener.CallbackEventListener.Companion.listen import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk.ChunkUtil.isInViewDistance @@ -87,8 +89,9 @@ class ParticleRenderer( private fun loadTextures() { for (particle in connection.registries.particleType) { - for (file in particle.textures) { - context.textures.static.create(file) + val loaded: Array = arrayOfNulls(particle.textures.size).cast() + for ((index, texture) in particle.textures.withIndex()) { + loaded[index] = context.textures.static.create(texture) } } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/SimpleTextureParticle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/SimpleTextureParticle.kt index b47099963..22a3b9e1c 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/SimpleTextureParticle.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/SimpleTextureParticle.kt @@ -21,7 +21,7 @@ import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.file.FileTe import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection abstract class SimpleTextureParticle(connection: PlayConnection, position: Vec3d, velocity: Vec3d, data: ParticleData? = null) : TextureParticle(connection, position, velocity, data) { - override var texture = this.data.type.textures.getOrNull(0)?.let { connection.rendering?.context?.textures?.static?.get(it) } + override var texture = this.data.type.loadedTextures.getOrNull(0) var spriteDisabled = false @@ -35,17 +35,17 @@ abstract class SimpleTextureParticle(connection: PlayConnection, position: Vec3d return } // calculate next texture - val nextTextureResourceLocation = data.type.textures[age / (maxAge / totalTextures + 1)] - if (texture?.nullCast()?.file == nextTextureResourceLocation) { + val next = data.type.loadedTextures[age / (maxAge / totalTextures + 1)] + if (texture?.nullCast()?.file == next) { return } - texture = connection.rendering?.context?.textures?.static?.get(nextTextureResourceLocation) + texture = next } fun setRandomSprite() { - val textures = data.type.textures + val textures = data.type.loadedTextures if (textures.isEmpty()) return - texture = connection.rendering?.context?.textures?.static?.get(textures.random()) + texture = textures.random() } override fun tick() {