From 28d9f9bbdc2c7f80b85e546d8584d40abf127b6b Mon Sep 17 00:00:00 2001 From: Bixilon Date: Sun, 14 Mar 2021 17:15:20 +0100 Subject: [PATCH] ram: improve more with using primitive float arrays --- pom.xml | 5 +++++ .../gui/rendering/chunk/SectionArrayMesh.kt | 1 + .../gui/rendering/chunk/WorldRenderer.kt | 3 --- .../gui/rendering/hud/HUDCacheMesh.kt | 13 +++++------- .../minosoft/gui/rendering/hud/HUDMesh.kt | 2 +- .../minosoft/gui/rendering/hud/HUDRenderer.kt | 1 - .../minosoft/gui/rendering/util/Mesh.kt | 20 ++++++------------- 7 files changed, 18 insertions(+), 27 deletions(-) diff --git a/pom.xml b/pom.xml index bba9551fa..3fe497af4 100644 --- a/pom.xml +++ b/pom.xml @@ -346,5 +346,10 @@ moshi-kotlin 1.11.0 + + commons-primitives + commons-primitives + 1.0 + diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/SectionArrayMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/SectionArrayMesh.kt index 0931ba13f..502387fea 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/SectionArrayMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/SectionArrayMesh.kt @@ -28,6 +28,7 @@ class SectionArrayMesh : Mesh() { var highestBlockHeight = 0 fun addVertex(position: Vec3, textureCoordinates: Vec2, texture: Texture, tintColor: RGBColor?, lightLevel: Int = 14) { + val data = data!! data.add(position.x) data.add(position.y) data.add(position.z) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/WorldRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/WorldRenderer.kt index e13be9f74..c8c65e380 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/WorldRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/WorldRenderer.kt @@ -235,13 +235,10 @@ class WorldRenderer( val index = getSectionIndex(highestBlockHeight) - mesh.lowestBlockHeight = lowestBlockHeight mesh.highestBlockHeight = highestBlockHeight - mesh.preLoad() - renderWindow.renderQueue.add { val sectionMap = allChunkSections.getOrPut(chunkPosition, { ConcurrentHashMap() }) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/hud/HUDCacheMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/hud/HUDCacheMesh.kt index c42879ff9..002fe8602 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/hud/HUDCacheMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/hud/HUDCacheMesh.kt @@ -16,11 +16,12 @@ package de.bixilon.minosoft.gui.rendering.hud import de.bixilon.minosoft.data.text.RGBColor import glm_.vec2.Vec2 import glm_.vec3.Vec3 +import org.apache.commons.collections.primitives.ArrayFloatList class HUDCacheMesh { - private val data: MutableList = mutableListOf() + private val data = ArrayFloatList() - val cache: List + val cache: ArrayFloatList get() = data fun addVertex(position: Vec3, textureCoordinates: Vec2, textureLayer: Int, tintColor: RGBColor? = null) { @@ -38,14 +39,10 @@ class HUDCacheMesh { } val size: Int - get() = data.size + get() = data.size() fun isEmpty(): Boolean { - return data.isEmpty() - } - - fun isNotEmpty(): Boolean { - return data.isNotEmpty() + return data.isEmpty } fun clear() { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/hud/HUDMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/hud/HUDMesh.kt index 586885150..e01e21c14 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/hud/HUDMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/hud/HUDMesh.kt @@ -36,7 +36,7 @@ class HUDMesh : Mesh() { } fun addCacheMesh(cacheMesh: HUDCacheMesh) { - data.addAll(cacheMesh.cache) + data!!.addAll(cacheMesh.cache) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/hud/HUDRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/hud/HUDRenderer.kt index a4d502198..ffa72da33 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/hud/HUDRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/hud/HUDRenderer.kt @@ -180,7 +180,6 @@ class HUDRenderer(val connection: Connection, val renderWindow: RenderWindow) : tempMesh.addCacheMesh(hudElement.layout.cache) } currentHUDMesh.unload(false) - tempMesh.preLoad() tempMesh.load() currentHUDMesh = tempMesh } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/Mesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/Mesh.kt index 153aa22ee..ad9ae5c93 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/Mesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/Mesh.kt @@ -13,44 +13,37 @@ package de.bixilon.minosoft.gui.rendering.util +import org.apache.commons.collections.primitives.ArrayFloatList import org.lwjgl.opengl.GL11.GL_TRIANGLES import org.lwjgl.opengl.GL11.glDrawArrays import org.lwjgl.opengl.GL30.* abstract class Mesh { - protected val data: MutableList = mutableListOf() + protected var data: ArrayFloatList? = ArrayFloatList() private var vao: Int = -1 private var vbo: Int = -1 var trianglesCount: Int = -1 private set - private var rawData: FloatArray? = null var state = MeshStates.PREPARING private set - open fun preLoad() { - check(state == MeshStates.PREPARING) { "Mesh already loaded: $state" } - rawData = data.toFloatArray() - data.clear() - state = MeshStates.PRE_LOADED - } abstract fun load() protected fun initializeBuffers(floatsPerVertex: Int) { - check(state == MeshStates.PRE_LOADED) { "Mesh not pre loaded: $state" } + check(state == MeshStates.PREPARING) { "Mesh already loaded: $state" } - trianglesCount = rawData!!.size / floatsPerVertex + trianglesCount = data!!.size() / floatsPerVertex vao = glGenVertexArrays() vbo = glGenBuffers() glBindVertexArray(vao) glBindBuffer(GL_ARRAY_BUFFER, vbo) - glBufferData(GL_ARRAY_BUFFER, rawData!!, GL_STATIC_DRAW) + glBufferData(GL_ARRAY_BUFFER, data!!.toArray(), GL_STATIC_DRAW) state = MeshStates.LOADED - - rawData = null + data = null } protected fun unbind() { @@ -78,7 +71,6 @@ abstract class Mesh { enum class MeshStates { PREPARING, - PRE_LOADED, LOADED, UNLOADED, }