mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-18 11:54:59 -04:00
make sky renderer AsyncRenderer
This commit is contained in:
parent
dbe2f4faf1
commit
aee19b619e
@ -20,6 +20,7 @@ import de.bixilon.kutil.watcher.DataWatcher.Companion.watched
|
||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.events.CameraMatrixChangeEvent
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.renderer.AsyncRenderer
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererBuilder
|
||||
import de.bixilon.minosoft.gui.rendering.sky.box.SkyboxRenderer
|
||||
@ -38,7 +39,7 @@ import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||
class SkyRenderer(
|
||||
val connection: PlayConnection,
|
||||
override val renderWindow: RenderWindow,
|
||||
) : Renderer, PreDrawable {
|
||||
) : Renderer, PreDrawable, AsyncRenderer {
|
||||
override val renderSystem: RenderSystem = renderWindow.renderSystem
|
||||
override val framebuffer: Framebuffer? = null
|
||||
override val polygonMode: PolygonModes = PolygonModes.DEFAULT
|
||||
@ -77,7 +78,7 @@ class SkyRenderer(
|
||||
connection.world::dimension.observe(this) { properties = it?.skyProperties ?: OverworldSkyProperties }
|
||||
}
|
||||
|
||||
override fun prePrepareDraw() {
|
||||
override fun prepareDrawAsync() {
|
||||
if (updateTime) {
|
||||
this.time = connection.world.time
|
||||
for (renderer in renderer) {
|
||||
@ -87,6 +88,11 @@ class SkyRenderer(
|
||||
}
|
||||
for (renderer in renderer) {
|
||||
renderer.updateAsync()
|
||||
}
|
||||
}
|
||||
|
||||
override fun prePrepareDraw() {
|
||||
for (renderer in renderer) {
|
||||
renderer.update()
|
||||
}
|
||||
}
|
||||
|
@ -23,6 +23,7 @@ import de.bixilon.minosoft.config.profile.delegate.watcher.SimpleProfileDelegate
|
||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||
import de.bixilon.minosoft.data.world.time.WorldTime
|
||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.renderer.AsyncRenderer
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.renderer.Renderer
|
||||
import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererBuilder
|
||||
import de.bixilon.minosoft.gui.rendering.sky.SkyRenderer
|
||||
@ -33,13 +34,15 @@ import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
|
||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates
|
||||
import de.bixilon.minosoft.util.KUtil.minosoft
|
||||
import de.bixilon.minosoft.util.KUtil.murmur64
|
||||
import java.util.*
|
||||
import kotlin.math.abs
|
||||
|
||||
class CloudsRenderer(
|
||||
private val sky: SkyRenderer,
|
||||
private val connection: PlayConnection,
|
||||
override val renderWindow: RenderWindow,
|
||||
) : Renderer, OpaqueDrawable {
|
||||
) : Renderer, OpaqueDrawable, AsyncRenderer {
|
||||
override val renderSystem: RenderSystem = renderWindow.renderSystem
|
||||
private val shader = renderSystem.createShader(minosoft("sky/clouds"))
|
||||
val matrix = CloudMatrix()
|
||||
@ -52,6 +55,8 @@ class CloudsRenderer(
|
||||
private set
|
||||
private var maxDistance = 0.0f
|
||||
private var yOffset = 0.0f
|
||||
private var day = -1L
|
||||
private var randomSpeed = 0.0f
|
||||
|
||||
override val skipOpaque: Boolean
|
||||
get() = !sky.properties.clouds || !sky.profile.clouds.enabled || connection.profiles.block.viewDistance < 3
|
||||
@ -153,7 +158,14 @@ class CloudsRenderer(
|
||||
} else {
|
||||
push(arrayDelta)
|
||||
}
|
||||
check(arrays[4].offset == cloudPosition) // ToDo: remove debug check
|
||||
}
|
||||
|
||||
override fun prepareDrawAsync() {
|
||||
val day = sky.time.day
|
||||
if (day != this.day) {
|
||||
this.day = day
|
||||
randomSpeed = Random(sky.time.age.murmur64()).nextFloat(0.0f, 0.1f)
|
||||
}
|
||||
}
|
||||
|
||||
override fun postPrepareDraw() {
|
||||
@ -184,7 +196,7 @@ class CloudsRenderer(
|
||||
}
|
||||
|
||||
private fun getCloudSpeed(): Float {
|
||||
return 0.5f
|
||||
return randomSpeed + 0.1f
|
||||
}
|
||||
|
||||
private fun updateOffset() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user