From 76aadc96a0ab457371930de0990eef3ad185cf80 Mon Sep 17 00:00:00 2001 From: Doc <65479309+DocilElm@users.noreply.github.com> Date: Tue, 24 Jun 2025 09:17:24 -0700 Subject: [PATCH 1/4] ModulesGui: fix crashing on opening gui --- .../ctjs/api/render/CTRenderLayers.kt | 14 ++++++++++++++ .../ctjs/api/render/CTRenderPipelines.kt | 18 ++++++++++++++++++ .../chattriggers/ctjs/api/render/Renderer3d.kt | 18 ++++++++++-------- 3 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderLayers.kt create mode 100644 src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderPipelines.kt diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderLayers.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderLayers.kt new file mode 100644 index 00000000..e6a29771 --- /dev/null +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderLayers.kt @@ -0,0 +1,14 @@ +package com.chattriggers.ctjs.api.render + +import net.minecraft.client.render.RenderLayer +import net.minecraft.client.util.BufferAllocator + +object CTRenderLayers { + val DEFAULT = RenderLayer.of( + "ctjs/default", + 1024, + CTRenderPipelines.DEFAULT, + RenderLayer.MultiPhaseParameters.builder() + .build(false) + ) +} \ No newline at end of file diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderPipelines.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderPipelines.kt new file mode 100644 index 00000000..df67a704 --- /dev/null +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderPipelines.kt @@ -0,0 +1,18 @@ +package com.chattriggers.ctjs.api.render + +import com.mojang.blaze3d.pipeline.BlendFunction +import com.mojang.blaze3d.pipeline.RenderPipeline +import com.mojang.blaze3d.vertex.VertexFormat +import net.minecraft.client.gl.RenderPipelines +import net.minecraft.client.render.VertexFormats + +object CTRenderPipelines { + val DEFAULT = RenderPipeline.builder( + RenderPipelines.POSITION_COLOR_SNIPPET + ) + .withLocation("ctjs/default_pipeline") + .withVertexFormat(VertexFormats.POSITION_COLOR, VertexFormat.DrawMode.QUADS) + .withBlend(BlendFunction.PANORAMA) + .withCull(false) + .build() +} \ No newline at end of file diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer3d.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer3d.kt index b0c7f112..18d70493 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer3d.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer3d.kt @@ -42,11 +42,13 @@ object Renderer3d { vertexFormat: Renderer.VertexFormat = Renderer.VertexFormat.POSITION, ) = apply { Renderer.pushMatrix() - .enableBlend() - .disableCull() - Renderer.tryBlendFuncSeparate(770, 771, 1, 0) +// .enableBlend() +// .disableCull() +// Renderer.tryBlendFuncSeparate(770, 771, 1, 0) - worldRenderer.beginWithDefaultShader(drawMode.toUC(), vertexFormat.toMC()) +// worldRenderer.beginWithDefaultShader(drawMode.toUC(), vertexFormat.toMC()) + // TODO: make an internal api for all the type of drawModes and vertexFormats + worldRenderer.beginRenderLayer(CTRenderLayers.DEFAULT) firstVertex = true began = true @@ -185,10 +187,10 @@ object Renderer3d { worldRenderer.endVertex() worldRenderer.drawDirect() - Renderer.colorize(1f, 1f, 1f, 1f) - .disableBlend() - .enableCull() - .popMatrix() +// Renderer.colorize(1f, 1f, 1f, 1f) +// .disableBlend() +// .enableCull() +// .popMatrix() } /** From 999b696a390088128f49a55a615d53ad2d6d2f11 Mon Sep 17 00:00:00 2001 From: Doc <65479309+DocilElm@users.noreply.github.com> Date: Wed, 25 Jun 2025 02:55:02 -0700 Subject: [PATCH 2/4] Config: fix gui crashing on open --- gradle/libs.versions.toml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5f2957ee..cb7f46b4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,9 +14,9 @@ textarea = "3.2.0" serialization = "1.5.1" koffee = "315bc11234" -universalcraft = "398" -elementa = "657" -vigilance = "299" +universalcraft = "412" +elementa = "708" +vigilance = "306" modmenu = "14.0.0-rc.2" devauth = "1.2.1" @@ -44,8 +44,8 @@ serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", v koffee = { module = "com.github.ChatTriggers:koffee", version.ref = "koffee" } universalcraft = { module = "gg.essential:universalcraft-1.21.5-fabric", version.ref = "universalcraft" } -elementa = { module = "gg.essential:elementa-1.18.1-fabric", version.ref = "elementa" } -vigilance = { module = "gg.essential:vigilance-1.18.1-fabric", version.ref = "vigilance" } +elementa = { module = "gg.essential:elementa", version.ref = "elementa" } +vigilance = { module = "gg.essential:vigilance", version.ref = "vigilance" } modmenu = { module = "com.terraformersmc:modmenu", version.ref = "modmenu" } devauth = { module = "me.djtheredstoner:DevAuth-fabric", version.ref = "devauth" } From 58284c04c57c383873fe34585e109fe6fb9e9f0f Mon Sep 17 00:00:00 2001 From: Doc <65479309+DocilElm@users.noreply.github.com> Date: Wed, 25 Jun 2025 13:28:48 -0700 Subject: [PATCH 3/4] add rendering backwards compat (hopefully) --- api/ctjs.api | 49 +++++++- .../ctjs/api/render/CTRenderLayers.kt | 14 --- .../ctjs/api/render/CTRenderPipelines.kt | 18 --- .../ctjs/api/render/LegacyPipelineBuilder.kt | 113 ++++++++++++++++++ .../chattriggers/ctjs/api/render/Renderer.kt | 56 ++++++--- .../ctjs/api/render/Renderer3d.kt | 40 ++----- 6 files changed, 210 insertions(+), 80 deletions(-) delete mode 100644 src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderLayers.kt delete mode 100644 src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderPipelines.kt create mode 100644 src/main/kotlin/com/chattriggers/ctjs/api/render/LegacyPipelineBuilder.kt diff --git a/api/ctjs.api b/api/ctjs.api index 8f3ef911..b4d9f10b 100644 --- a/api/ctjs.api +++ b/api/ctjs.api @@ -1604,6 +1604,21 @@ public final class com/chattriggers/ctjs/api/render/Image$Companion { public static synthetic fun fromUrl$default (Lcom/chattriggers/ctjs/api/render/Image$Companion;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/chattriggers/ctjs/api/render/Image; } +public final class com/chattriggers/ctjs/api/render/LegacyPipelineBuilder { + public static final field INSTANCE Lcom/chattriggers/ctjs/api/render/LegacyPipelineBuilder; + public final fun begin (Lcom/chattriggers/ctjs/api/render/Renderer$DrawMode;Lcom/chattriggers/ctjs/api/render/Renderer$VertexFormat;Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet;)Lcom/chattriggers/ctjs/api/render/LegacyPipelineBuilder; + public static synthetic fun begin$default (Lcom/chattriggers/ctjs/api/render/LegacyPipelineBuilder;Lcom/chattriggers/ctjs/api/render/Renderer$DrawMode;Lcom/chattriggers/ctjs/api/render/Renderer$VertexFormat;Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet;ILjava/lang/Object;)Lcom/chattriggers/ctjs/api/render/LegacyPipelineBuilder; + public final fun build ()Lcom/mojang/blaze3d/pipeline/RenderPipeline; + public final fun disableBlend ()Lcom/chattriggers/ctjs/api/render/LegacyPipelineBuilder; + public final fun disableCull ()Lcom/chattriggers/ctjs/api/render/LegacyPipelineBuilder; + public final fun disableDepth ()Lcom/chattriggers/ctjs/api/render/LegacyPipelineBuilder; + public final fun enableCull ()Lcom/chattriggers/ctjs/api/render/LegacyPipelineBuilder; + public final fun enableDepth ()Lcom/chattriggers/ctjs/api/render/LegacyPipelineBuilder; + public final fun enabledBlend ()Lcom/chattriggers/ctjs/api/render/LegacyPipelineBuilder; + public final fun layer ()Lnet/minecraft/client/render/RenderLayer; + public final fun state ()Ljava/lang/String; +} + public final class com/chattriggers/ctjs/api/render/Rectangle { public fun (JFFFF)V public final fun draw ()Lcom/chattriggers/ctjs/api/render/Rectangle; @@ -1660,7 +1675,8 @@ public final class com/chattriggers/ctjs/api/render/Renderer { public static final fun begin ()Lcom/chattriggers/ctjs/api/render/Renderer; public static final fun begin (Lcom/chattriggers/ctjs/api/render/Renderer$DrawMode;)Lcom/chattriggers/ctjs/api/render/Renderer; public static final fun begin (Lcom/chattriggers/ctjs/api/render/Renderer$DrawMode;Lcom/chattriggers/ctjs/api/render/Renderer$VertexFormat;)Lcom/chattriggers/ctjs/api/render/Renderer; - public static synthetic fun begin$default (Lcom/chattriggers/ctjs/api/render/Renderer$DrawMode;Lcom/chattriggers/ctjs/api/render/Renderer$VertexFormat;ILjava/lang/Object;)Lcom/chattriggers/ctjs/api/render/Renderer; + public static final fun begin (Lcom/chattriggers/ctjs/api/render/Renderer$DrawMode;Lcom/chattriggers/ctjs/api/render/Renderer$VertexFormat;Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet;)Lcom/chattriggers/ctjs/api/render/Renderer; + public static synthetic fun begin$default (Lcom/chattriggers/ctjs/api/render/Renderer$DrawMode;Lcom/chattriggers/ctjs/api/render/Renderer$VertexFormat;Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet;ILjava/lang/Object;)Lcom/chattriggers/ctjs/api/render/Renderer; public static final fun bindTexture (Lcom/chattriggers/ctjs/api/render/Image;)Lcom/chattriggers/ctjs/api/render/Renderer; public static final fun bindTexture (Lcom/chattriggers/ctjs/api/render/Image;I)Lcom/chattriggers/ctjs/api/render/Renderer; public static synthetic fun bindTexture$default (Lcom/chattriggers/ctjs/api/render/Image;IILjava/lang/Object;)Lcom/chattriggers/ctjs/api/render/Renderer; @@ -1765,6 +1781,34 @@ public final class com/chattriggers/ctjs/api/render/Renderer$DrawMode$Companion public final fun fromUC (Lgg/essential/universal/UGraphics$DrawMode;)Lcom/chattriggers/ctjs/api/render/Renderer$DrawMode; } +public final class com/chattriggers/ctjs/api/render/Renderer$RenderSnippet : java/lang/Enum { + public static final field ENTITY_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field FOG_NO_COLOR_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field FOG_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field GUI_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field MATRICES_COLOR_FOG_LIGHT_DIR_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field MATRICES_COLOR_FOG_OFFSET_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field MATRICES_COLOR_FOG_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field MATRICES_COLOR_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field MATRICES_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field PARTICLE_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field POSITION_COLOR_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field POSITION_TEX_COLOR_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field POST_EFFECT_PROCESSOR_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field RENDERTYPE_BEACON_BEAM_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field RENDERTYPE_CLOUDS_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field RENDERTYPE_END_PORTAL_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field RENDERTYPE_LINES_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field RENDERTYPE_OUTLINE_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field TERRAIN_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field TEXT_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static final field WEATHER_SNIPPET Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public final fun getMcSnippet ()Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; + public static fun valueOf (Ljava/lang/String;)Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; + public static fun values ()[Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet; +} + public final class com/chattriggers/ctjs/api/render/Renderer$ScreenWrapper { public fun ()V public final fun getHeight ()I @@ -1799,7 +1843,8 @@ public final class com/chattriggers/ctjs/api/render/Renderer3d { public static final fun begin ()Lcom/chattriggers/ctjs/api/render/Renderer3d; public static final fun begin (Lcom/chattriggers/ctjs/api/render/Renderer$DrawMode;)Lcom/chattriggers/ctjs/api/render/Renderer3d; public static final fun begin (Lcom/chattriggers/ctjs/api/render/Renderer$DrawMode;Lcom/chattriggers/ctjs/api/render/Renderer$VertexFormat;)Lcom/chattriggers/ctjs/api/render/Renderer3d; - public static synthetic fun begin$default (Lcom/chattriggers/ctjs/api/render/Renderer$DrawMode;Lcom/chattriggers/ctjs/api/render/Renderer$VertexFormat;ILjava/lang/Object;)Lcom/chattriggers/ctjs/api/render/Renderer3d; + public static final fun begin (Lcom/chattriggers/ctjs/api/render/Renderer$DrawMode;Lcom/chattriggers/ctjs/api/render/Renderer$VertexFormat;Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet;)Lcom/chattriggers/ctjs/api/render/Renderer3d; + public static synthetic fun begin$default (Lcom/chattriggers/ctjs/api/render/Renderer$DrawMode;Lcom/chattriggers/ctjs/api/render/Renderer$VertexFormat;Lcom/chattriggers/ctjs/api/render/Renderer$RenderSnippet;ILjava/lang/Object;)Lcom/chattriggers/ctjs/api/render/Renderer3d; public static final fun color (FFF)Lcom/chattriggers/ctjs/api/render/Renderer3d; public static final fun color (FFFF)Lcom/chattriggers/ctjs/api/render/Renderer3d; public static final fun color (III)Lcom/chattriggers/ctjs/api/render/Renderer3d; diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderLayers.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderLayers.kt deleted file mode 100644 index e6a29771..00000000 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderLayers.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.chattriggers.ctjs.api.render - -import net.minecraft.client.render.RenderLayer -import net.minecraft.client.util.BufferAllocator - -object CTRenderLayers { - val DEFAULT = RenderLayer.of( - "ctjs/default", - 1024, - CTRenderPipelines.DEFAULT, - RenderLayer.MultiPhaseParameters.builder() - .build(false) - ) -} \ No newline at end of file diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderPipelines.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderPipelines.kt deleted file mode 100644 index df67a704..00000000 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/CTRenderPipelines.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.chattriggers.ctjs.api.render - -import com.mojang.blaze3d.pipeline.BlendFunction -import com.mojang.blaze3d.pipeline.RenderPipeline -import com.mojang.blaze3d.vertex.VertexFormat -import net.minecraft.client.gl.RenderPipelines -import net.minecraft.client.render.VertexFormats - -object CTRenderPipelines { - val DEFAULT = RenderPipeline.builder( - RenderPipelines.POSITION_COLOR_SNIPPET - ) - .withLocation("ctjs/default_pipeline") - .withVertexFormat(VertexFormats.POSITION_COLOR, VertexFormat.DrawMode.QUADS) - .withBlend(BlendFunction.PANORAMA) - .withCull(false) - .build() -} \ No newline at end of file diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/LegacyPipelineBuilder.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/LegacyPipelineBuilder.kt new file mode 100644 index 00000000..4c07eb54 --- /dev/null +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/LegacyPipelineBuilder.kt @@ -0,0 +1,113 @@ +package com.chattriggers.ctjs.api.render + +import com.mojang.blaze3d.pipeline.BlendFunction +import com.mojang.blaze3d.pipeline.RenderPipeline +import com.mojang.blaze3d.platform.DepthTestFunction +import com.mojang.blaze3d.platform.DestFactor +import com.mojang.blaze3d.platform.SourceFactor +import net.minecraft.client.render.RenderLayer + +// if i don't reset the state what can go wrong, right ? +object LegacyPipelineBuilder { + private val layerList = mutableMapOf() + private val pipelineList = mutableMapOf() + private var cull: Boolean? = null + private var depth: Boolean? = null + private var blend: Boolean? = null + private var drawMode = Renderer.DrawMode.QUADS + private var vertexFormat = Renderer.VertexFormat.POSITION_COLOR + private var snippet = Renderer.RenderSnippet.POSITION_COLOR_SNIPPET + + fun begin( + drawMode: Renderer.DrawMode = Renderer.DrawMode.QUADS, + vertexFormat: Renderer.VertexFormat = Renderer.VertexFormat.POSITION_COLOR, + snippet: Renderer.RenderSnippet = Renderer.RenderSnippet.POSITION_COLOR_SNIPPET + ) = apply { + this.drawMode = drawMode + this.vertexFormat = vertexFormat + this.snippet = snippet + } + + fun enabledBlend() = apply { + blend = true + } + + fun disableBlend() = apply { + blend = false + } + + fun enableCull() = apply { + cull = true + } + + fun disableCull() = apply { + cull = false + } + + fun enableDepth() = apply { + depth = true + } + + fun disableDepth() = apply { + depth = false + } + + fun build(): RenderPipeline { + if (pipelineList.containsKey(state())) return pipelineList[state()]!! + + // TODO: withBlendFunc, withSample, withVertexShader, withFragShader, withShaderDefine + // TODO: possibly make the snippet builder take into consideration drawMode + // for instance, the drawMode = Lines _should_ make snippet be "RENDERTYPE_LINES_SNIPPET" not "POSITION_COLOR_SNIPPET" + val basePipeline = RenderPipeline.builder(snippet.mcSnippet) + .withLocation("ctjs/custom/pipeline${hashCode()}") + .withVertexFormat(vertexFormat.toMC(), drawMode.toUC().mcMode) + if (blend == true) basePipeline.withBlend(BlendFunction(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA, SourceFactor.ONE, DestFactor.ZERO)) +// else if (blend == false) basePipeline.withoutBlend() + + if (cull != null) basePipeline.withCull(cull!!) + + if (depth == true) { + basePipeline + .withDepthWrite(depth!!) + .withDepthTestFunction(DepthTestFunction.LEQUAL_DEPTH_TEST) + } + else if (depth == false) { + basePipeline + .withDepthWrite(depth!!) + .withDepthTestFunction(DepthTestFunction.NO_DEPTH_TEST) + } + + val pipeline = basePipeline.build() + pipelineList[state()] = pipeline + + return pipeline + } + + fun layer(): RenderLayer { + if (layerList.containsKey(state())) return layerList[state()]!! + + val layer = RenderLayer.of( + "ctjs/custom/layer${hashCode()}", + 1536, + build(), + RenderLayer.MultiPhaseParameters + .builder() + .build(false) + ) + layerList[state()] = layer + println("created layer: ${state()}") + + return layer + } + + fun state(): String { + return "LegacyPipelineBuilder[" + + "cull=$cull, " + + "depth=$depth, " + + "blend=$blend, " + + "drawMode=${drawMode.name}, " + + "vertexFormat=${vertexFormat.name}, " + + "snippet=${snippet.name}" + + "]" + } +} diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer.kt index e8a8cffd..f7b049b6 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer.kt @@ -1,17 +1,18 @@ package com.chattriggers.ctjs.api.render +import com.chattriggers.ctjs.MCVertexFormat import com.chattriggers.ctjs.api.client.Client import com.chattriggers.ctjs.api.client.Player import com.chattriggers.ctjs.api.entity.PlayerMP import com.chattriggers.ctjs.api.message.ChatLib import com.chattriggers.ctjs.api.vec.Vec3f -import com.chattriggers.ctjs.internal.mixins.EntityRenderDispatcherAccessor -import com.chattriggers.ctjs.MCVertexFormat import com.chattriggers.ctjs.engine.LogType import com.chattriggers.ctjs.engine.printToConsole +import com.chattriggers.ctjs.internal.mixins.EntityRenderDispatcherAccessor import com.chattriggers.ctjs.internal.utils.asMixin import com.chattriggers.ctjs.internal.utils.getOrDefault import com.chattriggers.ctjs.internal.utils.toRadians +import com.mojang.blaze3d.pipeline.RenderPipeline.Snippet import com.mojang.blaze3d.systems.RenderSystem import gg.essential.elementa.dsl.component1 import gg.essential.elementa.dsl.component2 @@ -22,15 +23,11 @@ import gg.essential.universal.UMatrixStack import gg.essential.universal.UMinecraft import net.minecraft.client.MinecraftClient import net.minecraft.client.font.TextRenderer +import net.minecraft.client.gl.RenderPipelines import net.minecraft.client.network.AbstractClientPlayerEntity import net.minecraft.client.render.DiffuseLighting -import net.minecraft.client.render.Tessellator -import net.minecraft.client.render.VertexConsumerProvider import net.minecraft.client.render.VertexFormats import net.minecraft.client.render.entity.EntityRendererFactory -import net.minecraft.client.render.entity.PlayerEntityRenderer -import net.minecraft.client.render.entity.state.LivingEntityRenderState -import net.minecraft.client.render.entity.state.PlayerEntityRenderState import net.minecraft.client.util.math.MatrixStack import org.joml.Matrix4f import org.joml.Quaternionf @@ -38,11 +35,7 @@ import org.mozilla.javascript.NativeObject import java.awt.Color import java.util.* import kotlin.collections.ArrayDeque -import kotlin.math.PI -import kotlin.math.atan -import kotlin.math.atan2 -import kotlin.math.cos -import kotlin.math.sin +import kotlin.math.* object Renderer { private val NEWLINE_REGEX = """\n|\r\n?""".toRegex() @@ -180,10 +173,10 @@ object Renderer { } @JvmStatic - fun disableCull() = apply { } + fun disableCull() = apply { LegacyPipelineBuilder.disableCull() } @JvmStatic - fun enableCull() = apply { } + fun enableCull() = apply { LegacyPipelineBuilder.enableCull() } @JvmStatic fun disableLighting() = apply { UGraphics.disableLighting() } @@ -192,10 +185,10 @@ object Renderer { fun enableLighting() = apply { UGraphics.enableLighting() } @JvmStatic - fun disableDepth() = apply { UGraphics.disableDepth() } + fun disableDepth() = apply { LegacyPipelineBuilder.disableDepth() } @JvmStatic - fun enableDepth() = apply { UGraphics.enableDepth() } + fun enableDepth() = apply { LegacyPipelineBuilder.enableDepth() } @JvmStatic fun depthFunc(func: Int) = apply { UGraphics.depthFunc(func) } @@ -204,10 +197,10 @@ object Renderer { fun depthMask(flag: Boolean) = apply { UGraphics.depthMask(flag) } @JvmStatic - fun disableBlend() = apply { UGraphics.disableBlend() } + fun disableBlend() = apply { LegacyPipelineBuilder.disableBlend() } @JvmStatic - fun enableBlend() = apply { UGraphics.enableBlend() } + fun enableBlend() = apply { LegacyPipelineBuilder.enabledBlend() } @JvmStatic fun blendFunc(func: Int) = apply { UGraphics.blendEquation(func) } @@ -317,8 +310,9 @@ object Renderer { fun begin( drawMode: DrawMode = Renderer.DrawMode.QUADS, vertexFormat: VertexFormat = Renderer.VertexFormat.POSITION, + snippet: Renderer.RenderSnippet = Renderer.RenderSnippet.POSITION_COLOR_SNIPPET ) = apply { - Renderer3d.begin(drawMode, vertexFormat) + Renderer3d.begin(drawMode, vertexFormat, snippet) } /** @@ -802,6 +796,30 @@ object Renderer { } } + enum class RenderSnippet(val mcSnippet: Snippet) { + MATRICES_SNIPPET(RenderPipelines.MATRICES_SNIPPET), + FOG_NO_COLOR_SNIPPET(RenderPipelines.FOG_NO_COLOR_SNIPPET), + FOG_SNIPPET(RenderPipelines.FOG_SNIPPET), + MATRICES_COLOR_SNIPPET(RenderPipelines.MATRICES_COLOR_SNIPPET), + MATRICES_COLOR_FOG_SNIPPET(RenderPipelines.MATRICES_COLOR_FOG_SNIPPET), + MATRICES_COLOR_FOG_OFFSET_SNIPPET(RenderPipelines.MATRICES_COLOR_FOG_OFFSET_SNIPPET), + MATRICES_COLOR_FOG_LIGHT_DIR_SNIPPET(RenderPipelines.MATRICES_COLOR_FOG_LIGHT_DIR_SNIPPET), + TERRAIN_SNIPPET(RenderPipelines.TERRAIN_SNIPPET), + ENTITY_SNIPPET(RenderPipelines.ENTITY_SNIPPET), + RENDERTYPE_BEACON_BEAM_SNIPPET(RenderPipelines.RENDERTYPE_BEACON_BEAM_SNIPPET), + TEXT_SNIPPET(RenderPipelines.TEXT_SNIPPET), + RENDERTYPE_END_PORTAL_SNIPPET(RenderPipelines.RENDERTYPE_END_PORTAL_SNIPPET), + RENDERTYPE_CLOUDS_SNIPPET(RenderPipelines.RENDERTYPE_CLOUDS_SNIPPET), + RENDERTYPE_LINES_SNIPPET(RenderPipelines.RENDERTYPE_LINES_SNIPPET), + POSITION_COLOR_SNIPPET(RenderPipelines.POSITION_COLOR_SNIPPET), + PARTICLE_SNIPPET(RenderPipelines.PARTICLE_SNIPPET), + WEATHER_SNIPPET(RenderPipelines.WEATHER_SNIPPET), + GUI_SNIPPET(RenderPipelines.GUI_SNIPPET), + POSITION_TEX_COLOR_SNIPPET(RenderPipelines.POSITION_TEX_COLOR_SNIPPET), + RENDERTYPE_OUTLINE_SNIPPET(RenderPipelines.RENDERTYPE_OUTLINE_SNIPPET), + POST_EFFECT_PROCESSOR_SNIPPET(RenderPipelines.POST_EFFECT_PROCESSOR_SNIPPET), + } + class ScreenWrapper { fun getWidth(): Int = UMinecraft.getMinecraft().window.scaledWidth diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer3d.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer3d.kt index 18d70493..8bdb04bf 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer3d.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/Renderer3d.kt @@ -10,13 +10,10 @@ import gg.essential.elementa.dsl.component2 import gg.essential.elementa.dsl.component3 import gg.essential.elementa.dsl.component4 import gg.essential.universal.UGraphics -import net.minecraft.client.MinecraftClient import net.minecraft.client.font.TextRenderer import net.minecraft.client.render.LightmapTextureManager import net.minecraft.client.render.Tessellator -import net.minecraft.client.render.VertexConsumerProvider import org.joml.Vector3f -import org.lwjgl.opengl.GL11 import org.mozilla.javascript.NativeObject import java.awt.Color @@ -40,15 +37,12 @@ object Renderer3d { fun begin( drawMode: Renderer.DrawMode = Renderer.DrawMode.QUADS, vertexFormat: Renderer.VertexFormat = Renderer.VertexFormat.POSITION, + snippet: Renderer.RenderSnippet = Renderer.RenderSnippet.POSITION_COLOR_SNIPPET ) = apply { Renderer.pushMatrix() -// .enableBlend() -// .disableCull() -// Renderer.tryBlendFuncSeparate(770, 771, 1, 0) - -// worldRenderer.beginWithDefaultShader(drawMode.toUC(), vertexFormat.toMC()) - // TODO: make an internal api for all the type of drawModes and vertexFormats - worldRenderer.beginRenderLayer(CTRenderLayers.DEFAULT) + .enableBlend() + .disableCull() + worldRenderer.beginRenderLayer(LegacyPipelineBuilder.begin(drawMode, vertexFormat, snippet).layer()) firstVertex = true began = true @@ -187,10 +181,10 @@ object Renderer3d { worldRenderer.endVertex() worldRenderer.drawDirect() -// Renderer.colorize(1f, 1f, 1f, 1f) -// .disableBlend() -// .enableCull() -// .popMatrix() + Renderer.colorize(1f, 1f, 1f, 1f) + .disableBlend() + .enableCull() + .popMatrix() } /** @@ -241,13 +235,7 @@ object Renderer3d { Renderer.pushMatrix() Renderer.translate(renderPos.x, renderPos.y, renderPos.z) Renderer.multiply(camera.rotation) - Renderer.scale(-lScale, -lScale, lScale) - - if (renderThroughBlocks) { - Renderer.depthMask(true) - Renderer.depthFunc(GL11.GL_ALWAYS) - //RenderSystem.clear(GL11.GL_DEPTH_BUFFER_BIT) - } + Renderer.scale(lScale, -lScale, lScale) val opacity = (Settings.toMC().getTextBackgroundOpacity(0.25f) * 255).toInt() shl 24 @@ -256,6 +244,7 @@ object Renderer3d { val vertexConsumers = Client.getMinecraft().bufferBuilders.entityVertexConsumers var yOffset = 0 + val textLayer = if (renderThroughBlocks) TextRenderer.TextLayerType.SEE_THROUGH else TextRenderer.TextLayerType.NORMAL for (line in lines) { val centerShift = if (centered) { @@ -274,7 +263,7 @@ object Renderer3d { false, matrix, vertexConsumers, - TextRenderer.TextLayerType.NORMAL, + textLayer, opacity, LightmapTextureManager.MAX_LIGHT_COORDINATE ) @@ -289,7 +278,7 @@ object Renderer3d { false, matrix, vertexConsumers, - TextRenderer.TextLayerType.NORMAL, + textLayer, 0, LightmapTextureManager.MAX_LIGHT_COORDINATE ) @@ -299,9 +288,6 @@ object Renderer3d { yOffset += fontRenderer.fontHeight + 1 } - if (renderThroughBlocks) { - Renderer.depthFunc(GL11.GL_LEQUAL) - } Renderer.popMatrix() } @@ -359,7 +345,7 @@ object Renderer3d { val normalVec = Vector3f(x2 - x1, y2 - y1, z2 - z1).normalize() - begin(Renderer.DrawMode.LINES, Renderer.VertexFormat.LINES) + begin(Renderer.DrawMode.LINES, Renderer.VertexFormat.LINES, Renderer.RenderSnippet.RENDERTYPE_LINES_SNIPPET) pos(x1, y1, z1).color(r, g, b, a).normal(normalVec.x, normalVec.y, normalVec.z) pos(x2, y2, z2).color(r, g, b, a).normal(normalVec.x, normalVec.y, normalVec.z) draw() From 1da3916d1f12d7c6411f5ac272a1f12977350941 Mon Sep 17 00:00:00 2001 From: Doc <65479309+DocilElm@users.noreply.github.com> Date: Wed, 25 Jun 2025 14:02:38 -0700 Subject: [PATCH 4/4] remove test log & comments --- .../chattriggers/ctjs/api/render/LegacyPipelineBuilder.kt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/kotlin/com/chattriggers/ctjs/api/render/LegacyPipelineBuilder.kt b/src/main/kotlin/com/chattriggers/ctjs/api/render/LegacyPipelineBuilder.kt index 4c07eb54..5004d16f 100644 --- a/src/main/kotlin/com/chattriggers/ctjs/api/render/LegacyPipelineBuilder.kt +++ b/src/main/kotlin/com/chattriggers/ctjs/api/render/LegacyPipelineBuilder.kt @@ -7,7 +7,6 @@ import com.mojang.blaze3d.platform.DestFactor import com.mojang.blaze3d.platform.SourceFactor import net.minecraft.client.render.RenderLayer -// if i don't reset the state what can go wrong, right ? object LegacyPipelineBuilder { private val layerList = mutableMapOf() private val pipelineList = mutableMapOf() @@ -55,14 +54,10 @@ object LegacyPipelineBuilder { fun build(): RenderPipeline { if (pipelineList.containsKey(state())) return pipelineList[state()]!! - // TODO: withBlendFunc, withSample, withVertexShader, withFragShader, withShaderDefine - // TODO: possibly make the snippet builder take into consideration drawMode - // for instance, the drawMode = Lines _should_ make snippet be "RENDERTYPE_LINES_SNIPPET" not "POSITION_COLOR_SNIPPET" val basePipeline = RenderPipeline.builder(snippet.mcSnippet) .withLocation("ctjs/custom/pipeline${hashCode()}") .withVertexFormat(vertexFormat.toMC(), drawMode.toUC().mcMode) if (blend == true) basePipeline.withBlend(BlendFunction(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA, SourceFactor.ONE, DestFactor.ZERO)) -// else if (blend == false) basePipeline.withoutBlend() if (cull != null) basePipeline.withCull(cull!!) @@ -95,7 +90,6 @@ object LegacyPipelineBuilder { .build(false) ) layerList[state()] = layer - println("created layer: ${state()}") return layer }