aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-11-08 17:52:10 +0100
committerLinnea Gräf <nea@nea.moe>2024-11-08 17:52:10 +0100
commitf6f8fef556e74f24187ad2a6296f573024a378b3 (patch)
treee6d8873e15e88c23d42b8634dad7179fbd198eec
parent06534f9d09732ed29a6fa6bc48def5f7c2b0b865 (diff)
downloadFirmament-f6f8fef556e74f24187ad2a6296f573024a378b3.tar.gz
Firmament-f6f8fef556e74f24187ad2a6296f573024a378b3.tar.bz2
Firmament-f6f8fef556e74f24187ad2a6296f573024a378b3.zip
Fix line renderer
-rw-r--r--src/main/java/moe/nea/firmament/mixins/MainWindowFirstLoadPatch.java31
-rw-r--r--src/main/kotlin/events/DebugInstantiateEvent.kt9
-rw-r--r--src/main/kotlin/util/render/FirmamentShaders.kt20
-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.json3
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"
],