mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-14 18:05:51 -04:00
Revert "Mesh: Force use FragmentedArrayFloatList"
This reverts commit 0a06695d
This commit is contained in:
parent
04edd74988
commit
30414c756e
@ -33,7 +33,7 @@ import de.bixilon.minosoft.gui.rendering.system.window.KeyChangeTypes
|
|||||||
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
|
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2Util.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2Util.EMPTY
|
||||||
import de.bixilon.minosoft.util.Initializable
|
import de.bixilon.minosoft.util.Initializable
|
||||||
import de.bixilon.minosoft.util.collections.floats.FragmentedArrayFloatList
|
import de.bixilon.minosoft.util.collections.floats.FloatListUtil
|
||||||
|
|
||||||
open class GUIMeshElement<T : Element>(
|
open class GUIMeshElement<T : Element>(
|
||||||
val element: T,
|
val element: T,
|
||||||
@ -42,7 +42,7 @@ open class GUIMeshElement<T : Element>(
|
|||||||
override val context: RenderContext = guiRenderer.context
|
override val context: RenderContext = guiRenderer.context
|
||||||
private val clickCounter = MouseClickCounter()
|
private val clickCounter = MouseClickCounter()
|
||||||
private var _mesh: GUIMesh? = null
|
private var _mesh: GUIMesh? = null
|
||||||
var mesh: GUIMesh = GUIMesh(context, guiRenderer.halfSize, FragmentedArrayFloatList(1000))
|
var mesh: GUIMesh = GUIMesh(context, guiRenderer.halfSize, FloatListUtil.direct(1000))
|
||||||
override val skipDraw: Boolean
|
override val skipDraw: Boolean
|
||||||
get() = if (element is BaseDrawable) element.skipDraw else false
|
get() = if (element is BaseDrawable) element.skipDraw else false
|
||||||
protected var lastRevision = 0L
|
protected var lastRevision = 0L
|
||||||
|
@ -28,7 +28,7 @@ import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder
|
|||||||
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.other.debug.DebugHUDElement
|
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.other.debug.DebugHUDElement
|
||||||
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIMesh
|
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIMesh
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.BlendingFunctions
|
import de.bixilon.minosoft.gui.rendering.system.base.BlendingFunctions
|
||||||
import de.bixilon.minosoft.util.collections.floats.FragmentedArrayFloatList
|
import de.bixilon.minosoft.util.collections.floats.BufferedArrayFloatList
|
||||||
|
|
||||||
class CrosshairHUDElement(guiRenderer: GUIRenderer) : CustomHUDElement(guiRenderer) {
|
class CrosshairHUDElement(guiRenderer: GUIRenderer) : CustomHUDElement(guiRenderer) {
|
||||||
private val profile = guiRenderer.connection.profiles.gui
|
private val profile = guiRenderer.connection.profiles.gui
|
||||||
@ -91,7 +91,7 @@ class CrosshairHUDElement(guiRenderer: GUIRenderer) : CustomHUDElement(guiRender
|
|||||||
mesh?.unload()
|
mesh?.unload()
|
||||||
this.mesh = null
|
this.mesh = null
|
||||||
|
|
||||||
val mesh = GUIMesh(context, guiRenderer.halfSize, FragmentedArrayFloatList(42))
|
val mesh = GUIMesh(context, guiRenderer.halfSize, BufferedArrayFloatList(42))
|
||||||
val start = (guiRenderer.scaledSize - CROSSHAIR_SIZE) / 2
|
val start = (guiRenderer.scaledSize - CROSSHAIR_SIZE) / 2
|
||||||
mesh.addQuad(start, start + CROSSHAIR_SIZE, crosshairAtlasElement, crosshairProfile.color, null)
|
mesh.addQuad(start, start + CROSSHAIR_SIZE, crosshairAtlasElement, crosshairProfile.color, null)
|
||||||
|
|
||||||
|
@ -22,12 +22,11 @@ import de.bixilon.minosoft.gui.rendering.system.base.texture.shader.ShaderIdenti
|
|||||||
import de.bixilon.minosoft.gui.rendering.system.base.texture.shader.ShaderTexture
|
import de.bixilon.minosoft.gui.rendering.system.base.texture.shader.ShaderTexture
|
||||||
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
|
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
|
||||||
import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct
|
import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct
|
||||||
import de.bixilon.minosoft.util.collections.floats.FragmentedArrayFloatList
|
|
||||||
|
|
||||||
class GUIMesh(
|
class GUIMesh(
|
||||||
context: RenderContext,
|
context: RenderContext,
|
||||||
val halfSize: Vec2,
|
val halfSize: Vec2,
|
||||||
data: FragmentedArrayFloatList,
|
data: AbstractFloatList,
|
||||||
) : Mesh(context, GUIMeshStruct, initialCacheSize = 40000, clearOnLoad = false, data = data), GUIVertexConsumer {
|
) : Mesh(context, GUIMeshStruct, initialCacheSize = 40000, clearOnLoad = false, data = data), GUIVertexConsumer {
|
||||||
private val whiteTexture = context.textures.whiteTexture
|
private val whiteTexture = context.textures.whiteTexture
|
||||||
override val order = context.system.quadOrder
|
override val order = context.system.quadOrder
|
||||||
|
@ -16,6 +16,7 @@ package de.bixilon.minosoft.gui.rendering.particle
|
|||||||
import de.bixilon.kotlinglm.vec2.Vec2
|
import de.bixilon.kotlinglm.vec2.Vec2
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3
|
import de.bixilon.kotlinglm.vec3.Vec3
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3d
|
import de.bixilon.kotlinglm.vec3.Vec3d
|
||||||
|
import de.bixilon.kutil.collections.primitive.floats.AbstractFloatList
|
||||||
import de.bixilon.minosoft.data.text.formatting.color.RGBColor
|
import de.bixilon.minosoft.data.text.formatting.color.RGBColor
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer
|
import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer
|
||||||
@ -23,9 +24,8 @@ import de.bixilon.minosoft.gui.rendering.system.base.buffer.vertex.PrimitiveType
|
|||||||
import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.Texture
|
import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.Texture
|
||||||
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
|
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
|
||||||
import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct
|
import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct
|
||||||
import de.bixilon.minosoft.util.collections.floats.FragmentedArrayFloatList
|
|
||||||
|
|
||||||
class ParticleMesh(context: RenderContext, data: FragmentedArrayFloatList) : Mesh(context, ParticleMeshStruct, PrimitiveTypes.POINT, -1, clearOnLoad = false, data = data) {
|
class ParticleMesh(context: RenderContext, data: AbstractFloatList) : Mesh(context, ParticleMeshStruct, PrimitiveTypes.POINT, -1, clearOnLoad = false, data = data) {
|
||||||
|
|
||||||
fun addVertex(position: Vec3d, scale: Float, texture: Texture, tintColor: RGBColor, uvMin: FloatArray? = null, uvMax: FloatArray? = null, light: Int) {
|
fun addVertex(position: Vec3d, scale: Float, texture: Texture, tintColor: RGBColor, uvMin: FloatArray? = null, uvMax: FloatArray? = null, light: Int) {
|
||||||
val minTransformedUV = if (uvMin == null) {
|
val minTransformedUV = if (uvMin == null) {
|
||||||
|
@ -39,7 +39,7 @@ import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates
|
|||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates.Companion.disconnected
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates.Companion.disconnected
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||||
import de.bixilon.minosoft.util.chunk.ChunkUtil.isInViewDistance
|
import de.bixilon.minosoft.util.chunk.ChunkUtil.isInViewDistance
|
||||||
import de.bixilon.minosoft.util.collections.floats.FragmentedArrayFloatList
|
import de.bixilon.minosoft.util.collections.floats.BufferedArrayFloatList
|
||||||
|
|
||||||
|
|
||||||
class ParticleRenderer(
|
class ParticleRenderer(
|
||||||
@ -53,8 +53,8 @@ class ParticleRenderer(
|
|||||||
private val translucentShader = renderSystem.createShader(minosoft("particle")) { ParticleShader(it, false) }
|
private val translucentShader = renderSystem.createShader(minosoft("particle")) { ParticleShader(it, false) }
|
||||||
|
|
||||||
// There is no opaque mesh because it is simply not needed (every particle has transparency)
|
// There is no opaque mesh because it is simply not needed (every particle has transparency)
|
||||||
private var transparentMesh = ParticleMesh(context, FragmentedArrayFloatList(MAXIMUM_AMOUNT * ParticleMesh.ParticleMeshStruct.FLOATS_PER_VERTEX))
|
private var transparentMesh = ParticleMesh(context, BufferedArrayFloatList(MAXIMUM_AMOUNT * ParticleMesh.ParticleMeshStruct.FLOATS_PER_VERTEX))
|
||||||
private var translucentMesh = ParticleMesh(context, FragmentedArrayFloatList(MAXIMUM_AMOUNT * ParticleMesh.ParticleMeshStruct.FLOATS_PER_VERTEX))
|
private var translucentMesh = ParticleMesh(context, BufferedArrayFloatList(MAXIMUM_AMOUNT * ParticleMesh.ParticleMeshStruct.FLOATS_PER_VERTEX))
|
||||||
|
|
||||||
private val particlesLock = SimpleLock()
|
private val particlesLock = SimpleLock()
|
||||||
private var particles: MutableList<Particle> = mutableListOf()
|
private var particles: MutableList<Particle> = mutableListOf()
|
||||||
|
@ -15,12 +15,15 @@ package de.bixilon.minosoft.gui.rendering.util.mesh
|
|||||||
|
|
||||||
import de.bixilon.kotlinglm.vec2.Vec2
|
import de.bixilon.kotlinglm.vec2.Vec2
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3
|
import de.bixilon.kotlinglm.vec3.Vec3
|
||||||
|
import de.bixilon.kutil.cast.CastUtil.nullCast
|
||||||
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
||||||
|
import de.bixilon.kutil.collections.primitive.floats.AbstractFloatList
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.buffer.vertex.FloatVertexBuffer
|
import de.bixilon.minosoft.gui.rendering.system.base.buffer.vertex.FloatVertexBuffer
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.buffer.vertex.PrimitiveTypes
|
import de.bixilon.minosoft.gui.rendering.system.base.buffer.vertex.PrimitiveTypes
|
||||||
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2Util
|
||||||
import de.bixilon.minosoft.util.collections.floats.DirectArrayFloatList
|
import de.bixilon.minosoft.util.collections.floats.DirectArrayFloatList
|
||||||
import de.bixilon.minosoft.util.collections.floats.FragmentedArrayFloatList
|
import de.bixilon.minosoft.util.collections.floats.FloatListUtil
|
||||||
|
|
||||||
abstract class Mesh(
|
abstract class Mesh(
|
||||||
val context: RenderContext,
|
val context: RenderContext,
|
||||||
@ -28,15 +31,15 @@ abstract class Mesh(
|
|||||||
val quadType: PrimitiveTypes = context.system.quadType,
|
val quadType: PrimitiveTypes = context.system.quadType,
|
||||||
var initialCacheSize: Int = 10000,
|
var initialCacheSize: Int = 10000,
|
||||||
val clearOnLoad: Boolean = true,
|
val clearOnLoad: Boolean = true,
|
||||||
data: FragmentedArrayFloatList? = null,
|
data: AbstractFloatList? = null,
|
||||||
val onDemand: Boolean = false,
|
val onDemand: Boolean = false,
|
||||||
) : AbstractVertexConsumer {
|
) : AbstractVertexConsumer {
|
||||||
override val order = context.system.legacyQuadOrder
|
override val order = context.system.legacyQuadOrder
|
||||||
private var _data: FragmentedArrayFloatList? = data ?: if (onDemand) null else FragmentedArrayFloatList(initialCacheSize)
|
private var _data: AbstractFloatList? = data ?: if (onDemand) null else FloatListUtil.direct(initialCacheSize)
|
||||||
var data: FragmentedArrayFloatList
|
var data: AbstractFloatList
|
||||||
get() {
|
get() {
|
||||||
if (_data == null && onDemand) {
|
if (_data == null && onDemand) {
|
||||||
_data = FragmentedArrayFloatList(initialCacheSize)
|
_data = FloatListUtil.direct(initialCacheSize)
|
||||||
}
|
}
|
||||||
return _data.unsafeCast()
|
return _data.unsafeCast()
|
||||||
}
|
}
|
||||||
@ -85,14 +88,14 @@ abstract class Mesh(
|
|||||||
fun unload() {
|
fun unload() {
|
||||||
when (state) {
|
when (state) {
|
||||||
MeshStates.LOADED -> buffer.unload()
|
MeshStates.LOADED -> buffer.unload()
|
||||||
MeshStates.PREPARING, MeshStates.FINISHED -> _data?.unload()
|
MeshStates.PREPARING, MeshStates.FINISHED -> _data?.nullCast<DirectArrayFloatList>()?.unload()
|
||||||
else -> throw IllegalStateException("Mesh is already unloaded")
|
else -> throw IllegalStateException("Mesh is already unloaded")
|
||||||
}
|
}
|
||||||
state = MeshStates.UNLOADED
|
state = MeshStates.UNLOADED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline fun addXQuad(start: Vec2, x: Float, end: Vec2, uvStart: Vec2 = Vec2(0.0f, 0.0f), uvEnd: Vec2 = Vec2(1.0f, 1.0f), vertexConsumer: (position: Vec3, uv: Vec2) -> Unit) {
|
inline fun addXQuad(start: Vec2, x: Float, end: Vec2, uvStart: Vec2 = Vec2Util.EMPTY, uvEnd: Vec2 = Vec2Util.ONE, vertexConsumer: (position: Vec3, uv: Vec2) -> Unit) {
|
||||||
val positions = arrayOf(
|
val positions = arrayOf(
|
||||||
Vec3(x, start.x, start.y),
|
Vec3(x, start.x, start.y),
|
||||||
Vec3(x, start.x, end.y),
|
Vec3(x, start.x, end.y),
|
||||||
@ -102,7 +105,7 @@ abstract class Mesh(
|
|||||||
addQuad(positions, uvStart, uvEnd, vertexConsumer)
|
addQuad(positions, uvStart, uvEnd, vertexConsumer)
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun addYQuad(start: Vec2, y: Float, end: Vec2, uvStart: Vec2 = Vec2(0.0f, 0.0f), uvEnd: Vec2 = Vec2(1.0f, 1.0f), vertexConsumer: (position: Vec3, uv: Vec2) -> Unit) {
|
inline fun addYQuad(start: Vec2, y: Float, end: Vec2, uvStart: Vec2 = Vec2Util.EMPTY, uvEnd: Vec2 = Vec2Util.ONE, vertexConsumer: (position: Vec3, uv: Vec2) -> Unit) {
|
||||||
val positions = arrayOf(
|
val positions = arrayOf(
|
||||||
Vec3(start.x, y, end.y),
|
Vec3(start.x, y, end.y),
|
||||||
Vec3(end.x, y, end.y),
|
Vec3(end.x, y, end.y),
|
||||||
@ -112,7 +115,7 @@ abstract class Mesh(
|
|||||||
addQuad(positions, uvStart, uvEnd, vertexConsumer)
|
addQuad(positions, uvStart, uvEnd, vertexConsumer)
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun addZQuad(start: Vec2, z: Float, end: Vec2, uvStart: Vec2 = Vec2(0.0f, 0.0f), uvEnd: Vec2 = Vec2(1.0f, 1.0f), vertexConsumer: (position: Vec3, uv: Vec2) -> Unit) {
|
inline fun addZQuad(start: Vec2, z: Float, end: Vec2, uvStart: Vec2 = Vec2Util.EMPTY, uvEnd: Vec2 = Vec2Util.ONE, vertexConsumer: (position: Vec3, uv: Vec2) -> Unit) {
|
||||||
val positions = arrayOf(
|
val positions = arrayOf(
|
||||||
Vec3(start.x, start.y, z),
|
Vec3(start.x, start.y, z),
|
||||||
Vec3(start.x, end.y, z),
|
Vec3(start.x, end.y, z),
|
||||||
@ -122,7 +125,7 @@ abstract class Mesh(
|
|||||||
addQuad(positions, uvStart, uvEnd, vertexConsumer)
|
addQuad(positions, uvStart, uvEnd, vertexConsumer)
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun addQuad(positions: Array<Vec3>, uvStart: Vec2 = Vec2(0.0f, 0.0f), uvEnd: Vec2 = Vec2(1.0f, 1.0f), vertexConsumer: (position: Vec3, uv: Vec2) -> Unit) {
|
inline fun addQuad(positions: Array<Vec3>, uvStart: Vec2 = Vec2Util.EMPTY, uvEnd: Vec2 = Vec2Util.ONE, vertexConsumer: (position: Vec3, uv: Vec2) -> Unit) {
|
||||||
val texturePositions = arrayOf(
|
val texturePositions = arrayOf(
|
||||||
uvStart,
|
uvStart,
|
||||||
Vec2(uvStart.x, uvEnd.y),
|
Vec2(uvStart.x, uvEnd.y),
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2020-2022 Moritz Zwerger
|
* Copyright (C) 2020-2023 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 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.
|
||||||
*
|
*
|
||||||
@ -19,6 +19,8 @@ import de.bixilon.kutil.math.interpolation.FloatInterpolation.interpolateSine
|
|||||||
import de.bixilon.kutil.primitive.FloatUtil.toFloat
|
import de.bixilon.kutil.primitive.FloatUtil.toFloat
|
||||||
|
|
||||||
object Vec2Util {
|
object Vec2Util {
|
||||||
|
val EMPTY = Vec2.EMPTY
|
||||||
|
val ONE = Vec2(1.0f)
|
||||||
|
|
||||||
val Vec2.Companion.MIN: Vec2
|
val Vec2.Companion.MIN: Vec2
|
||||||
get() = Vec2(Float.MIN_VALUE, Float.MIN_VALUE)
|
get() = Vec2(Float.MIN_VALUE, Float.MIN_VALUE)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user