diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleMesh.kt index ead99a987..1696d9981 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleMesh.kt @@ -20,11 +20,12 @@ import de.bixilon.minosoft.gui.rendering.system.base.buffer.vertex.PrimitiveType import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.AbstractTexture import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct +import de.bixilon.minosoft.util.collections.floats.DirectArrayFloatList import glm_.vec2.Vec2 import glm_.vec3.Vec3 import glm_.vec3.Vec3d -class ParticleMesh(renderWindow: RenderWindow, initialCacheSize: Int) : Mesh(renderWindow, ParticleMeshStruct, PrimitiveTypes.POINT, initialCacheSize) { +class ParticleMesh(renderWindow: RenderWindow, data: DirectArrayFloatList) : Mesh(renderWindow, ParticleMeshStruct, PrimitiveTypes.POINT, -1, clearOnLoad = false, data = data) { fun addVertex(position: Vec3d, scale: Float, texture: AbstractTexture, tintColor: RGBColor, uvMin: Vec2 = Vec2(0.0f, 0.0f), uvMax: Vec2 = Vec2(1.0f, 1.0f)) { val minTransformedUV = texture.renderData?.transformUV(uvMin) ?: uvMin 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 d5c9d6ae4..33ededd6b 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 @@ -30,6 +30,7 @@ import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates.Companion.disconnected import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition +import de.bixilon.minosoft.util.collections.floats.DirectArrayFloatList import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType @@ -48,8 +49,8 @@ class ParticleRenderer( private val translucentShader: Shader = renderSystem.createShader(ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "particle")) // There is no opaque mesh because it is simply not needed (every particle has transparency) - private var transparentMesh = ParticleMesh(renderWindow, 0) - private var translucentMesh = ParticleMesh(renderWindow, 0) + private var transparentMesh = ParticleMesh(renderWindow, DirectArrayFloatList(RenderConstants.MAXIMUM_PARTICLE_AMOUNT * ParticleMesh.ParticleMeshStruct.FLOATS_PER_VERTEX)) + private var translucentMesh = ParticleMesh(renderWindow, DirectArrayFloatList(RenderConstants.MAXIMUM_PARTICLE_AMOUNT * ParticleMesh.ParticleMeshStruct.FLOATS_PER_VERTEX)) private var particles: MutableSet = mutableSetOf() private var particleQueue: MutableSet = mutableSetOf() @@ -150,8 +151,10 @@ class ParticleRenderer( val toRemove: MutableSet = mutableSetOf() - transparentMesh = ParticleMesh(renderWindow, particles.size + particleQueue.size * ParticleMesh.ParticleMeshStruct.FLOATS_PER_VERTEX) - translucentMesh = ParticleMesh(renderWindow, particles.size + particleQueue.size * ParticleMesh.ParticleMeshStruct.FLOATS_PER_VERTEX) + transparentMesh.data.clear() + translucentMesh.data.clear() + transparentMesh = ParticleMesh(renderWindow, transparentMesh.data) + translucentMesh = ParticleMesh(renderWindow, translucentMesh.data) synchronized(particles) {