From 76a4b35ce6b52ec6b3640f3dc1784b39a58f1d84 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sat, 10 Aug 2024 12:54:15 -0700 Subject: [PATCH] Assimilate Backend Config - Merge flywheel-backend config into an object within the base flywheel config - On forge, push a path in the toml - On fabric, serialize a nested json object - Still expose the BackendConfig via FlwBackendXplat, but have the impl set a static field in the xplat impl - Revert debug shulker box changes in previous commit --- .../flywheel/backend/BackendConfig.java | 3 - .../flywheel/vanilla/ShulkerBoxVisual.java | 27 +---- .../flywheel/backend/FabricBackendConfig.java | 106 ------------------ .../flywheel/backend/FlwBackendXplatImpl.java | 7 +- .../flywheel/impl/FabricFlwConfig.java | 68 +++++++++++ .../flywheel/impl/FlwCommands.java | 7 +- .../flywheel/impl/mixin/MinecraftMixin.java | 2 - .../flywheel/backend/FlwBackendXplatImpl.java | 7 +- .../flywheel/backend/ForgeBackendConfig.java | 39 ------- .../flywheel/impl/FlwCommands.java | 3 +- .../flywheel/impl/FlywheelForge.java | 2 - .../flywheel/impl/ForgeFlwConfig.java | 26 +++++ 12 files changed, 112 insertions(+), 185 deletions(-) delete mode 100644 fabric/src/backend/java/dev/engine_room/flywheel/backend/FabricBackendConfig.java delete mode 100644 forge/src/backend/java/dev/engine_room/flywheel/backend/ForgeBackendConfig.java diff --git a/common/src/backend/java/dev/engine_room/flywheel/backend/BackendConfig.java b/common/src/backend/java/dev/engine_room/flywheel/backend/BackendConfig.java index 1bc137773..779ab2f9c 100644 --- a/common/src/backend/java/dev/engine_room/flywheel/backend/BackendConfig.java +++ b/common/src/backend/java/dev/engine_room/flywheel/backend/BackendConfig.java @@ -8,9 +8,6 @@ public interface BackendConfig { /** * How smooth/accurate our flw_light impl is. * - *

This makes more sense here as a backend-specific config because it's tightly coupled to - * our backend's implementation. 3rd party backend may have different approaches and configurations. - * * @return The current light smoothness setting. */ LightSmoothness lightSmoothness(); diff --git a/common/src/main/java/dev/engine_room/flywheel/vanilla/ShulkerBoxVisual.java b/common/src/main/java/dev/engine_room/flywheel/vanilla/ShulkerBoxVisual.java index 716b8a317..9e9e17925 100644 --- a/common/src/main/java/dev/engine_room/flywheel/vanilla/ShulkerBoxVisual.java +++ b/common/src/main/java/dev/engine_room/flywheel/vanilla/ShulkerBoxVisual.java @@ -8,12 +8,10 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import dev.engine_room.flywheel.api.instance.Instance; -import dev.engine_room.flywheel.api.visual.ShaderLightVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.material.CutoutShaders; -import dev.engine_room.flywheel.lib.material.LightShaders; import dev.engine_room.flywheel.lib.material.SimpleMaterial; import dev.engine_room.flywheel.lib.model.ModelCache; import dev.engine_room.flywheel.lib.model.SingleMeshModel; @@ -21,20 +19,17 @@ import dev.engine_room.flywheel.lib.model.part.ModelPartConverter; import dev.engine_room.flywheel.lib.transform.TransformStack; import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; -import it.unimi.dsi.fastutil.longs.LongArraySet; import net.minecraft.client.model.geom.ModelLayers; import net.minecraft.client.renderer.Sheets; import net.minecraft.client.resources.model.Material; import net.minecraft.core.Direction; -import net.minecraft.core.SectionPos; import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.block.ShulkerBoxBlock; import net.minecraft.world.level.block.entity.ShulkerBoxBlockEntity; -public class ShulkerBoxVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual, ShaderLightVisual { +public class ShulkerBoxVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { private static final dev.engine_room.flywheel.api.material.Material MATERIAL = SimpleMaterial.builder() .cutout(CutoutShaders.ONE_TENTH) - .light(LightShaders.SMOOTH) .texture(Sheets.SHULKER_SHEET) .mipmap(false) .backfaceCulling(false) @@ -72,7 +67,6 @@ public class ShulkerBoxVisual extends AbstractBlockEntityVisual { - var oldValue = FabricBackendConfig.INSTANCE.lightSmoothness; + var oldValue = FabricFlwConfig.INSTANCE.backendConfig.lightSmoothness; var newValue = context.getArgument("mode", LightSmoothness.class); if (oldValue != newValue) { - FabricBackendConfig.INSTANCE.lightSmoothness = newValue; - FabricBackendConfig.INSTANCE.save(); + FabricFlwConfig.INSTANCE.backendConfig.lightSmoothness = newValue; + FabricFlwConfig.INSTANCE.save(); Minecraft.getInstance() .reloadResourcePacks(); } diff --git a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java b/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java index 79ec1986b..f96a68595 100644 --- a/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java +++ b/fabric/src/main/java/dev/engine_room/flywheel/impl/mixin/MinecraftMixin.java @@ -11,7 +11,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import dev.engine_room.flywheel.api.event.EndClientResourceReloadCallback; -import dev.engine_room.flywheel.backend.FabricBackendConfig; import dev.engine_room.flywheel.impl.FabricFlwConfig; import dev.engine_room.flywheel.impl.FlwImpl; import net.minecraft.client.Minecraft; @@ -29,7 +28,6 @@ abstract class MinecraftMixin { // Load the config after we freeze registries, // so we can find third party backends. FabricFlwConfig.INSTANCE.load(); - FabricBackendConfig.INSTANCE.load(); } @Inject(method = "method_24040", at = @At("HEAD")) diff --git a/forge/src/backend/java/dev/engine_room/flywheel/backend/FlwBackendXplatImpl.java b/forge/src/backend/java/dev/engine_room/flywheel/backend/FlwBackendXplatImpl.java index 6c6bd2c68..c8eb18fb7 100644 --- a/forge/src/backend/java/dev/engine_room/flywheel/backend/FlwBackendXplatImpl.java +++ b/forge/src/backend/java/dev/engine_room/flywheel/backend/FlwBackendXplatImpl.java @@ -1,10 +1,15 @@ package dev.engine_room.flywheel.backend; +import org.jetbrains.annotations.UnknownNullability; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.state.BlockState; public class FlwBackendXplatImpl implements FlwBackendXplat { + @UnknownNullability + public static BackendConfig CONFIG; + @Override public int getLightEmission(BlockState state, BlockGetter level, BlockPos pos) { return state.getLightEmission(level, pos); @@ -12,6 +17,6 @@ public class FlwBackendXplatImpl implements FlwBackendXplat { @Override public BackendConfig getConfig() { - return ForgeBackendConfig.INSTANCE; + return CONFIG; } } diff --git a/forge/src/backend/java/dev/engine_room/flywheel/backend/ForgeBackendConfig.java b/forge/src/backend/java/dev/engine_room/flywheel/backend/ForgeBackendConfig.java deleted file mode 100644 index 3d3e64963..000000000 --- a/forge/src/backend/java/dev/engine_room/flywheel/backend/ForgeBackendConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -package dev.engine_room.flywheel.backend; - -import org.apache.commons.lang3.tuple.Pair; - -import dev.engine_room.flywheel.backend.compile.LightSmoothness; -import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.config.ModConfig; - -public class ForgeBackendConfig implements BackendConfig { - public static final ForgeBackendConfig INSTANCE = new ForgeBackendConfig(); - - public final ClientConfig client; - private final ForgeConfigSpec clientSpec; - - private ForgeBackendConfig() { - Pair clientPair = new ForgeConfigSpec.Builder().configure(ClientConfig::new); - this.client = clientPair.getLeft(); - clientSpec = clientPair.getRight(); - } - - @Override - public LightSmoothness lightSmoothness() { - return client.lightSmoothness.get(); - } - - public void registerSpecs(ModLoadingContext context) { - context.registerConfig(ModConfig.Type.CLIENT, clientSpec, "flywheel-backend.toml"); - } - - public static class ClientConfig { - public final ForgeConfigSpec.EnumValue lightSmoothness; - - private ClientConfig(ForgeConfigSpec.Builder builder) { - lightSmoothness = builder.comment("How smooth flywheel's shader-based lighting should be. May have a large performance impact.") - .defineEnum("lightSmoothness", LightSmoothness.SMOOTH); - } - } -} diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java index 640225eca..870680a66 100644 --- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java +++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwCommands.java @@ -6,7 +6,6 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import dev.engine_room.flywheel.api.backend.Backend; import dev.engine_room.flywheel.api.backend.BackendManager; -import dev.engine_room.flywheel.backend.ForgeBackendConfig; import dev.engine_room.flywheel.backend.LightSmoothnessArgument; import dev.engine_room.flywheel.backend.compile.LightSmoothness; import dev.engine_room.flywheel.backend.engine.uniform.DebugMode; @@ -124,7 +123,7 @@ public final class FlwCommands { return Command.SINGLE_SUCCESS; }))); - var lightSmoothnessValue = ForgeBackendConfig.INSTANCE.client.lightSmoothness; + var lightSmoothnessValue = ForgeFlwConfig.INSTANCE.client.backendConfig.lightSmoothness; command.then(Commands.literal("lightSmoothness") .then(Commands.argument("mode", LightSmoothnessArgument.INSTANCE) .executes(context -> { diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java index 57756aa47..f8ba8d83b 100644 --- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java +++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlywheelForge.java @@ -6,7 +6,6 @@ import org.jetbrains.annotations.UnknownNullability; import dev.engine_room.flywheel.api.Flywheel; import dev.engine_room.flywheel.api.event.EndClientResourceReloadEvent; import dev.engine_room.flywheel.api.event.ReloadLevelRendererEvent; -import dev.engine_room.flywheel.backend.ForgeBackendConfig; import dev.engine_room.flywheel.backend.LightSmoothnessArgument; import dev.engine_room.flywheel.backend.compile.FlwProgramsReloader; import dev.engine_room.flywheel.backend.engine.uniform.Uniforms; @@ -54,7 +53,6 @@ public final class FlywheelForge { .getModEventBus(); ForgeFlwConfig.INSTANCE.registerSpecs(modLoadingContext); - ForgeBackendConfig.INSTANCE.registerSpecs(modLoadingContext); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FlywheelForge.clientInit(forgeEventBus, modEventBus)); } diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java b/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java index 4f24a7f64..b19ae9fea 100644 --- a/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java +++ b/forge/src/main/java/dev/engine_room/flywheel/impl/ForgeFlwConfig.java @@ -5,6 +5,9 @@ import org.jetbrains.annotations.Nullable; import dev.engine_room.flywheel.api.backend.Backend; import dev.engine_room.flywheel.api.backend.BackendManager; +import dev.engine_room.flywheel.backend.BackendConfig; +import dev.engine_room.flywheel.backend.FlwBackendXplatImpl; +import dev.engine_room.flywheel.backend.compile.LightSmoothness; import net.minecraft.ResourceLocationException; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.common.ForgeConfigSpec; @@ -21,6 +24,8 @@ public class ForgeFlwConfig implements FlwConfig { Pair clientPair = new ForgeConfigSpec.Builder().configure(ClientConfig::new); this.client = clientPair.getLeft(); clientSpec = clientPair.getRight(); + + FlwBackendXplatImpl.CONFIG = client.backendConfig; } @Override @@ -72,6 +77,8 @@ public class ForgeFlwConfig implements FlwConfig { public final ForgeConfigSpec.BooleanValue limitUpdates; public final ForgeConfigSpec.IntValue workerThreads; + public final ForgeBackendConfig backendConfig; + private ClientConfig(ForgeConfigSpec.Builder builder) { backend = builder.comment("Select the backend to use.") .define("backend", Backend.REGISTRY.getIdOrThrow(BackendManager.defaultBackend()).toString()); @@ -82,6 +89,25 @@ public class ForgeFlwConfig implements FlwConfig { workerThreads = builder.comment("The number of worker threads to use. Set to -1 to let Flywheel decide. Set to 0 to disable parallelism. Requires a game restart to take effect.") .defineInRange("workerThreads", -1, -1, Runtime.getRuntime() .availableProcessors()); + + builder.comment("Config options for flywheel's build-in backends.") + .push("flw_backends"); + + backendConfig = new ForgeBackendConfig(builder); + } + } + + public static class ForgeBackendConfig implements BackendConfig { + public final ForgeConfigSpec.EnumValue lightSmoothness; + + public ForgeBackendConfig(ForgeConfigSpec.Builder builder) { + lightSmoothness = builder.comment("How smooth flywheel's shader-based lighting should be. May have a large performance impact.") + .defineEnum("lightSmoothness", LightSmoothness.SMOOTH); + } + + @Override + public LightSmoothness lightSmoothness() { + return lightSmoothness.get(); } } }