aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin
diff options
context:
space:
mode:
authornea <nea@nea.moe>2023-05-03 01:39:27 +0200
committernea <nea@nea.moe>2023-05-03 01:39:27 +0200
commitf844feba1b874a946f020574fee06c5926d042f8 (patch)
tree8b0cd0303107ff5be1721f1760b82353126170ad /src/main/kotlin
parentf93df266c60de0567be1c963d0fbc0861bc4f197 (diff)
downloadFirmament-f844feba1b874a946f020574fee06c5926d042f8.tar.gz
Firmament-f844feba1b874a946f020574fee06c5926d042f8.tar.bz2
Firmament-f844feba1b874a946f020574fee06c5926d042f8.zip
Make proper use of matrixstack for block highlights
Diffstat (limited to 'src/main/kotlin')
-rw-r--r--src/main/kotlin/moe/nea/notenoughupdates/features/world/FairySouls.kt2
-rw-r--r--src/main/kotlin/moe/nea/notenoughupdates/util/render/block.kt96
2 files changed, 51 insertions, 47 deletions
diff --git a/src/main/kotlin/moe/nea/notenoughupdates/features/world/FairySouls.kt b/src/main/kotlin/moe/nea/notenoughupdates/features/world/FairySouls.kt
index b8052a6..d65af26 100644
--- a/src/main/kotlin/moe/nea/notenoughupdates/features/world/FairySouls.kt
+++ b/src/main/kotlin/moe/nea/notenoughupdates/features/world/FairySouls.kt
@@ -105,7 +105,7 @@ object FairySouls : NEUFeature,
}
WorldRenderLastEvent.subscribe {
if (!TConfig.displaySouls) return@subscribe
- renderBlocks(it.camera) {
+ renderBlocks(it.matrices, it.camera) {
color(1F, 1F, 0F, 0.8F)
currentMissingSouls.forEach {
block(it.blockPos)
diff --git a/src/main/kotlin/moe/nea/notenoughupdates/util/render/block.kt b/src/main/kotlin/moe/nea/notenoughupdates/util/render/block.kt
index 9a02996..487a264 100644
--- a/src/main/kotlin/moe/nea/notenoughupdates/util/render/block.kt
+++ b/src/main/kotlin/moe/nea/notenoughupdates/util/render/block.kt
@@ -1,6 +1,7 @@
package moe.nea.notenoughupdates.util.render
import com.mojang.blaze3d.systems.RenderSystem
+import org.joml.Matrix4f
import net.minecraft.client.gl.VertexBuffer
import net.minecraft.client.render.BufferBuilder
import net.minecraft.client.render.Camera
@@ -8,77 +9,80 @@ import net.minecraft.client.render.GameRenderer
import net.minecraft.client.render.Tessellator
import net.minecraft.client.render.VertexFormat
import net.minecraft.client.render.VertexFormats
+import net.minecraft.client.util.math.MatrixStack
import net.minecraft.util.math.BlockPos
-import net.minecraft.util.math.Vec3d
-class RenderBlockContext(val tesselator: Tessellator, val camPos: Vec3d) {
- val buffer = tesselator.buffer
+class RenderBlockContext(private val tesselator: Tessellator, private val matrixStack: MatrixStack) {
+ private val buffer = tesselator.buffer
fun color(red: Float, green: Float, blue: Float, alpha: Float) {
RenderSystem.setShaderColor(red, green, blue, alpha)
}
fun block(blockPos: BlockPos) {
- val matrixStack = RenderSystem.getModelViewStack()
matrixStack.push()
- matrixStack.translate(blockPos.x - camPos.x, blockPos.y - camPos.y, blockPos.z - camPos.z)
- RenderSystem.applyModelViewMatrix()
+ matrixStack.translate(blockPos.x.toFloat(), blockPos.y.toFloat(), blockPos.z.toFloat())
RenderSystem.setShader(GameRenderer::getPositionColorProgram)
- buildCube(buffer)
+ buildCube(matrixStack.peek().positionMatrix, buffer)
tesselator.draw()
matrixStack.pop()
}
companion object {
- fun buildCube(buf: BufferBuilder) {
+ private fun buildCube(matrix: Matrix4f, buf: BufferBuilder) {
buf.begin(VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION_COLOR)
buf.fixedColor(255, 255, 255, 255)
- buf.vertex(0.0, 0.0, 0.0).next()
- buf.vertex(0.0, 0.0, 1.0).next()
- buf.vertex(0.0, 1.0, 1.0).next()
- buf.vertex(1.0, 1.0, 0.0).next()
- buf.vertex(0.0, 0.0, 0.0).next()
- buf.vertex(0.0, 1.0, 0.0).next()
- buf.vertex(1.0, 0.0, 1.0).next()
- buf.vertex(0.0, 0.0, 0.0).next()
- buf.vertex(1.0, 0.0, 0.0).next()
- buf.vertex(1.0, 1.0, 0.0).next()
- buf.vertex(1.0, 0.0, 0.0).next()
- buf.vertex(0.0, 0.0, 0.0).next()
- buf.vertex(0.0, 0.0, 0.0).next()
- buf.vertex(0.0, 1.0, 1.0).next()
- buf.vertex(0.0, 1.0, 0.0).next()
- buf.vertex(1.0, 0.0, 1.0).next()
- buf.vertex(0.0, 0.0, 1.0).next()
- buf.vertex(0.0, 0.0, 0.0).next()
- buf.vertex(0.0, 1.0, 1.0).next()
- buf.vertex(0.0, 0.0, 1.0).next()
- buf.vertex(1.0, 0.0, 1.0).next()
- buf.vertex(1.0, 1.0, 1.0).next()
- buf.vertex(1.0, 0.0, 0.0).next()
- buf.vertex(1.0, 1.0, 0.0).next()
- buf.vertex(1.0, 0.0, 0.0).next()
- buf.vertex(1.0, 1.0, 1.0).next()
- buf.vertex(1.0, 0.0, 1.0).next()
- buf.vertex(1.0, 1.0, 1.0).next()
- buf.vertex(1.0, 1.0, 0.0).next()
- buf.vertex(0.0, 1.0, 0.0).next()
- buf.vertex(1.0, 1.0, 1.0).next()
- buf.vertex(0.0, 1.0, 0.0).next()
- buf.vertex(0.0, 1.0, 1.0).next()
- buf.vertex(1.0, 1.0, 1.0).next()
- buf.vertex(0.0, 1.0, 1.0).next()
- buf.vertex(1.0, 0.0, 1.0).next()
+ buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next()
+ buf.vertex(matrix, 0.0F, 0.0F, 1.0F).next()
+ buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next()
+ buf.vertex(matrix, 1.0F, 1.0F, 0.0F).next()
+ buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next()
+ buf.vertex(matrix, 0.0F, 1.0F, 0.0F).next()
+ buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next()
+ buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next()
+ buf.vertex(matrix, 1.0F, 0.0F, 0.0F).next()
+ buf.vertex(matrix, 1.0F, 1.0F, 0.0F).next()
+ buf.vertex(matrix, 1.0F, 0.0F, 0.0F).next()
+ buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next()
+ buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next()
+ buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next()
+ buf.vertex(matrix, 0.0F, 1.0F, 0.0F).next()
+ buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next()
+ buf.vertex(matrix, 0.0F, 0.0F, 1.0F).next()
+ buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next()
+ buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next()
+ buf.vertex(matrix, 0.0F, 0.0F, 1.0F).next()
+ buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next()
+ buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next()
+ buf.vertex(matrix, 1.0F, 0.0F, 0.0F).next()
+ buf.vertex(matrix, 1.0F, 1.0F, 0.0F).next()
+ buf.vertex(matrix, 1.0F, 0.0F, 0.0F).next()
+ buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next()
+ buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next()
+ buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next()
+ buf.vertex(matrix, 1.0F, 1.0F, 0.0F).next()
+ buf.vertex(matrix, 0.0F, 1.0F, 0.0F).next()
+ buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next()
+ buf.vertex(matrix, 0.0F, 1.0F, 0.0F).next()
+ buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next()
+ buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next()
+ buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next()
+ buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next()
buf.unfixColor()
}
- fun renderBlocks(camera: Camera, block: RenderBlockContext. () -> Unit) {
+ fun renderBlocks(matrices: MatrixStack, camera: Camera, block: RenderBlockContext. () -> Unit) {
RenderSystem.disableDepthTest()
RenderSystem.enableBlend()
RenderSystem.defaultBlendFunc()
- val ctx = RenderBlockContext(Tessellator.getInstance(), camera.pos)
+ matrices.push()
+ matrices.translate(-camera.pos.x, -camera.pos.y, -camera.pos.z)
+
+ val ctx = RenderBlockContext(Tessellator.getInstance(), matrices)
block(ctx)
+ matrices.pop()
+
VertexBuffer.unbind()
RenderSystem.enableDepthTest()
RenderSystem.disableBlend()