From ee7848f96aef4b532fbbb70d9f9a585f24a87430 Mon Sep 17 00:00:00 2001 From: Mark Rapson Date: Tue, 11 Aug 2026 00:22:51 +0100 Subject: [PATCH] Start renderer after screen activation --- .../renameable/RenderCatalogClient.java | 42 ++++++++++++------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/build/client-renderer/src/client/java/dev/github/copilot/renameable/RenderCatalogClient.java b/build/client-renderer/src/client/java/dev/github/copilot/renameable/RenderCatalogClient.java index 57c3f84..26c3f3b 100644 --- a/build/client-renderer/src/client/java/dev/github/copilot/renameable/RenderCatalogClient.java +++ b/build/client-renderer/src/client/java/dev/github/copilot/renameable/RenderCatalogClient.java @@ -15,7 +15,6 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.minecraft.client.Minecraft; import net.minecraft.client.Screenshot; import net.minecraft.client.gui.GuiGraphicsExtractor; @@ -36,8 +35,6 @@ public final class RenderCatalogClient implements ClientModInitializer { private Path outputDir; private int currentJobIndex; private RenderScreen renderScreen; - private int renderScreenDelayTicks = 60; - private boolean renderStarted; @Override public void onInitializeClient() { @@ -63,21 +60,36 @@ public final class RenderCatalogClient implements ClientModInitializer { Minecraft client = Minecraft.getInstance(); renderScreen = new RenderScreen(); - ClientTickEvents.END_CLIENT_TICK.register(tickedClient -> { - if (renderScreenDelayTicks > 0) { - renderScreenDelayTicks--; - if (renderScreenDelayTicks == 0) { - System.out.println("[renderer] opening render screen"); - tickedClient.setScreenAndShow(renderScreen); + client.execute(() -> { + System.out.println("[renderer] opening render screen"); + client.setScreenAndShow(renderScreen); + }); + + Thread renderStarter = new Thread(() -> { + long deadline = System.currentTimeMillis() + SCREEN_ACTIVATION_TIMEOUT_MILLIS; + + while (System.currentTimeMillis() < deadline) { + if (renderScreen.activated) { + client.execute(() -> { + System.out.println("[renderer] starting render loop after screen activation"); + renderCurrentJob(client, renderScreen); + }); + return; + } + + try { + Thread.sleep(100L); + } catch (InterruptedException exception) { + Thread.currentThread().interrupt(); + return; } } - if (!renderStarted && tickedClient.screen == renderScreen) { - renderStarted = true; - System.out.println("[renderer] starting render loop from client tick"); - renderCurrentJob(tickedClient, renderScreen); - } - }); + System.err.println("[renderer] render screen never activated within " + SCREEN_ACTIVATION_TIMEOUT_MILLIS + "ms"); + Runtime.getRuntime().halt(1); + }, "renderer-startup-watchdog"); + renderStarter.setDaemon(true); + renderStarter.start(); Thread activationWatchdog = new Thread(() -> { try {