Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ boolean fillEntityRenderStatesIsRenderingReady(boolean original) {

@Inject(method = "method_62214", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/OutlineVertexConsumerProvider;draw()V"))
private void onRender(CallbackInfo ci) {
PostProcessShaders.endRender();
PostProcessShaders.submitEntityVertices();
}

@Inject(method = "onResized", at = @At("HEAD"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,10 @@
package meteordevelopment.meteorclient.systems.modules.render;

import meteordevelopment.meteorclient.MeteorClient;
import meteordevelopment.meteorclient.renderer.MeteorRenderPipelines;
import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.modules.Categories;
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.render.color.SettingColor;
import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.util.Identifier;
Expand All @@ -37,8 +35,6 @@ public class Chams extends Module {
.name("shader")
.description("Renders a shader over of the entities.")
.defaultValue(Shader.Image)
.onModuleActivated(setting -> updateShader(setting.get()))
.onChanged(this::updateShader)
.build()
);

Expand Down Expand Up @@ -190,11 +186,6 @@ public boolean isShader() {
return isActive() && shader.get() != Shader.None;
}

public void updateShader(Shader value) {
if (value == Shader.None) return;
PostProcessShaders.CHAMS.init(MeteorRenderPipelines.POST_IMAGE);
}

public enum Shader {
Image,
None
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@ public Color getColor(Entity entity) {
}

private double getFadeAlpha(Entity entity) {
double dist = PlayerUtils.squaredDistanceToCamera(entity.getX() + entity.getWidth() / 2, entity.getY() + entity.getEyeHeight(entity.getPose()), entity.getZ() + entity.getWidth() / 2);
double dist = PlayerUtils.squaredDistanceToCamera(entity.getX(), entity.getY() + entity.getEyeHeight(entity.getPose()), entity.getZ());
double fadeDist = Math.pow(fadeDistance.get(), 2);
double alpha = 1;
if (dist <= fadeDist * fadeDist) alpha = (float) (Math.sqrt(dist) / fadeDist);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import meteordevelopment.meteorclient.utils.render.SimpleBlockRenderer;
import meteordevelopment.meteorclient.utils.render.color.Color;
import meteordevelopment.meteorclient.utils.render.color.SettingColor;
import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShader;
import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders;
import meteordevelopment.meteorclient.utils.world.Dir;
import meteordevelopment.orbit.EventHandler;
Expand Down Expand Up @@ -297,13 +298,14 @@ private void onRender(Render3DEvent event) {
}

if (mode.get() == Mode.Shader && count > 0) {
PostProcessShaders.STORAGE_OUTLINE.endRender(() -> MeshRenderer.begin()
.attachments(mc.getFramebuffer())
MeshRenderer.begin()
.attachments(PostProcessShaders.STORAGE_OUTLINE.framebuffer)
.clearColor(Color.CLEAR)
.pipeline(MeteorRenderPipelines.WORLD_COLORED)
.mesh(mesh, event.matrices)
.end()
);
.end();

PostProcessShaders.STORAGE_OUTLINE.render();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import meteordevelopment.meteorclient.MeteorClient;
import meteordevelopment.meteorclient.events.game.ResourcePacksReloadedEvent;
import meteordevelopment.meteorclient.renderer.MeshRenderer;
import meteordevelopment.meteorclient.renderer.MeteorRenderPipelines;
import meteordevelopment.meteorclient.renderer.Texture;
import meteordevelopment.meteorclient.systems.modules.Modules;
import meteordevelopment.meteorclient.systems.modules.render.Chams;
Expand All @@ -39,6 +40,7 @@ public class ChamsShader extends EntityShader {
private static Chams chams;

public ChamsShader() {
super(MeteorRenderPipelines.POST_IMAGE);
MeteorClient.EVENT_BUS.subscribe(ChamsShader.class);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public class EntityOutlineShader extends EntityShader {
private static ESP esp;

public EntityOutlineShader() {
init(MeteorRenderPipelines.POST_OUTLINE);
super(MeteorRenderPipelines.POST_OUTLINE);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
package meteordevelopment.meteorclient.utils.render.postprocess;

import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.pipeline.RenderPipeline;
import meteordevelopment.meteorclient.mixininterface.IWorldRenderer;

import java.util.OptionalInt;
import meteordevelopment.meteorclient.utils.render.CustomOutlineVertexConsumerProvider;
import net.minecraft.entity.Entity;

import static meteordevelopment.meteorclient.MeteorClient.mc;

public abstract class EntityShader extends PostProcessShader {
@Override
public boolean beginRender() {
if (super.beginRender()) {
RenderSystem.getDevice().createCommandEncoder().clearColorTexture(framebuffer.getColorAttachment(), 0);
return true;
}
public final CustomOutlineVertexConsumerProvider vertexConsumerProvider;

return false;
protected EntityShader(RenderPipeline pipeline) {
super(pipeline);
this.vertexConsumerProvider = new CustomOutlineVertexConsumerProvider();
}

public abstract boolean shouldDraw(Entity entity);

@Override
protected void preDraw() {
((IWorldRenderer) mc.worldRenderer).meteor$pushEntityOutlineFramebuffer(framebuffer);
Expand All @@ -28,7 +27,7 @@ protected void postDraw() {
((IWorldRenderer) mc.worldRenderer).meteor$popEntityOutlineFramebuffer();
}

public void endRender() {
endRender(() -> vertexConsumerProvider.draw());
public void submitVertices() {
submitVertices(vertexConsumerProvider::draw);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,47 +7,47 @@
import com.mojang.blaze3d.textures.FilterMode;
import meteordevelopment.meteorclient.MeteorClient;
import meteordevelopment.meteorclient.renderer.MeshRenderer;
import meteordevelopment.meteorclient.utils.render.CustomOutlineVertexConsumerProvider;
import net.minecraft.client.gl.DynamicUniformStorage;
import net.minecraft.client.gl.Framebuffer;
import net.minecraft.client.gl.SimpleFramebuffer;
import net.minecraft.entity.Entity;

import java.nio.ByteBuffer;

import static meteordevelopment.meteorclient.MeteorClient.mc;
import static org.lwjgl.glfw.GLFW.glfwGetTime;

public abstract class PostProcessShader {
public CustomOutlineVertexConsumerProvider vertexConsumerProvider;
public Framebuffer framebuffer;
protected RenderPipeline pipeline;

public void init(RenderPipeline pipeline) {
if (vertexConsumerProvider == null) vertexConsumerProvider = new CustomOutlineVertexConsumerProvider();
if (framebuffer == null) framebuffer = new SimpleFramebuffer(MeteorClient.NAME + " PostProcessShader", mc.getWindow().getFramebufferWidth(), mc.getWindow().getFramebufferHeight(), true);
protected final RenderPipeline pipeline;
public final Framebuffer framebuffer;

protected PostProcessShader(RenderPipeline pipeline) {
this.pipeline = pipeline;
this.framebuffer = new SimpleFramebuffer(MeteorClient.NAME + " PostProcessShader " + this.getClass().getSimpleName(), mc.getWindow().getFramebufferWidth(), mc.getWindow().getFramebufferHeight(), true);
}

protected abstract boolean shouldDraw();
public abstract boolean shouldDraw(Entity entity);

protected void preDraw() {}
protected void postDraw() {}

protected abstract void setupPass(MeshRenderer renderer);

public boolean beginRender() {
return shouldDraw();
public void clearTexture() {
if (this.shouldDraw()) {
RenderSystem.getDevice().createCommandEncoder().clearColorTexture(framebuffer.getColorAttachment(), 0);
}
}

public void endRender(Runnable draw) {
public void submitVertices(Runnable draw) {
if (!shouldDraw()) return;

preDraw();
draw.run();
postDraw();
}

public void render() {
if (!shouldDraw()) return;

var renderer = MeshRenderer.begin()
.attachments(mc.getFramebuffer())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package meteordevelopment.meteorclient.utils.render.postprocess;

import meteordevelopment.meteorclient.MeteorClient;
import meteordevelopment.meteorclient.events.render.Render2DEvent;
import meteordevelopment.meteorclient.utils.PreInit;
import meteordevelopment.orbit.EventHandler;

import static meteordevelopment.meteorclient.MeteorClient.mc;

Expand All @@ -16,17 +19,25 @@ public static void init() {
CHAMS = new ChamsShader();
ENTITY_OUTLINE = new EntityOutlineShader();
STORAGE_OUTLINE = new StorageOutlineShader();

MeteorClient.EVENT_BUS.subscribe(PostProcessShaders.class);
}

public static void beginRender() {
CHAMS.beginRender();
ENTITY_OUTLINE.beginRender();
STORAGE_OUTLINE.beginRender();
CHAMS.clearTexture();
ENTITY_OUTLINE.clearTexture();
STORAGE_OUTLINE.clearTexture();
}

public static void submitEntityVertices() {
CHAMS.submitVertices();
ENTITY_OUTLINE.submitVertices();
}

public static void endRender() {
CHAMS.endRender();
ENTITY_OUTLINE.endRender();
@EventHandler
private static void onRender(Render2DEvent event) {
CHAMS.render();
ENTITY_OUTLINE.render();
}

public static void onResized(int width, int height) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,15 @@
package meteordevelopment.meteorclient.utils.render.postprocess;

import meteordevelopment.meteorclient.mixininterface.IMinecraftClient;
import meteordevelopment.meteorclient.renderer.MeshRenderer;
import meteordevelopment.meteorclient.renderer.MeteorRenderPipelines;
import meteordevelopment.meteorclient.systems.modules.Modules;
import meteordevelopment.meteorclient.systems.modules.render.StorageESP;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gl.Framebuffer;
import net.minecraft.entity.Entity;

public class StorageOutlineShader extends PostProcessShader {
private static StorageESP storageESP;
private Framebuffer mcFramebuffer;

public StorageOutlineShader() {
init(MeteorRenderPipelines.POST_OUTLINE);
}

@Override
protected void preDraw() {
mcFramebuffer = MinecraftClient.getInstance().getFramebuffer();
((IMinecraftClient) MinecraftClient.getInstance()).meteor$setFramebuffer(framebuffer);
}

@Override
protected void postDraw() {
((IMinecraftClient) MinecraftClient.getInstance()).meteor$setFramebuffer(mcFramebuffer);
mcFramebuffer = null;
super(MeteorRenderPipelines.POST_OUTLINE);
}

@Override
Expand All @@ -35,11 +18,6 @@ protected boolean shouldDraw() {
return storageESP.isShader();
}

@Override
public boolean shouldDraw(Entity entity) {
return true;
}

@Override
protected void setupPass(MeshRenderer renderer) {
renderer.uniform("OutlineData", OutlineUniforms.write(
Expand Down