mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-17 19:35:00 -04:00
split renderers in async renderers
* This reduces the amount of thread pool calls per frame
This commit is contained in:
parent
74191aa799
commit
11056c9295
@ -28,7 +28,7 @@ import de.bixilon.minosoft.gui.rendering.RenderConstants
|
||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.CameraMatrixChangeEvent
|
||||
import de.bixilon.minosoft.gui.rendering.particle.types.Particle
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.Renderer
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.AsyncRenderer
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.RendererBuilder
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.phases.SkipAll
|
||||
@ -49,7 +49,7 @@ import de.bixilon.minosoft.util.collections.floats.DirectArrayFloatList
|
||||
class ParticleRenderer(
|
||||
private val connection: PlayConnection,
|
||||
override val renderWindow: RenderWindow,
|
||||
) : Renderer, TransparentDrawable, TranslucentDrawable, SkipAll, AbstractParticleRenderer {
|
||||
) : AsyncRenderer, TransparentDrawable, TranslucentDrawable, SkipAll, AbstractParticleRenderer {
|
||||
override val renderSystem: RenderSystem = renderWindow.renderSystem
|
||||
private val profile = connection.profiles.particle
|
||||
private val transparentShader: Shader = renderSystem.createShader(minosoft("particle"))
|
||||
|
@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Minosoft
|
||||
* Copyright (C) 2020-2022 Moritz Zwerger
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||
*/
|
||||
|
||||
package de.bixilon.minosoft.gui.rendering.renderer
|
||||
|
||||
interface AsyncRenderer : Renderer {
|
||||
|
||||
fun prepareDrawAsync() = Unit
|
||||
}
|
@ -34,6 +34,5 @@ interface Renderer {
|
||||
fun postAsyncInit(latch: CountUpAndDownLatch) = Unit
|
||||
|
||||
fun prePrepareDraw() = Unit
|
||||
fun prepareDrawAsync() = Unit
|
||||
fun postPrepareDraw() = Unit
|
||||
}
|
||||
|
@ -125,6 +125,9 @@ class RendererManager(
|
||||
|
||||
val latch = CountUpAndDownLatch(1)
|
||||
for (renderer in rendererList) {
|
||||
if (renderer !is AsyncRenderer) {
|
||||
continue
|
||||
}
|
||||
latch.inc()
|
||||
DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.HIGHER) { renderer.prepareDrawAsync(); latch.dec() }
|
||||
}
|
||||
|
@ -25,8 +25,8 @@ import de.bixilon.minosoft.data.registries.dimension.DimensionProperties
|
||||
import de.bixilon.minosoft.data.text.formatting.color.ChatColors
|
||||
import de.bixilon.minosoft.gui.rendering.RenderConstants
|
||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.AsyncRenderer
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.MeshSwapper
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.Renderer
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.RendererBuilder
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.phases.OpaqueDrawable
|
||||
@ -42,7 +42,7 @@ import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||
class ChunkBorderRenderer(
|
||||
val connection: PlayConnection,
|
||||
override val renderWindow: RenderWindow,
|
||||
) : Renderer, OpaqueDrawable, MeshSwapper {
|
||||
) : AsyncRenderer, OpaqueDrawable, MeshSwapper {
|
||||
private val profile = connection.profiles.rendering
|
||||
override val renderSystem: RenderSystem = renderWindow.renderSystem
|
||||
private var chunkPosition: Vec2i? = null
|
||||
|
@ -24,8 +24,8 @@ import de.bixilon.minosoft.data.registries.blocks.types.entity.BlockWithEntity
|
||||
import de.bixilon.minosoft.gui.rendering.RenderConstants
|
||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.camera.target.targets.BlockTarget
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.AsyncRenderer
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.MeshSwapper
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.Renderer
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.RendererBuilder
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.DepthFunctions
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem
|
||||
@ -38,7 +38,7 @@ import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||
class BlockOutlineRenderer(
|
||||
val connection: PlayConnection,
|
||||
override val renderWindow: RenderWindow,
|
||||
) : Renderer, OtherDrawable, MeshSwapper {
|
||||
) : AsyncRenderer, OtherDrawable, MeshSwapper {
|
||||
private val profile = connection.profiles.block.outline
|
||||
override val renderSystem: RenderSystem = renderWindow.renderSystem
|
||||
private var currentOutlinePosition: Vec3i? = null
|
||||
|
Loading…
x
Reference in New Issue
Block a user