From db3bce91ca74d3cbb36efb684aee4f2a302021b9 Mon Sep 17 00:00:00 2001 From: techno-sam <77073745+techno-sam@users.noreply.github.com> Date: Sat, 4 Apr 2026 19:14:19 +0200 Subject: [PATCH] Porting IV --- build.gradle | 19 ----- libs.versions.toml | 2 - .../mixin/client/FramebufferMixin.java | 6 +- .../mixin/client/WorldRendererMixin.java | 82 +++++++------------ 4 files changed, 31 insertions(+), 78 deletions(-) diff --git a/build.gradle b/build.gradle index bc64aa5..f690b18 100644 --- a/build.gradle +++ b/build.gradle @@ -36,19 +36,6 @@ repositories { includeGroup "com.terraformersmc" } } - exclusiveContent { // Fabric ASM - //"https://jitpack.io/" - forRepository { - //noinspection ForeignDelegate - maven { - name 'JitPack (Manningham Mills)' - url "https://jitpack.io/" - } - } - filter { - includeGroup "com.github.Chocohead" - } - } flatDir { dir("libs") } @@ -64,12 +51,6 @@ dependencies { modImplementation libs.fl modImplementation libs.fapi - // Fabric ASM (enum extension etc) - modImplementation(libs.manningham) { - exclude (group: "net.fabricmc.fabric-api") - } - include libs.manningham - if (!inCI) { modRuntimeOnly libs.mm } diff --git a/libs.versions.toml b/libs.versions.toml index d0acba2..69047b9 100644 --- a/libs.versions.toml +++ b/libs.versions.toml @@ -8,7 +8,6 @@ yarn = "1.21.1+build.3" fapi = "0.116.10+1.21.1" mixinextras = "0.5.0" mm = "11.0.4" -manningham = "v2.3" sodium = "mc1.21.1-0.6.13-fabric" axiom = "SZ7n7j9f" # these have to be manually extracted from the jar and put in the flatDir libs folder (only if the enable_axiom property is true) @@ -27,7 +26,6 @@ yarn = { group = "net.fabricmc", name = "yarn", version.ref = "yarn" } fapi = { group = "net.fabricmc.fabric-api", name = "fabric-api", version.ref = "fapi" } mixinextras = { group = "io.github.llamalad7", name = "mixinextras-fabric", version.ref = "mixinextras" } mm = { group = "com.terraformersmc", name = "modmenu", version.ref = "mm" } -manningham = { group = "com.github.Chocohead", name = "Fabric-ASM", version.ref = "manningham" } sodium = { group = "maven.modrinth", name = "sodium", version.ref = "sodium" } axiom = { group = "maven.modrinth", name = "axiom", version.ref = "axiom" } axiom-axiomclientapi = { group = "local", name = "axiomclientapi", version.ref = "axiom-axiomclientapi" } diff --git a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/FramebufferMixin.java b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/FramebufferMixin.java index 76a277e..07e34f8 100644 --- a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/FramebufferMixin.java +++ b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/FramebufferMixin.java @@ -24,7 +24,7 @@ public class FramebufferMixin implements Framebuffer_Duck { @Override public void crystalline_sky$copyColorFrom(Framebuffer framebuffer) { - RenderSystem.assertOnRenderThread(); + RenderSystem.assertOnRenderThreadOrInit(); if (this.colorAttachment == -1) { throw new IllegalStateException("Trying to copy color texture to a RenderTarget without a color texture"); } else if (framebuffer.getColorAttachment() == -1) { @@ -35,9 +35,9 @@ public class FramebufferMixin implements Framebuffer_Duck { GlStateManager._glBlitFrameBuffer( 0, 0, framebuffer.textureWidth, framebuffer.textureHeight, 0, 0, this.textureWidth, this.textureHeight, - 256, GlConst.GL_NEAREST + GlConst.GL_COLOR_BUFFER_BIT, GlConst.GL_NEAREST ); - GlStateManager._glBindFramebuffer(GlConst.GL_FRAMEBUFFER, 0); + GlStateManager._glBindFramebuffer(GlConst.GL_FRAMEBUFFER, framebuffer.fbo); } } } diff --git a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/WorldRendererMixin.java b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/WorldRendererMixin.java index 104475b..5a3ec35 100644 --- a/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/WorldRendererMixin.java +++ b/src/main/java/io/github/slimeistdev/crystalline_sky/mixin/client/WorldRendererMixin.java @@ -8,13 +8,15 @@ import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderLa import net.minecraft.client.MinecraftClient; import net.minecraft.client.gl.Framebuffer; import net.minecraft.client.gl.SimpleFramebuffer; +import net.minecraft.client.option.CloudRenderMode; import net.minecraft.client.render.Camera; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.LightmapTextureManager; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderTickCounter; import net.minecraft.client.render.WorldRenderer; -import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.math.Vec3d; import org.jetbrains.annotations.Nullable; import org.joml.Matrix4f; import org.spongepowered.asm.mixin.Final; @@ -25,33 +27,33 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(WorldRenderer.class) +@Mixin(value = WorldRenderer.class, remap = false) public abstract class WorldRendererMixin implements WorldRenderer_Duck { @Shadow @Final private MinecraftClient client; - @Shadow - private @Nullable ClientWorld world; - - @Shadow - private int ticks; - @Shadow protected abstract boolean hasBlindnessOrDarkness(Camera camera); @Shadow protected abstract void renderLayer(RenderLayer renderLayer, double x, double y, double z, Matrix4f matrix4f, Matrix4f positionMatrix); + @Shadow + private @Nullable Framebuffer cloudsFramebuffer; + + @Shadow + public abstract void renderClouds(MatrixStack matrices, Matrix4f matrix4f, Matrix4f matrix4f2, float tickDelta, double cameraX, double cameraY, double cameraZ); + @Unique @Nullable - private Framebuffer crystalline_sky$skyBuffer;// = new SimpleFramebuffer(0, 0, false, MinecraftClient.IS_SYSTEM_MAC); + private Framebuffer crystalline_sky$skyBuffer; @Override public Framebuffer crystalline_sky$getSkyFramebuffer() { if (crystalline_sky$skyBuffer == null) { var fb = client.getFramebuffer(); - crystalline_sky$skyBuffer = new SimpleFramebuffer(fb.textureWidth, fb.textureHeight, false, MinecraftClient.IS_SYSTEM_MAC); + crystalline_sky$skyBuffer = new SimpleFramebuffer(fb.textureWidth, fb.textureHeight, true, MinecraftClient.IS_SYSTEM_MAC); } return crystalline_sky$skyBuffer; } @@ -89,63 +91,35 @@ public abstract class WorldRendererMixin implements WorldRenderer_Duck { @Inject( method = "render", at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/render/WorldRenderer;renderSky(Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;FLnet/minecraft/client/render/Camera;ZLjava/lang/Runnable;)V", - shift = At.Shift.AFTER + value = "INVOKE_STRING", + target = "Lnet/minecraft/util/profiler/Profiler;swap(Ljava/lang/String;)V", + args = "ldc=terrain_setup" ) ) private void copyAfterSky(RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager, Matrix4f matrix4f, Matrix4f matrix4f2, CallbackInfo ci) { var skyBuffer = crystalline_sky$getSkyFramebuffer(); + skyBuffer.clear(MinecraftClient.IS_SYSTEM_MAC); ((Framebuffer_Duck) skyBuffer).crystalline_sky$copyColorFrom(client.getFramebuffer()); - // TODO: render clouds - } - -/* @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;renderMain(Lnet/minecraft/client/render/FrameGraphBuilder;Lnet/minecraft/client/render/Frustum;Lnet/minecraft/client/render/Camera;Lorg/joml/Matrix4f;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;ZZLnet/minecraft/client/render/RenderTickCounter;Lnet/minecraft/util/profiler/Profiler;)V")) - private void copyAfterSky2(ObjectAllocator allocator, RenderTickCounter tickCounter, boolean renderBlockOutline, - Camera camera, Matrix4f positionMatrix, Matrix4f projectionMatrix, GpuBufferSlice fog, - Vector4f fogColor, boolean shouldRenderSky, CallbackInfo ci, - @Local FrameGraphBuilder frameGraphBuilder) { - FramePass skyCopyPass = frameGraphBuilder.createPass("crystalline_sky:copy_sky_pass"); - - framebufferSet.mainFramebuffer = skyCopyPass.transfer(framebufferSet.mainFramebuffer); - - Handle skyFramebuffer = crystalline_sky$transferSkyBuffer(skyCopyPass); - - skyCopyPass.setRenderer(() -> { - ((Framebuffer_Duck) skyFramebuffer.get()).crystalline_sky$copyColorFrom(framebufferSet.mainFramebuffer.get()); - }); // render clouds - float f = tickCounter.getTickProgress(false); - CloudRenderMode cloudRenderMode = this.client.options.getCloudRenderModeValue(); if (cloudRenderMode != CloudRenderMode.OFF && !this.hasBlindnessOrDarkness(camera)) { - //noinspection DataFlowIssue - Optional optional = this.world.getDimension().cloudHeight(); - if (optional.isPresent()) { - float cloudPhase = this.ticks + f; - int color = this.world.getCloudsColor(f); + float f = tickCounter.getTickDelta(false); + Vec3d vec3d = camera.getPos(); + double cx = vec3d.getX(); + double cy = vec3d.getY(); + double cz = vec3d.getZ(); - // modified renderClouds function - { - FramePass framePass = frameGraphBuilder.createPass("crystallized clouds"); - crystalline_sky$transferSkyBuffer(framePass); - - framePass.setRenderer(() -> { - Handle backupCloudBuffer = this.framebufferSet.cloudsFramebuffer; - this.framebufferSet.cloudsFramebuffer = ((DefaultFramebufferSet_Duck) framebufferSet).crystalline_sky$getSkyFramebuffer(); - - this.cloudRenderer.renderClouds(color, cloudRenderMode, optional.get() + 0.33F, camera.getPos(), cloudPhase); - - ((DefaultFramebufferSet_Duck) framebufferSet).crystalline_sky$setSkyFramebuffer(framebufferSet.cloudsFramebuffer); - this.framebufferSet.cloudsFramebuffer = backupCloudBuffer; - }); - } - } + var cloudsFramebuffer0 = this.cloudsFramebuffer; + this.cloudsFramebuffer = skyBuffer; + cloudsFramebuffer.beginWrite(false); + this.renderClouds(new MatrixStack(), matrix4f, matrix4f2, f, cx, cy, cz); + client.getFramebuffer().beginWrite(false); + this.cloudsFramebuffer = cloudsFramebuffer0; } - }*/ + } // after solid, cutoutMipped, and cutout @WrapOperation(