diff options
author | Linnea Gräf <nea@nea.moe> | 2024-09-07 14:44:43 +0200 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-09-07 14:44:43 +0200 |
commit | 26461deda4dc8695dacedefe50d976eb5e3d7714 (patch) | |
tree | c079a8c2330df05037f944d6d7068b9ea39ebc24 /src/main/kotlin | |
parent | 9cdc30e024fac9fe04eeeccb15dfd46f4aa648cb (diff) | |
download | firmament-26461deda4dc8695dacedefe50d976eb5e3d7714.tar.gz firmament-26461deda4dc8695dacedefe50d976eb5e3d7714.tar.bz2 firmament-26461deda4dc8695dacedefe50d976eb5e3d7714.zip |
Add shader loading functionality
[no changelog]
Diffstat (limited to 'src/main/kotlin')
-rw-r--r-- | src/main/kotlin/events/RegisterCustomShadersEvent.kt | 24 | ||||
-rw-r--r-- | src/main/kotlin/util/render/FirmamentShaders.kt | 23 | ||||
-rw-r--r-- | src/main/kotlin/util/render/RenderInWorldContext.kt | 4 |
3 files changed, 49 insertions, 2 deletions
diff --git a/src/main/kotlin/events/RegisterCustomShadersEvent.kt b/src/main/kotlin/events/RegisterCustomShadersEvent.kt new file mode 100644 index 0000000..2f6d1f8 --- /dev/null +++ b/src/main/kotlin/events/RegisterCustomShadersEvent.kt @@ -0,0 +1,24 @@ +package moe.nea.firmament.events + +import com.mojang.datafixers.util.Pair +import java.util.function.Consumer +import net.minecraft.client.gl.ShaderProgram +import net.minecraft.client.render.VertexFormat +import net.minecraft.resource.ResourceFactory +import moe.nea.firmament.Firmament + +data class RegisterCustomShadersEvent( + val list: MutableList<Pair<ShaderProgram, Consumer<ShaderProgram>>>, + val resourceFactory: ResourceFactory, +) : FirmamentEvent() { + companion object : FirmamentEventBus<RegisterCustomShadersEvent>() + + fun register(name: String, vertexFormat: VertexFormat, saver: Consumer<ShaderProgram>) { + require(name.startsWith("firmament_")) + try { + list.add(Pair.of(ShaderProgram(resourceFactory, name, vertexFormat), saver)) + } catch (ex: Exception) { + Firmament.logger.fatal("Could not load firmament shader $name", ex) + } + } +} diff --git a/src/main/kotlin/util/render/FirmamentShaders.kt b/src/main/kotlin/util/render/FirmamentShaders.kt new file mode 100644 index 0000000..1094bc2 --- /dev/null +++ b/src/main/kotlin/util/render/FirmamentShaders.kt @@ -0,0 +1,23 @@ +package moe.nea.firmament.util.render + +import net.minecraft.client.gl.ShaderProgram +import net.minecraft.client.render.RenderPhase +import net.minecraft.client.render.VertexFormats +import moe.nea.firmament.annotations.Subscribe +import moe.nea.firmament.events.RegisterCustomShadersEvent + +object FirmamentShaders { + + + private lateinit var _LINES: ShaderProgram + val LINES = RenderPhase.ShaderProgram({ _LINES }) + + @Subscribe + fun registerCustomShaders(event: RegisterCustomShadersEvent) { + event.register( + "firmament_rendertype_lines", + VertexFormats.LINES, + { _LINES = it }, + ) + } +} diff --git a/src/main/kotlin/util/render/RenderInWorldContext.kt b/src/main/kotlin/util/render/RenderInWorldContext.kt index 775e8f3..75f2fad 100644 --- a/src/main/kotlin/util/render/RenderInWorldContext.kt +++ b/src/main/kotlin/util/render/RenderInWorldContext.kt @@ -56,7 +56,7 @@ class RenderInWorldContext private constructor( false, false, // do we need translucent? i dont think so RenderLayer.MultiPhaseParameters.builder() .depthTest(RenderPhase.ALWAYS_DEPTH_TEST) - .program(RenderPhase.LINES_PROGRAM) + .program(FirmamentShaders.LINES) .build(false) ) } @@ -172,7 +172,7 @@ class RenderInWorldContext private constructor( points.zipWithNext().forEach { (a, b) -> val normal = Vector3f(b.x.toFloat(), b.y.toFloat(), b.z.toFloat()) .sub(a.x.toFloat(), a.y.toFloat(), a.z.toFloat()) - .normalize() +// .normalize() val lastNormal0 = lastNormal ?: normal lastNormal = normal buffer.vertex(matrix.positionMatrix, a.x.toFloat(), a.y.toFloat(), a.z.toFloat()) |