From 8d766a8cc8c5c0f5dac1524f49c32a36ac37d2d2 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 20 Aug 2023 20:35:20 -0400 Subject: [PATCH] Avoid calling createCapabilities many times, mark mixin as client-only --- .../feature/registry_event_progress/GameDataMixin.java | 2 ++ .../embeddedt/modernfix/forge/util/AsyncLoadingScreen.java | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java index a6a86c13..5daba9fb 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java @@ -8,12 +8,14 @@ import net.minecraftforge.fml.StartupMessageManager; import net.minecraftforge.fml.event.IModBusEvent; import net.minecraftforge.registries.GameData; import net.minecraftforge.registries.RegisterEvent; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.forge.util.AsyncLoadingScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(value = GameData.class, remap = false) +@ClientOnlyMixin public class GameDataMixin { @Redirect(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/ModLoader;postEventWrapContainerInModOrder(Lnet/minecraftforge/eventbus/api/Event;)V")) private static void swapThreadAndPost(ModLoader loader, T event) { diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java b/forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java index bfa8f62d..3cb765b8 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java @@ -3,6 +3,7 @@ package org.embeddedt.modernfix.forge.util; import net.minecraftforge.fml.loading.ImmediateWindowHandler; import org.lwjgl.glfw.GLFW; import org.lwjgl.opengl.GL; +import org.lwjgl.opengl.GLCapabilities; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -14,9 +15,13 @@ public class AsyncLoadingScreen extends Thread implements AutoCloseable { private static int splashThreadNum = 1; + private static GLCapabilities caps; + public AsyncLoadingScreen() { this.setName("ModernFix splash thread " + splashThreadNum++); this.theWindow = GLFW.glfwGetCurrentContext(); + if(caps == null) + caps = GL.createCapabilities(); if(this.theWindow == 0) throw new IllegalStateException("No context found but async loading screen was requested"); this.keepRunning = new AtomicBoolean(true); @@ -32,7 +37,7 @@ public class AsyncLoadingScreen extends Thread implements AutoCloseable { @Override public void run() { GLFW.glfwMakeContextCurrent(theWindow); - GL.createCapabilities(); // seems to be needed, otherwise we get a "function not valid for context" error + GL.setCapabilities(caps); while(keepRunning.get()) { LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(50)); ImmediateWindowHandler.renderTick();