1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
package moe.nea.notenoughupdates.util.render
import com.mojang.blaze3d.systems.RenderSystem
import net.minecraft.client.gl.VertexBuffer
import net.minecraft.client.render.BufferBuilder
import net.minecraft.client.render.Camera
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.util.math.BlockPos
import net.minecraft.util.math.Vec3d
class RenderBlockContext(val tesselator: Tessellator, val camPos: Vec3d) {
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()
RenderSystem.setShader(GameRenderer::getPositionColorProgram)
buildCube(buffer)
tesselator.draw()
matrixStack.pop()
}
companion object {
fun buildCube(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.unfixColor()
}
fun renderBlocks(camera: Camera, block: RenderBlockContext. () -> Unit) {
RenderSystem.disableDepthTest()
RenderSystem.enableBlend()
RenderSystem.defaultBlendFunc()
val ctx = RenderBlockContext(Tessellator.getInstance(), camera.pos)
block(ctx)
VertexBuffer.unbind()
RenderSystem.enableDepthTest()
RenderSystem.disableBlend()
}
}
}
|