mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-23 04:28:55 -04:00
reuse particle data, improve particle performance
This commit is contained in:
parent
653322637f
commit
4c94ae5ffb
@ -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.system.base.texture.texture.AbstractTexture
|
||||||
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
|
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
|
||||||
import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct
|
import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct
|
||||||
|
import de.bixilon.minosoft.util.collections.floats.DirectArrayFloatList
|
||||||
import glm_.vec2.Vec2
|
import glm_.vec2.Vec2
|
||||||
import glm_.vec3.Vec3
|
import glm_.vec3.Vec3
|
||||||
import glm_.vec3.Vec3d
|
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)) {
|
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
|
val minTransformedUV = texture.renderData?.transformUV(uvMin) ?: uvMin
|
||||||
|
@ -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.PlayConnection
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates.Companion.disconnected
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates.Companion.disconnected
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
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.Log
|
||||||
import de.bixilon.minosoft.util.logging.LogLevels
|
import de.bixilon.minosoft.util.logging.LogLevels
|
||||||
import de.bixilon.minosoft.util.logging.LogMessageType
|
import de.bixilon.minosoft.util.logging.LogMessageType
|
||||||
@ -48,8 +49,8 @@ class ParticleRenderer(
|
|||||||
private val translucentShader: Shader = renderSystem.createShader(ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "particle"))
|
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)
|
// There is no opaque mesh because it is simply not needed (every particle has transparency)
|
||||||
private var transparentMesh = ParticleMesh(renderWindow, 0)
|
private var transparentMesh = ParticleMesh(renderWindow, DirectArrayFloatList(RenderConstants.MAXIMUM_PARTICLE_AMOUNT * ParticleMesh.ParticleMeshStruct.FLOATS_PER_VERTEX))
|
||||||
private var translucentMesh = ParticleMesh(renderWindow, 0)
|
private var translucentMesh = ParticleMesh(renderWindow, DirectArrayFloatList(RenderConstants.MAXIMUM_PARTICLE_AMOUNT * ParticleMesh.ParticleMeshStruct.FLOATS_PER_VERTEX))
|
||||||
|
|
||||||
private var particles: MutableSet<Particle> = mutableSetOf()
|
private var particles: MutableSet<Particle> = mutableSetOf()
|
||||||
private var particleQueue: MutableSet<Particle> = mutableSetOf()
|
private var particleQueue: MutableSet<Particle> = mutableSetOf()
|
||||||
@ -150,8 +151,10 @@ class ParticleRenderer(
|
|||||||
val toRemove: MutableSet<Particle> = mutableSetOf()
|
val toRemove: MutableSet<Particle> = mutableSetOf()
|
||||||
|
|
||||||
|
|
||||||
transparentMesh = ParticleMesh(renderWindow, particles.size + particleQueue.size * ParticleMesh.ParticleMeshStruct.FLOATS_PER_VERTEX)
|
transparentMesh.data.clear()
|
||||||
translucentMesh = ParticleMesh(renderWindow, particles.size + particleQueue.size * ParticleMesh.ParticleMeshStruct.FLOATS_PER_VERTEX)
|
translucentMesh.data.clear()
|
||||||
|
transparentMesh = ParticleMesh(renderWindow, transparentMesh.data)
|
||||||
|
translucentMesh = ParticleMesh(renderWindow, translucentMesh.data)
|
||||||
|
|
||||||
|
|
||||||
synchronized(particles) {
|
synchronized(particles) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user