diff options
author | Linnea Gräf <nea@nea.moe> | 2024-11-08 17:52:10 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-11-08 17:52:10 +0100 |
commit | f6f8fef556e74f24187ad2a6296f573024a378b3 (patch) | |
tree | e6d8873e15e88c23d42b8634dad7179fbd198eec | |
parent | 06534f9d09732ed29a6fa6bc48def5f7c2b0b865 (diff) | |
download | Firmament-f6f8fef556e74f24187ad2a6296f573024a378b3.tar.gz Firmament-f6f8fef556e74f24187ad2a6296f573024a378b3.tar.bz2 Firmament-f6f8fef556e74f24187ad2a6296f573024a378b3.zip |
Fix line renderer
-rw-r--r-- | src/main/java/moe/nea/firmament/mixins/MainWindowFirstLoadPatch.java | 31 | ||||
-rw-r--r-- | src/main/kotlin/events/DebugInstantiateEvent.kt | 9 | ||||
-rw-r--r-- | src/main/kotlin/util/render/FirmamentShaders.kt | 20 | ||||
-rw-r--r-- | src/main/resources/assets/firmament/shaders/core/rendertype_lines.fsh (renamed from src/main/resources/assets/firmament/shaders/code/rendertype_lines.fsh) | 0 | ||||
-rw-r--r-- | src/main/resources/assets/firmament/shaders/core/rendertype_lines.json (renamed from src/main/resources/assets/firmament/shaders/code/rendertype_lines.json) | 6 | ||||
-rw-r--r-- | src/main/resources/assets/firmament/shaders/core/rendertype_lines.vsh (renamed from src/main/resources/assets/firmament/shaders/code/rendertype_lines.vsh) | 0 | ||||
-rw-r--r-- | src/main/resources/fabric.mod.json | 3 |
7 files changed, 63 insertions, 6 deletions
diff --git a/src/main/java/moe/nea/firmament/mixins/MainWindowFirstLoadPatch.java b/src/main/java/moe/nea/firmament/mixins/MainWindowFirstLoadPatch.java new file mode 100644 index 0000000..0a90b35 --- /dev/null +++ b/src/main/java/moe/nea/firmament/mixins/MainWindowFirstLoadPatch.java @@ -0,0 +1,31 @@ +package moe.nea.firmament.mixins; + +import moe.nea.firmament.Firmament; +import moe.nea.firmament.events.DebugInstantiateEvent; +import net.minecraft.client.gui.LogoDrawer; +import net.minecraft.client.gui.screen.TitleScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(TitleScreen.class) +public class MainWindowFirstLoadPatch { + @Unique + private static boolean hasInited = false; + + @Inject(method = "<init>(ZLnet/minecraft/client/gui/LogoDrawer;)V", at = @At("RETURN")) + private void onCreate(boolean doBackgroundFade, LogoDrawer logoDrawer, CallbackInfo ci) { + if (!hasInited) { + try { + DebugInstantiateEvent.Companion.publish(new DebugInstantiateEvent()); + } catch (Throwable t) { + Firmament.INSTANCE.getLogger().error("Failed to instantiate debug instances", t); + System.exit(1); + throw t; + } + } + hasInited = true; + } +} diff --git a/src/main/kotlin/events/DebugInstantiateEvent.kt b/src/main/kotlin/events/DebugInstantiateEvent.kt new file mode 100644 index 0000000..3470a8c --- /dev/null +++ b/src/main/kotlin/events/DebugInstantiateEvent.kt @@ -0,0 +1,9 @@ +package moe.nea.firmament.events + +/** + * Called in a devenv after minecraft has been initialized. This event should be used to force instantiation of lazy + * variables (and similar late init) to cause any possible issues to materialize. + */ +class DebugInstantiateEvent : FirmamentEvent() { + companion object : FirmamentEventBus<DebugInstantiateEvent>() +} diff --git a/src/main/kotlin/util/render/FirmamentShaders.kt b/src/main/kotlin/util/render/FirmamentShaders.kt index 5147088..ba67dbb 100644 --- a/src/main/kotlin/util/render/FirmamentShaders.kt +++ b/src/main/kotlin/util/render/FirmamentShaders.kt @@ -3,14 +3,28 @@ package moe.nea.firmament.util.render import net.minecraft.client.gl.Defines import net.minecraft.client.gl.ShaderProgramKey import net.minecraft.client.render.RenderPhase +import net.minecraft.client.render.VertexFormat import net.minecraft.client.render.VertexFormats import moe.nea.firmament.Firmament +import moe.nea.firmament.annotations.Subscribe +import moe.nea.firmament.events.DebugInstantiateEvent +import moe.nea.firmament.util.MC object FirmamentShaders { + val shaders = mutableListOf<ShaderProgramKey>() + private fun shader(name: String, format: VertexFormat, defines: Defines): ShaderProgramKey { + val key = ShaderProgramKey(Firmament.identifier(name), format, defines) + shaders.add(key) + return key + } - val _LINES: ShaderProgramKey = - ShaderProgramKey(Firmament.identifier("rendertype_lines"), VertexFormats.LINES, Defines.EMPTY) - val LINES = RenderPhase.ShaderProgram(_LINES) + val LINES = RenderPhase.ShaderProgram(shader("core/rendertype_lines", VertexFormats.LINES, Defines.EMPTY)) + @Subscribe + fun debugLoad(event: DebugInstantiateEvent) { + shaders.forEach { + MC.instance.shaderLoader.getOrCreateProgram(it) + } + } } diff --git a/src/main/resources/assets/firmament/shaders/code/rendertype_lines.fsh b/src/main/resources/assets/firmament/shaders/core/rendertype_lines.fsh index 057f31f..057f31f 100644 --- a/src/main/resources/assets/firmament/shaders/code/rendertype_lines.fsh +++ b/src/main/resources/assets/firmament/shaders/core/rendertype_lines.fsh diff --git a/src/main/resources/assets/firmament/shaders/code/rendertype_lines.json b/src/main/resources/assets/firmament/shaders/core/rendertype_lines.json index f276639..e4537ca 100644 --- a/src/main/resources/assets/firmament/shaders/code/rendertype_lines.json +++ b/src/main/resources/assets/firmament/shaders/core/rendertype_lines.json @@ -1,6 +1,6 @@ { - "vertex": "firmament:rendertype_lines", - "fragment": "firmament:rendertype_lines", + "vertex": "firmament:core/rendertype_lines", + "fragment": "firmament:core/rendertype_lines", "samplers": [ ], "uniforms": [ @@ -8,7 +8,7 @@ { "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] }, { "name": "ColorModulator", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] }, { "name": "LineWidth", "type": "float", "count": 1, "values": [ 1.0 ] }, - { "name": "ScreenSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, + { "name": "ScreenSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }, { "name": "FogStart", "type": "float", "count": 1, "values": [ 0.0 ] }, { "name": "FogEnd", "type": "float", "count": 1, "values": [ 1.0 ] }, { "name": "FogColor", "type": "float", "count": 4, "values": [ 0.0, 0.0, 0.0, 0.0 ] }, diff --git a/src/main/resources/assets/firmament/shaders/code/rendertype_lines.vsh b/src/main/resources/assets/firmament/shaders/core/rendertype_lines.vsh index b2d0f99..b2d0f99 100644 --- a/src/main/resources/assets/firmament/shaders/code/rendertype_lines.vsh +++ b/src/main/resources/assets/firmament/shaders/core/rendertype_lines.vsh diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 9997018..9b00adf 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -33,6 +33,9 @@ "rei_client": [ "moe.nea.firmament.compat.rei.FirmamentReiPlugin" ], + "rei_common": [ + "moe.nea.firmament.compat.rei.FirmamentReiCommonPlugin" + ], "modmenu": [ "moe.nea.firmament.compat.modmenu.FirmamentModMenuPlugin" ], |