Porting IV

This commit is contained in:
techno-sam
2026-04-04 19:14:19 +02:00
parent e6c2434619
commit db3bce91ca
4 changed files with 31 additions and 78 deletions
-19
View File
@@ -36,19 +36,6 @@ repositories {
includeGroup "com.terraformersmc" 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 { flatDir {
dir("libs") dir("libs")
} }
@@ -64,12 +51,6 @@ dependencies {
modImplementation libs.fl modImplementation libs.fl
modImplementation libs.fapi modImplementation libs.fapi
// Fabric ASM (enum extension etc)
modImplementation(libs.manningham) {
exclude (group: "net.fabricmc.fabric-api")
}
include libs.manningham
if (!inCI) { if (!inCI) {
modRuntimeOnly libs.mm modRuntimeOnly libs.mm
} }
-2
View File
@@ -8,7 +8,6 @@ yarn = "1.21.1+build.3"
fapi = "0.116.10+1.21.1" fapi = "0.116.10+1.21.1"
mixinextras = "0.5.0" mixinextras = "0.5.0"
mm = "11.0.4" mm = "11.0.4"
manningham = "v2.3"
sodium = "mc1.21.1-0.6.13-fabric" sodium = "mc1.21.1-0.6.13-fabric"
axiom = "SZ7n7j9f" 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) # 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" } fapi = { group = "net.fabricmc.fabric-api", name = "fabric-api", version.ref = "fapi" }
mixinextras = { group = "io.github.llamalad7", name = "mixinextras-fabric", version.ref = "mixinextras" } mixinextras = { group = "io.github.llamalad7", name = "mixinextras-fabric", version.ref = "mixinextras" }
mm = { group = "com.terraformersmc", name = "modmenu", version.ref = "mm" } 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" } sodium = { group = "maven.modrinth", name = "sodium", version.ref = "sodium" }
axiom = { group = "maven.modrinth", name = "axiom", version.ref = "axiom" } axiom = { group = "maven.modrinth", name = "axiom", version.ref = "axiom" }
axiom-axiomclientapi = { group = "local", name = "axiomclientapi", version.ref = "axiom-axiomclientapi" } axiom-axiomclientapi = { group = "local", name = "axiomclientapi", version.ref = "axiom-axiomclientapi" }
@@ -24,7 +24,7 @@ public class FramebufferMixin implements Framebuffer_Duck {
@Override @Override
public void crystalline_sky$copyColorFrom(Framebuffer framebuffer) { public void crystalline_sky$copyColorFrom(Framebuffer framebuffer) {
RenderSystem.assertOnRenderThread(); RenderSystem.assertOnRenderThreadOrInit();
if (this.colorAttachment == -1) { if (this.colorAttachment == -1) {
throw new IllegalStateException("Trying to copy color texture to a RenderTarget without a color texture"); throw new IllegalStateException("Trying to copy color texture to a RenderTarget without a color texture");
} else if (framebuffer.getColorAttachment() == -1) { } else if (framebuffer.getColorAttachment() == -1) {
@@ -35,9 +35,9 @@ public class FramebufferMixin implements Framebuffer_Duck {
GlStateManager._glBlitFrameBuffer( GlStateManager._glBlitFrameBuffer(
0, 0, framebuffer.textureWidth, framebuffer.textureHeight, 0, 0, framebuffer.textureWidth, framebuffer.textureHeight,
0, 0, this.textureWidth, this.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);
} }
} }
} }
@@ -8,13 +8,15 @@ import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineRenderLa
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gl.Framebuffer; import net.minecraft.client.gl.Framebuffer;
import net.minecraft.client.gl.SimpleFramebuffer; import net.minecraft.client.gl.SimpleFramebuffer;
import net.minecraft.client.option.CloudRenderMode;
import net.minecraft.client.render.Camera; import net.minecraft.client.render.Camera;
import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.render.LightmapTextureManager; import net.minecraft.client.render.LightmapTextureManager;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.RenderTickCounter; import net.minecraft.client.render.RenderTickCounter;
import net.minecraft.client.render.WorldRenderer; 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.jetbrains.annotations.Nullable;
import org.joml.Matrix4f; import org.joml.Matrix4f;
import org.spongepowered.asm.mixin.Final; 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.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(WorldRenderer.class) @Mixin(value = WorldRenderer.class, remap = false)
public abstract class WorldRendererMixin implements WorldRenderer_Duck { public abstract class WorldRendererMixin implements WorldRenderer_Duck {
@Shadow @Shadow
@Final @Final
private MinecraftClient client; private MinecraftClient client;
@Shadow
private @Nullable ClientWorld world;
@Shadow
private int ticks;
@Shadow @Shadow
protected abstract boolean hasBlindnessOrDarkness(Camera camera); protected abstract boolean hasBlindnessOrDarkness(Camera camera);
@Shadow @Shadow
protected abstract void renderLayer(RenderLayer renderLayer, double x, double y, double z, Matrix4f matrix4f, Matrix4f positionMatrix); 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 @Unique
@Nullable @Nullable
private Framebuffer crystalline_sky$skyBuffer;// = new SimpleFramebuffer(0, 0, false, MinecraftClient.IS_SYSTEM_MAC); private Framebuffer crystalline_sky$skyBuffer;
@Override @Override
public Framebuffer crystalline_sky$getSkyFramebuffer() { public Framebuffer crystalline_sky$getSkyFramebuffer() {
if (crystalline_sky$skyBuffer == null) { if (crystalline_sky$skyBuffer == null) {
var fb = client.getFramebuffer(); 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; return crystalline_sky$skyBuffer;
} }
@@ -89,63 +91,35 @@ public abstract class WorldRendererMixin implements WorldRenderer_Duck {
@Inject( @Inject(
method = "render", method = "render",
at = @At( at = @At(
value = "INVOKE", value = "INVOKE_STRING",
target = "Lnet/minecraft/client/render/WorldRenderer;renderSky(Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;FLnet/minecraft/client/render/Camera;ZLjava/lang/Runnable;)V", target = "Lnet/minecraft/util/profiler/Profiler;swap(Ljava/lang/String;)V",
shift = At.Shift.AFTER args = "ldc=terrain_setup"
) )
) )
private void copyAfterSky(RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera, private void copyAfterSky(RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera,
GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager, GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager,
Matrix4f matrix4f, Matrix4f matrix4f2, CallbackInfo ci) { Matrix4f matrix4f, Matrix4f matrix4f2, CallbackInfo ci) {
var skyBuffer = crystalline_sky$getSkyFramebuffer(); var skyBuffer = crystalline_sky$getSkyFramebuffer();
skyBuffer.clear(MinecraftClient.IS_SYSTEM_MAC);
((Framebuffer_Duck) skyBuffer).crystalline_sky$copyColorFrom(client.getFramebuffer()); ((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<Framebuffer> skyFramebuffer = crystalline_sky$transferSkyBuffer(skyCopyPass);
skyCopyPass.setRenderer(() -> {
((Framebuffer_Duck) skyFramebuffer.get()).crystalline_sky$copyColorFrom(framebufferSet.mainFramebuffer.get());
});
// render clouds // render clouds
float f = tickCounter.getTickProgress(false);
CloudRenderMode cloudRenderMode = this.client.options.getCloudRenderModeValue(); CloudRenderMode cloudRenderMode = this.client.options.getCloudRenderModeValue();
if (cloudRenderMode != CloudRenderMode.OFF && !this.hasBlindnessOrDarkness(camera)) { if (cloudRenderMode != CloudRenderMode.OFF && !this.hasBlindnessOrDarkness(camera)) {
//noinspection DataFlowIssue float f = tickCounter.getTickDelta(false);
Optional<Integer> optional = this.world.getDimension().cloudHeight(); Vec3d vec3d = camera.getPos();
if (optional.isPresent()) { double cx = vec3d.getX();
float cloudPhase = this.ticks + f; double cy = vec3d.getY();
int color = this.world.getCloudsColor(f); double cz = vec3d.getZ();
// modified renderClouds function var cloudsFramebuffer0 = this.cloudsFramebuffer;
{ this.cloudsFramebuffer = skyBuffer;
FramePass framePass = frameGraphBuilder.createPass("crystallized clouds"); cloudsFramebuffer.beginWrite(false);
crystalline_sky$transferSkyBuffer(framePass); this.renderClouds(new MatrixStack(), matrix4f, matrix4f2, f, cx, cy, cz);
client.getFramebuffer().beginWrite(false);
framePass.setRenderer(() -> { this.cloudsFramebuffer = cloudsFramebuffer0;
Handle<Framebuffer> 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;
});
} }
} }
}
}*/
// after solid, cutoutMipped, and cutout // after solid, cutoutMipped, and cutout
@WrapOperation( @WrapOperation(