Update to 1.21.7

This commit is contained in:
Jonas Herzig
2025-06-14 11:00:56 +02:00
parent 926f6b6624
commit 85fb0847ee
30 changed files with 462 additions and 70 deletions

View File

@@ -24,8 +24,10 @@ import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
//#if MC>=12105
//#if MC<12106
//$$ import com.mojang.blaze3d.buffers.BufferType;
//$$ import com.mojang.blaze3d.buffers.BufferUsage;
//#endif
//$$ import com.mojang.blaze3d.buffers.GpuBuffer;
//$$ import com.mojang.blaze3d.systems.GpuDevice;
//#endif
@@ -121,9 +123,17 @@ public abstract class OpenGlFrameCapturer<F extends Frame, D extends CaptureData
ByteBuffer buffer = ByteBufferPool.allocate(getFrameWidth() * getFrameHeight() * 4);
//#if MC>=12105
//$$ GpuDevice device = RenderSystem.getDevice();
//#if MC>=12106
//$$ try (GpuBuffer gpuBuffer = device.createBuffer(null, GpuBuffer.USAGE_COPY_DST | GpuBuffer.USAGE_MAP_READ, getFrameWidth() * getFrameHeight() * 4)) {
//#else
//$$ try (GpuBuffer gpuBuffer = device.createBuffer(null, BufferType.PIXEL_PACK, BufferUsage.STATIC_READ, getFrameWidth() * getFrameHeight() * 4)) {
//#endif
//$$ device.createCommandEncoder().copyTextureToBuffer(frameBuffer().getColorAttachment(), gpuBuffer, 0, () -> {}, 0);
//$$ try (GpuBuffer.ReadView view = device.createCommandEncoder().readBuffer(gpuBuffer)) {
//#if MC>=12106
//$$ try (GpuBuffer.MappedView view = device.createCommandEncoder().mapBuffer(gpuBuffer, true, false)) {
//#else
//$$ try (GpuBuffer.ReadView view = device.createCommandEncoder().readBuffer(gpuBuffer)) {
//#endif
//$$ buffer.put(view.data());
//$$ }
//$$ }

View File

@@ -14,8 +14,10 @@ import java.util.HashMap;
import java.util.Map;
//#if MC>=12105
//#if MC<12106
//$$ import com.mojang.blaze3d.buffers.BufferType;
//$$ import com.mojang.blaze3d.buffers.BufferUsage;
//#endif
//$$ import com.mojang.blaze3d.buffers.GpuBuffer;
//$$ import com.mojang.blaze3d.systems.CommandEncoder;
//$$ import com.mojang.blaze3d.systems.GpuDevice;
@@ -38,7 +40,10 @@ public abstract class PboOpenGlFrameCapturer<F extends Frame, D extends Enum<D>
withDepth = renderInfo.getRenderSettings().isDepthMap();
data = type.getEnumConstants();
int bufferSize = framePixels * (4 /* bgra */ + (withDepth ? 4 /* float */ : 0)) * data.length;
//#if MC>=12105
//#if MC>=12106
//$$ pbo = RenderSystem.getDevice().createBuffer(null, GpuBuffer.USAGE_COPY_DST | GpuBuffer.USAGE_MAP_READ, bufferSize);
//$$ otherPBO = RenderSystem.getDevice().createBuffer(null, GpuBuffer.USAGE_COPY_DST | GpuBuffer.USAGE_MAP_READ, bufferSize);
//#elseif MC>=12105
//$$ pbo = RenderSystem.getDevice().createBuffer(null, BufferType.PIXEL_PACK, BufferUsage.STREAM_READ, bufferSize);
//$$ otherPBO = RenderSystem.getDevice().createBuffer(null, BufferType.PIXEL_PACK, BufferUsage.STREAM_READ, bufferSize);
//#else
@@ -97,7 +102,11 @@ public abstract class PboOpenGlFrameCapturer<F extends Frame, D extends Enum<D>
if (framesDone > 1) {
// Read pbo to memory
//#if MC>=12105
//#if MC>=12106
//$$ try (GpuBuffer.MappedView view = RenderSystem.getDevice().createCommandEncoder().mapBuffer(pbo, true, false)) {
//#else
//$$ try (GpuBuffer.ReadView view = RenderSystem.getDevice().createCommandEncoder().readBuffer(pbo)) {
//#endif
//$$ channels = new HashMap<>();
//$$ channels.put(Channel.BRGA, readFromPbo(view.data(), 4, true));
//$$ if (withDepth) {

View File

@@ -88,12 +88,21 @@ public class EntityRendererHandler extends EventRegistrations implements WorldRe
GameRendererAccessor gameRenderer = (GameRendererAccessor) mc.gameRenderer;
Screen orgScreen = mc.currentScreen;
boolean orgPauseOnLostFocus = mc.options.pauseOnLostFocus;
//#if MC>=12106
//$$ boolean orgRenderHand = mc.gameRenderer.isRenderingPanorama();
//#else
boolean orgRenderHand = gameRenderer.getRenderHand();
//#endif
try {
mc.currentScreen = null; // do not want to render the current screen (that'd just be the progress gui)
mc.options.pauseOnLostFocus = false; // do not want the pause menu to open if the window is unfocused
if (omnidirectional) {
gameRenderer.setRenderHand(false); // makes no sense, we wouldn't even know where to put it
// makes no sense, we wouldn't even know where to put it
//#if MC>=12106
//$$ mc.gameRenderer.setRenderingPanorama(false);
//#else
gameRenderer.setRenderHand(false);
//#endif
}
//#if MC>=12100
@@ -111,7 +120,11 @@ public class EntityRendererHandler extends EventRegistrations implements WorldRe
} finally {
mc.currentScreen = orgScreen;
mc.options.pauseOnLostFocus = orgPauseOnLostFocus;
//#if MC>=12106
//$$ mc.gameRenderer.setRenderingPanorama(orgRenderHand);
//#else
gameRenderer.setRenderHand(orgRenderHand);
//#endif
}
}

View File

@@ -4,10 +4,30 @@ import net.minecraft.client.render.GameRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
//#if MC>=12106
//$$ import net.minecraft.client.gui.render.GuiRenderer;
//$$ import net.minecraft.client.gui.render.state.GuiRenderState;
//$$ import net.minecraft.client.render.fog.FogRenderer;
//$$ import net.minecraft.client.util.Pool;
//#endif
@Mixin(GameRenderer.class)
public interface GameRendererAccessor {
//#if MC<12106
@Accessor
boolean getRenderHand();
@Accessor
void setRenderHand(boolean value);
//#endif
//#if MC>=12106
//$$ @Accessor
//$$ Pool getPool();
//$$ @Accessor
//$$ GuiRenderer getGuiRenderer();
//$$ @Accessor
//$$ GuiRenderState getGuiState();
//$$ @Accessor
//$$ FogRenderer getFogRenderer();
//#endif
}

View File

@@ -21,6 +21,12 @@ import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
//#if MC>=12106
//$$ import net.minecraft.client.render.chunk.AbstractChunkRenderData;
//$$ import org.spongepowered.asm.mixin.Mutable;
//$$ import java.util.concurrent.Executor;
//#endif
//#if MC>=12105
//$$ import org.spongepowered.asm.mixin.Mutable;
//$$ import java.util.AbstractQueue;
@@ -60,6 +66,13 @@ public abstract class Mixin_BlockOnChunkRebuilds implements ForceChunkLoadingHoo
//$$ runnable.run();
//$$ anything = true;
//$$ }
//#if MC>=12106
//$$ AbstractChunkRenderData entry;
//$$ while ((entry = this.renderQueue.poll()) != null) {
//$$ entry.close();
//$$ anything = true;
//$$ }
//#endif
//$$ return anything;
//$$ }
//#else
@@ -105,7 +118,42 @@ public abstract class Mixin_BlockOnChunkRebuilds implements ForceChunkLoadingHoo
}
}
//#if MC>=12105
//#if MC>=12106
//$$ @Shadow @Final @Mutable
//$$ Executor uploadExecutor;
//$$ @Shadow @Final @Mutable Queue<AbstractChunkRenderData> renderQueue;
//$$ @Inject(method = "<init>", at = @At("RETURN"))
//$$ private void notifyMainThreadOfNewUpload(CallbackInfo ci) {
//$$ Executor innerUploadExecutor = this.uploadExecutor;
//$$ this.uploadExecutor = runnable -> {
//$$ innerUploadExecutor.execute(runnable);
//$$ waitingForWorkLock.lock();
//$$ try {
//$$ newWork.signal();
//$$ } finally {
//$$ waitingForWorkLock.unlock();
//$$ }
//$$ };
//$$ Queue<AbstractChunkRenderData> innerRenderQueue = this.renderQueue;
//$$ this.renderQueue = new AbstractQueue<>() {
//$$ @Override
//$$ public boolean offer(AbstractChunkRenderData runnable) {
//$$ boolean result = innerRenderQueue.offer(runnable);
//$$ waitingForWorkLock.lock();
//$$ try {
//$$ newWork.signal();
//$$ } finally {
//$$ waitingForWorkLock.unlock();
//$$ }
//$$ return result;
//$$ }
//$$ @Override public AbstractChunkRenderData poll() { return innerRenderQueue.poll(); }
//$$ @Override public AbstractChunkRenderData peek() { return innerRenderQueue.peek(); }
//$$ @Override public int size() { return innerRenderQueue.size(); }
//$$ @Override public Iterator<AbstractChunkRenderData> iterator() { return innerRenderQueue.iterator(); }
//$$ };
//$$ }
//#elseif MC>=12105
//$$ @Inject(method = "<init>", at = @At("RETURN"))
//$$ private void notifyMainThreadOfNewUpload(CallbackInfo ci) {
//$$ Queue<Runnable> inner = this.uploadQueue;

View File

@@ -40,6 +40,14 @@ import net.minecraft.util.crash.CrashException;
import net.minecraft.sound.SoundCategory;
import org.lwjgl.glfw.GLFW;
//#if MC>=12106
//$$ import com.replaymod.render.mixin.GameRendererAccessor;
//$$ import net.minecraft.client.gui.render.GuiRenderer;
//$$ import net.minecraft.client.gui.render.state.GuiRenderState;
//$$ import net.minecraft.client.render.fog.FogRenderer;
//$$ import java.util.Collections;
//#endif
//#if MC>=12102
//$$ import com.mojang.blaze3d.systems.ProjectionType;
//#endif
@@ -523,7 +531,8 @@ public class VideoRenderer implements RenderInfo {
RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC);
//#endif
//#endif
//#if MC>=11700
//#if MC>=12106
//#elseif MC>=11700
//$$ RenderSystem.setProjectionMatrix(Matrix4f.projectionMatrix(
//$$ 0,
//$$ (float) (window.getFramebufferWidth() / window.getScaleFactor()),
@@ -591,7 +600,12 @@ public class VideoRenderer implements RenderInfo {
int mouseX = (int) mc.mouse.getX() * window.getScaledWidth() / Math.max(window.getWidth(), 1);
int mouseY = (int) mc.mouse.getY() * window.getScaledHeight() / Math.max(window.getHeight(), 1);
//#if MC>=12000
//#if MC>=12106
//$$ GameRendererAccessor gameRenderer = (GameRendererAccessor) mc.gameRenderer;
//$$ GuiRenderState guiRenderState = gameRenderer.getGuiState();
//$$ guiRenderState.clear();
//$$ DrawContext drawContext = new DrawContext(mc, guiRenderState);
//#elseif MC>=12000
//$$ DrawContext drawContext = new DrawContext(mc, mc.getBufferBuilders().getEntityVertexConsumers());
//#endif
@@ -611,15 +625,26 @@ public class VideoRenderer implements RenderInfo {
}
} else {
gui.toMinecraft().tick();
//#if MC>=12106
//$$ gui.toMinecraft().renderWithTooltip(
//#else
gui.toMinecraft().render(
//#endif
//#if MC>=12000
//$$ new DrawContext(mc, mc.getBufferBuilders().getEntityVertexConsumers()),
//$$ drawContext,
//#elseif MC>=11600
new MatrixStack(),
//#endif
mouseX, mouseY, 0);
}
//#if MC>=12000
//#if MC>=12106
//$$ var orgFog = RenderSystem.getShaderFog();
//$$ var orgProjBuf = RenderSystem.getProjectionMatrixBuffer();
//$$ var orgProjType = RenderSystem.getProjectionType();
//$$ gameRenderer.getGuiRenderer().render(gameRenderer.getFogRenderer().getFogBuffer(FogRenderer.FogType.NONE));
//$$ RenderSystem.setShaderFog(orgFog);
//$$ RenderSystem.setProjectionMatrix(orgProjBuf, orgProjType);
//#elseif MC>=12000
//$$ drawContext.draw();
//#endif
//#else