mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-18 20:05:02 -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.data.registries.ResourceLocation
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||||
import de.bixilon.minosoft.gui.rendering.events.CameraMatrixChangeEvent
|
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.Renderer
|
||||||
import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererBuilder
|
import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererBuilder
|
||||||
import de.bixilon.minosoft.gui.rendering.sky.box.SkyboxRenderer
|
import de.bixilon.minosoft.gui.rendering.sky.box.SkyboxRenderer
|
||||||
@ -38,7 +39,7 @@ import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
|||||||
class SkyRenderer(
|
class SkyRenderer(
|
||||||
val connection: PlayConnection,
|
val connection: PlayConnection,
|
||||||
override val renderWindow: RenderWindow,
|
override val renderWindow: RenderWindow,
|
||||||
) : Renderer, PreDrawable {
|
) : Renderer, PreDrawable, AsyncRenderer {
|
||||||
override val renderSystem: RenderSystem = renderWindow.renderSystem
|
override val renderSystem: RenderSystem = renderWindow.renderSystem
|
||||||
override val framebuffer: Framebuffer? = null
|
override val framebuffer: Framebuffer? = null
|
||||||
override val polygonMode: PolygonModes = PolygonModes.DEFAULT
|
override val polygonMode: PolygonModes = PolygonModes.DEFAULT
|
||||||
@ -77,7 +78,7 @@ class SkyRenderer(
|
|||||||
connection.world::dimension.observe(this) { properties = it?.skyProperties ?: OverworldSkyProperties }
|
connection.world::dimension.observe(this) { properties = it?.skyProperties ?: OverworldSkyProperties }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun prePrepareDraw() {
|
override fun prepareDrawAsync() {
|
||||||
if (updateTime) {
|
if (updateTime) {
|
||||||
this.time = connection.world.time
|
this.time = connection.world.time
|
||||||
for (renderer in renderer) {
|
for (renderer in renderer) {
|
||||||
@ -87,6 +88,11 @@ class SkyRenderer(
|
|||||||
}
|
}
|
||||||
for (renderer in renderer) {
|
for (renderer in renderer) {
|
||||||
renderer.updateAsync()
|
renderer.updateAsync()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun prePrepareDraw() {
|
||||||
|
for (renderer in renderer) {
|
||||||
renderer.update()
|
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.registries.ResourceLocation
|
||||||
import de.bixilon.minosoft.data.world.time.WorldTime
|
import de.bixilon.minosoft.data.world.time.WorldTime
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
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.Renderer
|
||||||
import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererBuilder
|
import de.bixilon.minosoft.gui.rendering.renderer.renderer.RendererBuilder
|
||||||
import de.bixilon.minosoft.gui.rendering.sky.SkyRenderer
|
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.PlayConnection
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates
|
||||||
import de.bixilon.minosoft.util.KUtil.minosoft
|
import de.bixilon.minosoft.util.KUtil.minosoft
|
||||||
|
import de.bixilon.minosoft.util.KUtil.murmur64
|
||||||
|
import java.util.*
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
|
|
||||||
class CloudsRenderer(
|
class CloudsRenderer(
|
||||||
private val sky: SkyRenderer,
|
private val sky: SkyRenderer,
|
||||||
private val connection: PlayConnection,
|
private val connection: PlayConnection,
|
||||||
override val renderWindow: RenderWindow,
|
override val renderWindow: RenderWindow,
|
||||||
) : Renderer, OpaqueDrawable {
|
) : Renderer, OpaqueDrawable, AsyncRenderer {
|
||||||
override val renderSystem: RenderSystem = renderWindow.renderSystem
|
override val renderSystem: RenderSystem = renderWindow.renderSystem
|
||||||
private val shader = renderSystem.createShader(minosoft("sky/clouds"))
|
private val shader = renderSystem.createShader(minosoft("sky/clouds"))
|
||||||
val matrix = CloudMatrix()
|
val matrix = CloudMatrix()
|
||||||
@ -52,6 +55,8 @@ class CloudsRenderer(
|
|||||||
private set
|
private set
|
||||||
private var maxDistance = 0.0f
|
private var maxDistance = 0.0f
|
||||||
private var yOffset = 0.0f
|
private var yOffset = 0.0f
|
||||||
|
private var day = -1L
|
||||||
|
private var randomSpeed = 0.0f
|
||||||
|
|
||||||
override val skipOpaque: Boolean
|
override val skipOpaque: Boolean
|
||||||
get() = !sky.properties.clouds || !sky.profile.clouds.enabled || connection.profiles.block.viewDistance < 3
|
get() = !sky.properties.clouds || !sky.profile.clouds.enabled || connection.profiles.block.viewDistance < 3
|
||||||
@ -153,7 +158,14 @@ class CloudsRenderer(
|
|||||||
} else {
|
} else {
|
||||||
push(arrayDelta)
|
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() {
|
override fun postPrepareDraw() {
|
||||||
@ -184,7 +196,7 @@ class CloudsRenderer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getCloudSpeed(): Float {
|
private fun getCloudSpeed(): Float {
|
||||||
return 0.5f
|
return randomSpeed + 0.1f
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateOffset() {
|
private fun updateOffset() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user