Make proper use of matrixstack for block highlights
This commit is contained in:
@@ -105,7 +105,7 @@ object FairySouls : NEUFeature,
|
|||||||
}
|
}
|
||||||
WorldRenderLastEvent.subscribe {
|
WorldRenderLastEvent.subscribe {
|
||||||
if (!TConfig.displaySouls) return@subscribe
|
if (!TConfig.displaySouls) return@subscribe
|
||||||
renderBlocks(it.camera) {
|
renderBlocks(it.matrices, it.camera) {
|
||||||
color(1F, 1F, 0F, 0.8F)
|
color(1F, 1F, 0F, 0.8F)
|
||||||
currentMissingSouls.forEach {
|
currentMissingSouls.forEach {
|
||||||
block(it.blockPos)
|
block(it.blockPos)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package moe.nea.notenoughupdates.util.render
|
package moe.nea.notenoughupdates.util.render
|
||||||
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem
|
import com.mojang.blaze3d.systems.RenderSystem
|
||||||
|
import org.joml.Matrix4f
|
||||||
import net.minecraft.client.gl.VertexBuffer
|
import net.minecraft.client.gl.VertexBuffer
|
||||||
import net.minecraft.client.render.BufferBuilder
|
import net.minecraft.client.render.BufferBuilder
|
||||||
import net.minecraft.client.render.Camera
|
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.Tessellator
|
||||||
import net.minecraft.client.render.VertexFormat
|
import net.minecraft.client.render.VertexFormat
|
||||||
import net.minecraft.client.render.VertexFormats
|
import net.minecraft.client.render.VertexFormats
|
||||||
|
import net.minecraft.client.util.math.MatrixStack
|
||||||
import net.minecraft.util.math.BlockPos
|
import net.minecraft.util.math.BlockPos
|
||||||
import net.minecraft.util.math.Vec3d
|
|
||||||
|
|
||||||
class RenderBlockContext(val tesselator: Tessellator, val camPos: Vec3d) {
|
class RenderBlockContext(private val tesselator: Tessellator, private val matrixStack: MatrixStack) {
|
||||||
val buffer = tesselator.buffer
|
private val buffer = tesselator.buffer
|
||||||
fun color(red: Float, green: Float, blue: Float, alpha: Float) {
|
fun color(red: Float, green: Float, blue: Float, alpha: Float) {
|
||||||
RenderSystem.setShaderColor(red, green, blue, alpha)
|
RenderSystem.setShaderColor(red, green, blue, alpha)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun block(blockPos: BlockPos) {
|
fun block(blockPos: BlockPos) {
|
||||||
val matrixStack = RenderSystem.getModelViewStack()
|
|
||||||
matrixStack.push()
|
matrixStack.push()
|
||||||
matrixStack.translate(blockPos.x - camPos.x, blockPos.y - camPos.y, blockPos.z - camPos.z)
|
matrixStack.translate(blockPos.x.toFloat(), blockPos.y.toFloat(), blockPos.z.toFloat())
|
||||||
RenderSystem.applyModelViewMatrix()
|
|
||||||
RenderSystem.setShader(GameRenderer::getPositionColorProgram)
|
RenderSystem.setShader(GameRenderer::getPositionColorProgram)
|
||||||
buildCube(buffer)
|
buildCube(matrixStack.peek().positionMatrix, buffer)
|
||||||
tesselator.draw()
|
tesselator.draw()
|
||||||
matrixStack.pop()
|
matrixStack.pop()
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun buildCube(buf: BufferBuilder) {
|
private fun buildCube(matrix: Matrix4f, buf: BufferBuilder) {
|
||||||
buf.begin(VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION_COLOR)
|
buf.begin(VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION_COLOR)
|
||||||
buf.fixedColor(255, 255, 255, 255)
|
buf.fixedColor(255, 255, 255, 255)
|
||||||
buf.vertex(0.0, 0.0, 0.0).next()
|
buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next()
|
||||||
buf.vertex(0.0, 0.0, 1.0).next()
|
buf.vertex(matrix, 0.0F, 0.0F, 1.0F).next()
|
||||||
buf.vertex(0.0, 1.0, 1.0).next()
|
buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next()
|
||||||
buf.vertex(1.0, 1.0, 0.0).next()
|
buf.vertex(matrix, 1.0F, 1.0F, 0.0F).next()
|
||||||
buf.vertex(0.0, 0.0, 0.0).next()
|
buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next()
|
||||||
buf.vertex(0.0, 1.0, 0.0).next()
|
buf.vertex(matrix, 0.0F, 1.0F, 0.0F).next()
|
||||||
buf.vertex(1.0, 0.0, 1.0).next()
|
buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next()
|
||||||
buf.vertex(0.0, 0.0, 0.0).next()
|
buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next()
|
||||||
buf.vertex(1.0, 0.0, 0.0).next()
|
buf.vertex(matrix, 1.0F, 0.0F, 0.0F).next()
|
||||||
buf.vertex(1.0, 1.0, 0.0).next()
|
buf.vertex(matrix, 1.0F, 1.0F, 0.0F).next()
|
||||||
buf.vertex(1.0, 0.0, 0.0).next()
|
buf.vertex(matrix, 1.0F, 0.0F, 0.0F).next()
|
||||||
buf.vertex(0.0, 0.0, 0.0).next()
|
buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next()
|
||||||
buf.vertex(0.0, 0.0, 0.0).next()
|
buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next()
|
||||||
buf.vertex(0.0, 1.0, 1.0).next()
|
buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next()
|
||||||
buf.vertex(0.0, 1.0, 0.0).next()
|
buf.vertex(matrix, 0.0F, 1.0F, 0.0F).next()
|
||||||
buf.vertex(1.0, 0.0, 1.0).next()
|
buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next()
|
||||||
buf.vertex(0.0, 0.0, 1.0).next()
|
buf.vertex(matrix, 0.0F, 0.0F, 1.0F).next()
|
||||||
buf.vertex(0.0, 0.0, 0.0).next()
|
buf.vertex(matrix, 0.0F, 0.0F, 0.0F).next()
|
||||||
buf.vertex(0.0, 1.0, 1.0).next()
|
buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next()
|
||||||
buf.vertex(0.0, 0.0, 1.0).next()
|
buf.vertex(matrix, 0.0F, 0.0F, 1.0F).next()
|
||||||
buf.vertex(1.0, 0.0, 1.0).next()
|
buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next()
|
||||||
buf.vertex(1.0, 1.0, 1.0).next()
|
buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next()
|
||||||
buf.vertex(1.0, 0.0, 0.0).next()
|
buf.vertex(matrix, 1.0F, 0.0F, 0.0F).next()
|
||||||
buf.vertex(1.0, 1.0, 0.0).next()
|
buf.vertex(matrix, 1.0F, 1.0F, 0.0F).next()
|
||||||
buf.vertex(1.0, 0.0, 0.0).next()
|
buf.vertex(matrix, 1.0F, 0.0F, 0.0F).next()
|
||||||
buf.vertex(1.0, 1.0, 1.0).next()
|
buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next()
|
||||||
buf.vertex(1.0, 0.0, 1.0).next()
|
buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next()
|
||||||
buf.vertex(1.0, 1.0, 1.0).next()
|
buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next()
|
||||||
buf.vertex(1.0, 1.0, 0.0).next()
|
buf.vertex(matrix, 1.0F, 1.0F, 0.0F).next()
|
||||||
buf.vertex(0.0, 1.0, 0.0).next()
|
buf.vertex(matrix, 0.0F, 1.0F, 0.0F).next()
|
||||||
buf.vertex(1.0, 1.0, 1.0).next()
|
buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next()
|
||||||
buf.vertex(0.0, 1.0, 0.0).next()
|
buf.vertex(matrix, 0.0F, 1.0F, 0.0F).next()
|
||||||
buf.vertex(0.0, 1.0, 1.0).next()
|
buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next()
|
||||||
buf.vertex(1.0, 1.0, 1.0).next()
|
buf.vertex(matrix, 1.0F, 1.0F, 1.0F).next()
|
||||||
buf.vertex(0.0, 1.0, 1.0).next()
|
buf.vertex(matrix, 0.0F, 1.0F, 1.0F).next()
|
||||||
buf.vertex(1.0, 0.0, 1.0).next()
|
buf.vertex(matrix, 1.0F, 0.0F, 1.0F).next()
|
||||||
buf.unfixColor()
|
buf.unfixColor()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun renderBlocks(camera: Camera, block: RenderBlockContext. () -> Unit) {
|
fun renderBlocks(matrices: MatrixStack, camera: Camera, block: RenderBlockContext. () -> Unit) {
|
||||||
RenderSystem.disableDepthTest()
|
RenderSystem.disableDepthTest()
|
||||||
RenderSystem.enableBlend()
|
RenderSystem.enableBlend()
|
||||||
RenderSystem.defaultBlendFunc()
|
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)
|
block(ctx)
|
||||||
|
|
||||||
|
matrices.pop()
|
||||||
|
|
||||||
VertexBuffer.unbind()
|
VertexBuffer.unbind()
|
||||||
RenderSystem.enableDepthTest()
|
RenderSystem.enableDepthTest()
|
||||||
RenderSystem.disableBlend()
|
RenderSystem.disableBlend()
|
||||||
|
|||||||
@@ -18,5 +18,7 @@
|
|||||||
"notenoughupdates.sbinfo.server": "Locraw Server: %s",
|
"notenoughupdates.sbinfo.server": "Locraw Server: %s",
|
||||||
"notenoughupdates.sbinfo.gametype": "Locraw Gametype: %s",
|
"notenoughupdates.sbinfo.gametype": "Locraw Gametype: %s",
|
||||||
"notenoughupdates.sbinfo.mode": "Locraw Mode: %s",
|
"notenoughupdates.sbinfo.mode": "Locraw Mode: %s",
|
||||||
"notenoughupdates.sbinfo.map": "Locraw Map: %s"
|
"notenoughupdates.sbinfo.map": "Locraw Map: %s",
|
||||||
|
"neu.config.fairysouls.show": "Show Fairy Soul Waypoints",
|
||||||
|
"neu.config.fairysouls.reset": "Reset Collected Fairy Souls"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user