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 71b2ff085..c685f9ec4 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 @@ -39,6 +39,7 @@ class ParticleRenderer( ) : Renderer { private lateinit var particleShader: Shader private var particleMesh = ParticleMesh() + private var transparentParticleMesh = ParticleMesh() private var particles: MutableSet = synchronizedSetOf() @@ -51,6 +52,7 @@ class ParticleRenderer( } }) particleMesh.load() + transparentParticleMesh.load() connection.registries.particleTypeRegistry.forEachItem { for (resourceLocation in it.textures) { renderWindow.textures.allTextures[resourceLocation] = Texture(resourceLocation) @@ -85,7 +87,9 @@ class ParticleRenderer( particleShader.use() particleMesh.unload() + transparentParticleMesh.unload() particleMesh = ParticleMesh() + transparentParticleMesh = ParticleMesh() for (particle in particles.toSynchronizedSet()) { @@ -94,13 +98,16 @@ class ParticleRenderer( this.particles -= particle continue } - particle.addVertex(particleMesh) + particle.addVertex(transparentParticleMesh, particleMesh) } particleMesh.load() + transparentParticleMesh.load() + + particleMesh.draw() glDepthMask(false) - particleMesh.draw() + transparentParticleMesh.draw() glDepthMask(true) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/Particle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/Particle.kt index 449e0076a..5fdcabc3e 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/Particle.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/Particle.kt @@ -181,7 +181,7 @@ abstract class Particle( } } - abstract fun addVertex(particleMesh: ParticleMesh) + abstract fun addVertex(transparentMesh: ParticleMesh, particleMesh: ParticleMesh) companion object { private const val MAGIC_VELOCITY_CONSTANT = 0.4000000059604645 diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/NoRenderParticle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/NoRenderParticle.kt index 5d51c9008..c76b792f8 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/NoRenderParticle.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/norender/NoRenderParticle.kt @@ -21,5 +21,5 @@ import glm_.vec3.Vec3d abstract class NoRenderParticle(connection: PlayConnection, position: Vec3d, velocity: Vec3d, data: ParticleData?) : Particle(connection, position, velocity, data) { - override fun addVertex(particleMesh: ParticleMesh) {} + override fun addVertex(transparentMesh: ParticleMesh, particleMesh: ParticleMesh) {} } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/TextureParticle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/TextureParticle.kt index 651e177cb..7c2046cbd 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/TextureParticle.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/TextureParticle.kt @@ -17,6 +17,7 @@ import de.bixilon.minosoft.data.mappings.particle.data.ParticleData import de.bixilon.minosoft.gui.rendering.particle.ParticleMesh import de.bixilon.minosoft.gui.rendering.particle.types.render.RenderParticle import de.bixilon.minosoft.gui.rendering.textures.Texture +import de.bixilon.minosoft.gui.rendering.textures.TextureTransparencies import de.bixilon.minosoft.protocol.network.connection.PlayConnection import glm_.vec3.Vec3d @@ -24,9 +25,13 @@ abstract class TextureParticle(connection: PlayConnection, position: Vec3d, velo abstract val texture: Texture? - override fun addVertex(particleMesh: ParticleMesh) { + override fun addVertex(transparentMesh: ParticleMesh, particleMesh: ParticleMesh) { texture?.let { - particleMesh.addVertex(cameraPosition, scale, it, color) + if (it.transparency == TextureTransparencies.TRANSLUCENT || color.alpha != 255) { + transparentMesh + } else { + particleMesh + }.addVertex(cameraPosition, scale, it, color) } } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/advanced/AdvancedTextureParticle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/advanced/AdvancedTextureParticle.kt index 3eb50ab0f..fb7fe38bd 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/advanced/AdvancedTextureParticle.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/advanced/AdvancedTextureParticle.kt @@ -16,6 +16,7 @@ package de.bixilon.minosoft.gui.rendering.particle.types.render.texture.advanced import de.bixilon.minosoft.data.mappings.particle.data.ParticleData import de.bixilon.minosoft.gui.rendering.particle.ParticleMesh import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.SimpleTextureParticle +import de.bixilon.minosoft.gui.rendering.textures.TextureTransparencies import de.bixilon.minosoft.protocol.network.connection.PlayConnection import glm_.vec2.Vec2 import glm_.vec3.Vec3d @@ -24,9 +25,13 @@ abstract class AdvancedTextureParticle(connection: PlayConnection, position: Vec var minUV: Vec2 = Vec2(0.0f, 0.0f) var maxUV: Vec2 = Vec2(1.0f, 1.0f) - override fun addVertex(particleMesh: ParticleMesh) { + override fun addVertex(transparentMesh: ParticleMesh, particleMesh: ParticleMesh) { texture?.let { - particleMesh.addVertex(cameraPosition, scale, it, color, minUV, maxUV) + if (it.transparency == TextureTransparencies.TRANSLUCENT || color.alpha != 255) { + transparentMesh + } else { + particleMesh + }.addVertex(cameraPosition, scale, it, color, minUV, maxUV) } } }