Skip to content

Commit 0c55e88

Browse files
committed
Moving from core shaders to Satin Managed Core Shaders (#25)
1 parent 2f4d6e8 commit 0c55e88

14 files changed

+40
-75
lines changed

build.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ dependencies {
9696

9797
modImplementation(include("de.guntram.mcmod:crowdin-translate:${project.crowdin_translate_version}"))
9898
modImplementation(include("teamreborn:energy:${project.tr_energy_version}"))
99+
modImplementation(include("io.github.ladysnake:satin:${project.satin_version}"))
99100
modImplementation(include("maven.modrinth:smart-recipes:${project.smartrecipes_version}"))
100101
modImplementation(include("me.shedaniel.cloth:cloth-config-fabric:${project.cloth_version}"), {
101102
exclude group: "net.fabricmc.fabric-api"
@@ -114,6 +115,7 @@ processResources {
114115
"minecraft": ">=${minecraftDependencyVersion}",
115116
"smart_recipes": project.smartrecipes_version,
116117
"cloth_config": project.cloth_version,
118+
"satin_api": project.satin_version,
117119
"crowdin_translate": project.crowdin_translate_version,
118120
"team_reborn_energy": project.tr_energy_version,
119121
"modmenu": ">=${project.modmenu_version}",

gradle.properties

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ archives_base_name=sync
1515
# Dependencies
1616
fabric_version=0.47.8+1.18.2
1717
tr_energy_version=2.2.0
18+
satin_version=1.7.2
1819
cloth_version=6.2.57
1920
modmenu_version=3.1.1
2021
trinkets_version=3.3.0

src/main/java/dev/kir/sync/Sync.java

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.kir.sync;
22

33
import de.guntram.mcmod.crowdintranslate.CrowdinTranslate;
4+
import dev.kir.sync.client.render.CustomGameRenderer;
45
import dev.kir.sync.networking.SyncPackets;
56
import dev.kir.sync.block.SyncBlocks;
67
import dev.kir.sync.block.entity.SyncBlockEntities;
@@ -41,6 +42,7 @@ public void onInitialize() {
4142
@Override
4243
@Environment(EnvType.CLIENT)
4344
public void onInitializeClient() {
45+
CustomGameRenderer.initClient();
4446
SyncRenderers.initClient();
4547
SyncPackets.initClient();
4648

Original file line numberDiff line numberDiff line change
@@ -1,35 +1,51 @@
11
package dev.kir.sync.client.render;
22

3+
import dev.kir.sync.Sync;
4+
import ladysnake.satin.api.managed.ManagedCoreShader;
5+
import ladysnake.satin.api.managed.ShaderEffectManager;
6+
import ladysnake.satin.api.managed.uniform.Uniform1f;
7+
import ladysnake.satin.api.managed.uniform.UniformMat4;
38
import net.fabricmc.api.EnvType;
49
import net.fabricmc.api.Environment;
510
import net.minecraft.client.MinecraftClient;
611
import net.minecraft.client.render.BufferBuilderStorage;
712
import net.minecraft.client.render.GameRenderer;
8-
import net.minecraft.client.render.Shader;
13+
import net.minecraft.client.render.VertexFormats;
914
import net.minecraft.resource.ResourceManager;
15+
import net.minecraft.util.math.Matrix4f;
1016

1117
@Environment(EnvType.CLIENT)
1218
public final class CustomGameRenderer extends GameRenderer {
13-
private static Shader renderTypeEntityTranslucentPartiallyTexturedShader = null;
14-
private static Shader renderTypeVoxelShader = null;
19+
private static final ManagedCoreShader RENDER_TYPE_ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED_SHADER;
20+
private static final Uniform1f RENDER_TYPE_ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED_SHADER_UNIFORM_CUTOUT_Y;
21+
private static final UniformMat4 RENDER_TYPE_ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED_SHADER_UNIFORM_MODEL_MAT;
22+
23+
private static final ManagedCoreShader RENDER_TYPE_VOXEL_SHADER;
1524

1625
private CustomGameRenderer(MinecraftClient client, ResourceManager resourceManager, BufferBuilderStorage buffers) {
1726
super(client, resourceManager, buffers);
1827
}
1928

20-
public static void setRenderTypeEntityTranslucentPartiallyTexturedShader(Shader shader) {
21-
renderTypeEntityTranslucentPartiallyTexturedShader = shader;
29+
public static void initRenderTypeEntityTranslucentPartiallyTexturedShader(float cutoutY, Matrix4f modelMatrix) {
30+
RENDER_TYPE_ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED_SHADER_UNIFORM_CUTOUT_Y.set(cutoutY);
31+
RENDER_TYPE_ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED_SHADER_UNIFORM_MODEL_MAT.set(modelMatrix);
2232
}
2333

24-
public static Shader getRenderTypeEntityTranslucentPartiallyTexturedShader() {
25-
return renderTypeEntityTranslucentPartiallyTexturedShader;
34+
public static ManagedCoreShader getRenderTypeEntityTranslucentPartiallyTexturedShader() {
35+
return RENDER_TYPE_ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED_SHADER;
2636
}
2737

28-
public static void setRenderTypeVoxelShader(Shader shader) {
29-
renderTypeVoxelShader = shader;
38+
public static ManagedCoreShader getRenderTypeVoxelShader() {
39+
return RENDER_TYPE_VOXEL_SHADER;
3040
}
3141

32-
public static Shader getRenderTypeVoxelShader() {
33-
return renderTypeVoxelShader;
42+
public static void initClient() { }
43+
44+
static {
45+
RENDER_TYPE_ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED_SHADER = ShaderEffectManager.getInstance().manageCoreShader(Sync.locate("rendertype_entity_translucent_partially_textured"), VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL);
46+
RENDER_TYPE_ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED_SHADER_UNIFORM_CUTOUT_Y = RENDER_TYPE_ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED_SHADER.findUniform1f("CutoutY");
47+
RENDER_TYPE_ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED_SHADER_UNIFORM_MODEL_MAT = RENDER_TYPE_ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED_SHADER.findUniformMat4("ModelMat");
48+
49+
RENDER_TYPE_VOXEL_SHADER = ShaderEffectManager.getInstance().manageCoreShader(Sync.locate("rendertype_voxel"), CustomVertexFormats.POSITION_COLOR_OVERLAY_LIGHT_NORMAL);
3450
}
3551
}

src/main/java/dev/kir/sync/client/render/CustomRenderLayer.java

+3-12
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,13 @@
55
import net.minecraft.client.render.RenderLayer;
66
import net.minecraft.client.render.RenderPhase;
77
import net.minecraft.client.render.VertexFormat;
8-
import net.minecraft.client.render.VertexFormats;
98
import net.minecraft.util.Identifier;
109
import net.minecraft.util.Util;
1110

1211
import java.util.function.BiFunction;
1312

1413
@Environment(EnvType.CLIENT)
1514
public final class CustomRenderLayer extends RenderLayer {
16-
private static final Shader ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED_SHADER;
17-
private static final Shader VOXEL_SHADER;
18-
1915
private static final RenderLayer VOXELS;
2016
private static final BiFunction<Identifier, Boolean, RenderLayer> ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED;
2117

@@ -32,17 +28,12 @@ public static RenderLayer getEntityTranslucentPartiallyTextured(Identifier textu
3228
}
3329

3430
public static RenderLayer getEntityTranslucentPartiallyTextured(Identifier textureId, float cutoutY, boolean affectsOutline) {
35-
net.minecraft.client.render.Shader shader = CustomGameRenderer.getRenderTypeEntityTranslucentPartiallyTexturedShader();
36-
shader.getUniformOrDefault("CutoutY").set(cutoutY);
37-
shader.getUniformOrDefault("ModelMat").set(MatrixStackStorage.getModelMatrixStack().peek().getPositionMatrix());
31+
CustomGameRenderer.initRenderTypeEntityTranslucentPartiallyTexturedShader(cutoutY, MatrixStackStorage.getModelMatrixStack().peek().getPositionMatrix());
3832
return ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED.apply(textureId, affectsOutline);
3933
}
4034

4135
static {
42-
ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED_SHADER = new Shader(CustomGameRenderer::getRenderTypeEntityTranslucentPartiallyTexturedShader);
43-
VOXEL_SHADER = new Shader(CustomGameRenderer::getRenderTypeVoxelShader);
44-
45-
VOXELS = of("voxels", CustomVertexFormats.POSITION_COLOR_OVERLAY_LIGHT_NORMAL, VertexFormat.DrawMode.QUADS, 256, false, false, RenderLayer.MultiPhaseParameters.builder().shader(VOXEL_SHADER).transparency(NO_TRANSPARENCY).cull(DISABLE_CULLING).lightmap(ENABLE_LIGHTMAP).overlay(ENABLE_OVERLAY_COLOR).build(true));
46-
ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED = Util.memoize((id, outline) -> RenderLayer.of("entity_translucent_partially_textured", VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, VertexFormat.DrawMode.QUADS, 256, true, true, RenderLayer.MultiPhaseParameters.builder().shader(ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED_SHADER).texture(new RenderPhase.Texture(id, false, false)).transparency(RenderLayer.TRANSLUCENT_TRANSPARENCY).cull(RenderLayer.DISABLE_CULLING).lightmap(RenderLayer.ENABLE_LIGHTMAP).overlay(RenderLayer.ENABLE_OVERLAY_COLOR).build(outline)));
36+
VOXELS = CustomGameRenderer.getRenderTypeVoxelShader().getRenderLayer(of("voxels", CustomVertexFormats.POSITION_COLOR_OVERLAY_LIGHT_NORMAL, VertexFormat.DrawMode.QUADS, 256, false, false, RenderLayer.MultiPhaseParameters.builder().shader(RenderPhase.SOLID_SHADER).transparency(NO_TRANSPARENCY).cull(DISABLE_CULLING).lightmap(ENABLE_LIGHTMAP).overlay(ENABLE_OVERLAY_COLOR).build(true)));
37+
ENTITY_TRANSLUCENT_PARTIALLY_TEXTURED = Util.memoize((id, outline) -> CustomGameRenderer.getRenderTypeEntityTranslucentPartiallyTexturedShader().getRenderLayer(RenderLayer.getEntityTranslucent(id, outline)));
4738
}
4839
}

src/main/java/dev/kir/sync/mixin/GameRendererMixin.java

-47
This file was deleted.

src/main/resources/assets/minecraft/shaders/core/rendertype_entity_translucent_partially_textured.json src/main/resources/assets/sync/shaders/core/rendertype_entity_translucent_partially_textured.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
"srcrgb": "srcalpha",
55
"dstrgb": "1-srcalpha"
66
},
7-
"vertex": "rendertype_entity_translucent_partially_textured",
8-
"fragment": "rendertype_entity_translucent_partially_textured",
7+
"vertex": "sync:rendertype_entity_translucent_partially_textured",
8+
"fragment": "sync:rendertype_entity_translucent_partially_textured",
99
"attributes": [
1010
"Position",
1111
"Color",

src/main/resources/assets/minecraft/shaders/core/rendertype_voxel.json src/main/resources/assets/sync/shaders/core/rendertype_voxel.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
"srcrgb": "srcalpha",
55
"dstrgb": "1-srcalpha"
66
},
7-
"vertex": "rendertype_voxel",
8-
"fragment": "rendertype_voxel",
7+
"vertex": "sync:rendertype_voxel",
8+
"fragment": "sync:rendertype_voxel",
99
"attributes": [
1010
"Position",
1111
"Color",

src/main/resources/fabric.mod.json

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"includes": {
5151
"smart-recipes": "${smart_recipes}",
5252
"cloth-config": "${cloth_config}",
53+
"satin-api": "${satin_api}",
5354
"crowdin-translate": "${crowdin_translate}",
5455
"team_reborn_energy": "${team_reborn_energy}"
5556
},

src/main/resources/sync.mixins.json

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
"ClientPlayerEntityMixin",
1414
"ClientPlayerInteractionManagerMixin",
1515
"EntityRenderDispatcherMixin",
16-
"GameRendererMixin",
1716
"MinecraftClientMixin",
1817
"PlayerEntityModelMixin",
1918
"WorldRendererMixin"

0 commit comments

Comments
 (0)