diff options
author | nea <nea@nea.moe> | 2023-05-03 01:39:27 +0200 |
---|---|---|
committer | nea <nea@nea.moe> | 2023-05-03 01:39:27 +0200 |
commit | f844feba1b874a946f020574fee06c5926d042f8 (patch) | |
tree | 8b0cd0303107ff5be1721f1760b82353126170ad /src/main/kotlin | |
parent | f93df266c60de0567be1c963d0fbc0861bc4f197 (diff) | |
download | Firmament-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.kt | 2 | ||||
-rw-r--r-- | src/main/kotlin/moe/nea/notenoughupdates/util/render/block.kt | 96 |
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() |