diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java index bfd3c78bba..a520989d80 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java @@ -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")) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Chams.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Chams.java index c6280df9cc..b1cf4e20de 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Chams.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Chams.java @@ -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; @@ -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() ); @@ -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 diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java index cefd1c7170..0c7e0509ef 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java @@ -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); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/StorageESP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/StorageESP.java index 5e5c46d886..8a8ecfe1c1 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/StorageESP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/StorageESP.java @@ -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; @@ -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(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/ChamsShader.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/ChamsShader.java index eb15779c8e..09c1f67612 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/ChamsShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/ChamsShader.java @@ -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; @@ -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); } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/EntityOutlineShader.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/EntityOutlineShader.java index 53433f4ff1..e6e5f96339 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/EntityOutlineShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/EntityOutlineShader.java @@ -10,7 +10,7 @@ public class EntityOutlineShader extends EntityShader { private static ESP esp; public EntityOutlineShader() { - init(MeteorRenderPipelines.POST_OUTLINE); + super(MeteorRenderPipelines.POST_OUTLINE); } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/EntityShader.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/EntityShader.java index 696cbb7050..b4d99737c4 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/EntityShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/EntityShader.java @@ -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); @@ -28,7 +27,7 @@ protected void postDraw() { ((IWorldRenderer) mc.worldRenderer).meteor$popEntityOutlineFramebuffer(); } - public void endRender() { - endRender(() -> vertexConsumerProvider.draw()); + public void submitVertices() { + submitVertices(vertexConsumerProvider::draw); } } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java index e59585af6a..14970409b1 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java @@ -7,11 +7,9 @@ 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; @@ -19,35 +17,37 @@ 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()) diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShaders.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShaders.java index ab013c6a67..63201cacf8 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShaders.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShaders.java @@ -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; @@ -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) { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/StorageOutlineShader.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/StorageOutlineShader.java index 018ce5eb27..84d13dbc8f 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/StorageOutlineShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/StorageOutlineShader.java @@ -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 @@ -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(