Skip to content

Commit 6f7a07d

Browse files
committed
New Lambda RenderPipeline using native MC renderer
- Solved precision issues with ESP - Using MC new render API
1 parent 90ca652 commit 6f7a07d

File tree

15 files changed

+1561
-588
lines changed

15 files changed

+1561
-588
lines changed

src/main/java/com/lambda/mixin/render/GameRendererMixin.java

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,15 @@
2727
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
2828
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
2929
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
30+
import com.mojang.blaze3d.buffers.GpuBufferSlice;
3031
import net.minecraft.client.render.Camera;
3132
import net.minecraft.client.render.GameRenderer;
3233
import net.minecraft.client.render.RenderTickCounter;
3334
import net.minecraft.client.render.WorldRenderer;
3435
import net.minecraft.client.util.ObjectAllocator;
3536
import net.minecraft.item.ItemStack;
3637
import org.joml.Matrix4f;
38+
import org.joml.Vector4f;
3739
import org.spongepowered.asm.mixin.Mixin;
3840
import org.spongepowered.asm.mixin.injection.At;
3941
import org.spongepowered.asm.mixin.injection.Inject;
@@ -48,24 +50,12 @@ private void updateTargetedEntityInvoke(float tickDelta, CallbackInfo info) {
4850
}
4951
}
5052

51-
/**
52-
* Begins our 3d render after the game has rendered the world
53-
* <pre>{@code
54-
* float m = Math.max(h, (float)(Integer)this.client.options.getFov().getValue());
55-
* Matrix4f matrix4f2 = this.getBasicProjectionMatrix(m);
56-
* RenderSystem.setProjectionMatrix(matrix4f, ProjectionType.PERSPECTIVE);
57-
* Quaternionf quaternionf = camera.getRotation().conjugate(new Quaternionf());
58-
* Matrix4f matrix4f3 = (new Matrix4f()).rotation(quaternionf);
59-
* this.client.worldRenderer.setupFrustum(camera.getPos(), matrix4f3, matrix4f2);
60-
* this.client.worldRenderer.render(this.pool, renderTickCounter, bl, camera, this, matrix4f3, matrix4f);
61-
* }</pre>
62-
*/
63-
// @WrapOperation(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;render(Lnet/minecraft/client/util/ObjectAllocator;Lnet/minecraft/client/render/RenderTickCounter;ZLnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/GameRenderer;Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V"))
64-
// void onRenderWorld(WorldRenderer instance, ObjectAllocator allocator, RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, Matrix4f positionMatrix, Matrix4f projectionMatrix, Operation<Void> original) {
65-
// original.call(instance, allocator, tickCounter, renderBlockOutline, camera, gameRenderer, positionMatrix, projectionMatrix);
66-
//
67-
// RenderMain.render3D(positionMatrix, projectionMatrix);
68-
// }
53+
@WrapOperation(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;render(Lnet/minecraft/client/util/ObjectAllocator;Lnet/minecraft/client/render/RenderTickCounter;ZLnet/minecraft/client/render/Camera;Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;Lorg/joml/Vector4f;Z)V"))
54+
void onRenderWorld(WorldRenderer instance, ObjectAllocator allocator, RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera, Matrix4f positionMatrix, Matrix4f basicProjectionMatrix, Matrix4f projectionMatrix, GpuBufferSlice fogBuffer, Vector4f fogColor, boolean renderSky, Operation<Void> original) {
55+
original.call(instance, allocator, tickCounter, renderBlockOutline, camera, positionMatrix, basicProjectionMatrix, projectionMatrix, fogBuffer, fogColor, renderSky);
56+
57+
RenderMain.render3D(positionMatrix, projectionMatrix);
58+
}
6959

7060
@ModifyExpressionValue(method = "renderWorld", at = @At(value = "INVOKE", target = "Ljava/lang/Math;max(FF)F", ordinal = 0))
7161
private float modifyMax(float original) {

src/main/kotlin/com/lambda/event/events/RenderEvent.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@ import com.lambda.event.Event
2222
import com.lambda.event.callback.Cancellable
2323
import com.lambda.event.callback.ICancellable
2424
import com.lambda.event.listener.SafeListener.Companion.listen
25+
import com.lambda.graphics.RenderMain
2526
import com.lambda.graphics.renderer.esp.ShapeBuilder
26-
import com.lambda.graphics.renderer.esp.Treed
2727

2828
fun Any.onStaticRender(block: SafeContext.(ShapeBuilder) -> Unit) =
29-
listen<RenderEvent.Upload> { block(ShapeBuilder(Treed.Static.faceBuilder, Treed.Static.edgeBuilder)) }
29+
listen<RenderEvent.Upload> { block(ShapeBuilder(RenderMain.StaticESP)) }
30+
3031
fun Any.onDynamicRender(block: SafeContext.(ShapeBuilder) -> Unit) =
31-
listen<RenderEvent.Upload> { block(ShapeBuilder(Treed.Dynamic.faceBuilder, Treed.Dynamic.edgeBuilder)) }
32+
listen<RenderEvent.Upload> { block(ShapeBuilder(RenderMain.DynamicESP)) }
3233

3334
sealed class RenderEvent {
3435
object Upload : Event

src/main/kotlin/com/lambda/graphics/RenderMain.kt

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,60 +17,47 @@
1717

1818
package com.lambda.graphics
1919

20-
import com.lambda.Lambda.mc
2120
import com.lambda.event.EventFlow.post
2221
import com.lambda.event.events.RenderEvent
2322
import com.lambda.event.events.TickEvent
2423
import com.lambda.event.listener.SafeListener.Companion.listen
25-
import com.lambda.graphics.gl.GlStateUtils.setupGL
2624
import com.lambda.graphics.gl.Matrices
2725
import com.lambda.graphics.gl.Matrices.resetMatrices
28-
import com.lambda.graphics.renderer.esp.Treed
29-
import com.lambda.util.math.Vec2d
30-
import com.mojang.blaze3d.opengl.GlStateManager
31-
import com.mojang.blaze3d.systems.RenderSystem
32-
import net.minecraft.client.gl.GlBackend
33-
import net.minecraft.client.texture.GlTexture
26+
import com.lambda.graphics.mc.LambdaRenderPipelines
27+
import com.lambda.graphics.mc.TransientRegionESP
3428
import org.joml.Matrix4f
35-
import org.lwjgl.opengl.GL30.GL_FRAMEBUFFER
3629

3730
object RenderMain {
38-
val projectionMatrix = Matrix4f()
39-
val modelViewMatrix get() = Matrices.peek()
40-
val projModel: Matrix4f get() = Matrix4f(projectionMatrix).mul(modelViewMatrix)
31+
val StaticESP = TransientRegionESP("Static")
32+
val DynamicESP = TransientRegionESP("Dynamic")
4133

42-
var screenSize = Vec2d.ZERO
34+
val projectionMatrix = Matrix4f()
35+
val modelViewMatrix
36+
get() = Matrices.peek()
37+
val projModel: Matrix4f
38+
get() = Matrix4f(projectionMatrix).mul(modelViewMatrix)
4339

4440
@JvmStatic
4541
fun render3D(positionMatrix: Matrix4f, projMatrix: Matrix4f) {
4642
resetMatrices(positionMatrix)
4743
projectionMatrix.set(projMatrix)
4844

49-
setupGL {
50-
val framebuffer = mc.framebuffer
51-
val prevFramebuffer = (framebuffer.getColorAttachment() as GlTexture).getOrCreateFramebuffer(
52-
(RenderSystem.getDevice() as GlBackend).bufferManager,
53-
null
54-
)
55-
56-
GlStateManager._glBindFramebuffer(GL_FRAMEBUFFER, prevFramebuffer)
45+
// Render transient ESPs using the new pipeline
46+
StaticESP.render(false) // Depth tested
47+
DynamicESP.render(true) // Through walls
5748

58-
Treed.Static.render()
59-
Treed.Dynamic.render()
60-
61-
RenderEvent.Render.post()
62-
}
49+
RenderEvent.Render.post()
6350
}
6451

6552
init {
6653
listen<TickEvent.Post> {
67-
Treed.Static.clear()
68-
Treed.Dynamic.clear()
54+
StaticESP.clear()
55+
DynamicESP.clear()
6956

7057
RenderEvent.Upload.post()
7158

72-
Treed.Static.upload()
73-
Treed.Dynamic.upload()
59+
StaticESP.upload()
60+
DynamicESP.upload()
7461
}
7562
}
7663
}

src/main/kotlin/com/lambda/graphics/gl/GlStateUtils.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import org.lwjgl.opengl.GL30C.glDisable
3030
import org.lwjgl.opengl.GL30C.glEnable
3131
import org.lwjgl.opengl.GL30C.glLineWidth
3232

33+
// ToDo: Migrate particle system so we can remove this
3334
object GlStateUtils {
3435
private var depthTestState = true
3536
private var blendState = false

0 commit comments

Comments
 (0)