From fa5d41f7e0f8c561eb6c98d7d3d74a2533a1efa4 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Sun, 12 Sep 2021 22:24:48 +0200 Subject: [PATCH] only recalculate frustum when position changes (performance) --- .../gui/rendering/gui/mesh/GUIMeshCache.kt | 4 ++-- .../gui/rendering/input/camera/Camera.kt | 22 ++++++++++++++++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/mesh/GUIMeshCache.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/mesh/GUIMeshCache.kt index 09c9c8bf3..1e43f765c 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/mesh/GUIMeshCache.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/mesh/GUIMeshCache.kt @@ -24,9 +24,9 @@ import glm_.vec4.Vec4 class GUIMeshCache( val matrix: Mat4, - initialCahceSize: Int = 1000, + initialCacheSize: Int = 1000, ) : GUIVertexConsumer { - val data: ArrayFloatList = ArrayFloatList(initialCahceSize) + val data: ArrayFloatList = ArrayFloatList(initialCacheSize) override fun addVertex(position: Vec2t<*>, z: Int, texture: AbstractTexture, uv: Vec2, tint: RGBColor) { val outPosition = matrix * Vec4(position.x.toFloat(), position.y.toFloat(), 1.0f, 1.0f) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt index e071612e7..1d07f4d7e 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/camera/Camera.kt @@ -100,6 +100,11 @@ class Camera( var viewProjectionMatrix = projectionMatrix * viewMatrix private set + + var previousPosition = Vec3d(connection.player.position) + var previousRotation = connection.player.rotation.copy() + var previousZoom = zoom + private var lastDropPacketSent = -1L val frustum: Frustum = Frustum(this) @@ -265,7 +270,14 @@ class Camera( connection.fireEvent(FrustumChangeEvent(renderWindow, frustum)) connection.fireEvent(CameraPositionChangeEvent(renderWindow, connection.player.eyePosition)) - // recalculate sky color for current biome + previousPosition = Vec3d(connection.player.position) + previousRotation = connection.player.rotation.copy() + previousZoom = zoom + + setSkyColor() + } + + private fun setSkyColor() { renderWindow[SkyRenderer.Companion]?.let { skyRenderer -> skyRenderer.baseColor = connection.world.getBiome(connection.player.positionInfo.blockPosition)?.skyColor ?: RenderConstants.DEFAULT_SKY_COLOR @@ -330,8 +342,12 @@ class Camera( } else { 0.0f } - // ToDo: Only update if changed - onPositionChange() + + if (previousPosition != connection.player.position || previousRotation != connection.player.rotation || zoom != previousZoom) { + onPositionChange() + } else { + setSkyColor() + } val eyePosition = connection.player.eyePosition val cameraFront = cameraFront