Start renderer after screen activation
This commit is contained in:
+27
-15
@@ -15,7 +15,6 @@ import com.google.gson.JsonElement;
|
|||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
import net.fabricmc.api.ClientModInitializer;
|
import net.fabricmc.api.ClientModInitializer;
|
||||||
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.Screenshot;
|
import net.minecraft.client.Screenshot;
|
||||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||||
@@ -36,8 +35,6 @@ public final class RenderCatalogClient implements ClientModInitializer {
|
|||||||
private Path outputDir;
|
private Path outputDir;
|
||||||
private int currentJobIndex;
|
private int currentJobIndex;
|
||||||
private RenderScreen renderScreen;
|
private RenderScreen renderScreen;
|
||||||
private int renderScreenDelayTicks = 60;
|
|
||||||
private boolean renderStarted;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitializeClient() {
|
public void onInitializeClient() {
|
||||||
@@ -63,21 +60,36 @@ public final class RenderCatalogClient implements ClientModInitializer {
|
|||||||
Minecraft client = Minecraft.getInstance();
|
Minecraft client = Minecraft.getInstance();
|
||||||
renderScreen = new RenderScreen();
|
renderScreen = new RenderScreen();
|
||||||
|
|
||||||
ClientTickEvents.END_CLIENT_TICK.register(tickedClient -> {
|
client.execute(() -> {
|
||||||
if (renderScreenDelayTicks > 0) {
|
System.out.println("[renderer] opening render screen");
|
||||||
renderScreenDelayTicks--;
|
client.setScreenAndShow(renderScreen);
|
||||||
if (renderScreenDelayTicks == 0) {
|
});
|
||||||
System.out.println("[renderer] opening render screen");
|
|
||||||
tickedClient.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) {
|
System.err.println("[renderer] render screen never activated within " + SCREEN_ACTIVATION_TIMEOUT_MILLIS + "ms");
|
||||||
renderStarted = true;
|
Runtime.getRuntime().halt(1);
|
||||||
System.out.println("[renderer] starting render loop from client tick");
|
}, "renderer-startup-watchdog");
|
||||||
renderCurrentJob(tickedClient, renderScreen);
|
renderStarter.setDaemon(true);
|
||||||
}
|
renderStarter.start();
|
||||||
});
|
|
||||||
|
|
||||||
Thread activationWatchdog = new Thread(() -> {
|
Thread activationWatchdog = new Thread(() -> {
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user