diff --git a/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java b/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java index c7f7ac8ef..538f16fdd 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java @@ -18,8 +18,6 @@ import com.seibel.distanthorizons.core.enums.MinecraftTextFormat; import com.seibel.distanthorizons.core.jar.ModJarInfo; import com.seibel.distanthorizons.core.jar.updater.SelfUpdater; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; -import com.seibel.distanthorizons.common.render.nativeGl.glObject.GLProxy; -import com.seibel.distanthorizons.core.render.RenderThreadTaskHandler; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModAccessor; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker; import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector; @@ -47,6 +45,7 @@ public abstract class AbstractModInitializer //==================// // abstract methods // //==================// + //region protected abstract void createInitialSharedBindings(); protected abstract void createInitialClientBindings(); @@ -60,15 +59,17 @@ public abstract class AbstractModInitializer protected abstract void subscribeServerStartingEvent(Consumer eventHandler); protected abstract void runDelayedSetup(); + //endregion + //===================// // initialize events // //===================// + //region public void onInitializeClient() { - RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread(() -> { DependencySetup.createRenderBindings(); }); DependencySetup.createClientBindings(); this.createInitialClientBindings(); @@ -96,6 +97,7 @@ public abstract class AbstractModInitializer #endif this.subscribeClientStartedEvent(this::postInit); + this.subscribeClientStartedEvent(this::postClientInit); } public void onInitializeServer() @@ -135,11 +137,14 @@ public abstract class AbstractModInitializer }); } + //endregion + //===========================// // inner initializer methods // //===========================// + //region private void startup() { @@ -212,11 +217,16 @@ public abstract class AbstractModInitializer ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterDhInitEvent.class, null); } + private void postClientInit() { DependencySetup.setRenderingApiBindings(); } + + //endregion + //==================================// // mod partial compatibility checks // //==================================// + //region /** * Some mods will work with a few tweaks @@ -305,15 +315,22 @@ public abstract class AbstractModInitializer } + //endregion + //================// // helper classes // //================// + //region public interface IEventProxy { void registerEvents(); } + //endregion + + + } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhRenderApiDefinition.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhRenderApiDefinition.java new file mode 100644 index 000000000..73c7dc816 --- /dev/null +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhRenderApiDefinition.java @@ -0,0 +1,39 @@ +package com.seibel.distanthorizons.common.render.blaze; + +import com.seibel.distanthorizons.common.render.blaze.helpers.BlazeGenericObjectVertexContainer; +import com.seibel.distanthorizons.common.render.blaze.postProcessing.BlazeDhFarFadeRenderer; +import com.seibel.distanthorizons.common.render.blaze.postProcessing.BlazeDhFogRenderer; +import com.seibel.distanthorizons.common.render.blaze.postProcessing.BlazeDhSsaoRenderer; +import com.seibel.distanthorizons.common.render.blaze.postProcessing.BlazeVanillaFadeRenderer; +import com.seibel.distanthorizons.common.render.blaze.test.BlazeDhTestTriangleRenderer; +import com.seibel.distanthorizons.common.render.blaze.wrappers.buffer.BlazeVertexBufferWrapper; +import com.seibel.distanthorizons.common.render.blaze.wrappers.uniform.BlazeLodUniformBufferWrapper; +import com.seibel.distanthorizons.core.render.renderer.AbstractDebugWireframeRenderer; +import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRenderApiDefinition; +import com.seibel.distanthorizons.core.wrapperInterfaces.render.objects.IDhGenericObjectVertexBufferContainer; +import com.seibel.distanthorizons.core.wrapperInterfaces.render.objects.ILodContainerUniformBufferWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.render.objects.IVertexBufferWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.*; + +public class BlazeDhRenderApiDefinition extends AbstractDhRenderApiDefinition +{ + + @Override public IDhTerrainRenderer getTerrainRenderer() { return BlazeDhTerrainRenderer.INSTANCE; } + @Override public IDhSsaoRenderer getSsaoRenderer() { return BlazeDhSsaoRenderer.INSTANCE; } + @Override public IDhFogRenderer getFogRenderer() { return BlazeDhFogRenderer.INSTANCE; } + @Override public IDhFarFadeRenderer getFarFadeRenderer() { return BlazeDhFarFadeRenderer.INSTANCE; } + @Override public AbstractDebugWireframeRenderer getDebugWireframeRenderer() { return BlazeDebugWireframeRenderer.INSTANCE; } + + @Override public IDhVanillaFadeRenderer getVanillaFadeRenderer() { return BlazeVanillaFadeRenderer.INSTANCE; } + @Override public IDhTestTriangleRenderer getTestTriangleRenderer() { return BlazeDhTestTriangleRenderer.INSTANCE; } + + @Override public IDhGenericRenderer createGenericRenderer() { return new BlazeDhGenericObjectRenderer(); } + + + @Override public IVertexBufferWrapper createVboWrapper(String name) { return new BlazeVertexBufferWrapper(name); } + @Override public ILodContainerUniformBufferWrapper createLodContainerUniformWrapper() { return new BlazeLodUniformBufferWrapper(); } + @Override public IDhGenericObjectVertexBufferContainer createGenericVboContainer() { return new BlazeGenericObjectVertexContainer(); } + + + +} diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/postProcessing/BlazeDhSsaoRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/postProcessing/BlazeDhSsaoRenderer.java index 16cd9569a..384522bb1 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/postProcessing/BlazeDhSsaoRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/postProcessing/BlazeDhSsaoRenderer.java @@ -58,7 +58,7 @@ import java.util.OptionalInt; /** Renders SSAO to the DH LODs. */ public class BlazeDhSsaoRenderer implements IDhSsaoRenderer { - public static final DhLogger LOGGER = new DhLoggerBuilder().build(); + private static final DhLogger LOGGER = new DhLoggerBuilder().build(); private static final IMinecraftRenderWrapper MC_RENDER = SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class); diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/test/BlazeDhTestRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/test/BlazeDhTestTriangleRenderer.java similarity index 96% rename from common/src/main/java/com/seibel/distanthorizons/common/render/blaze/test/BlazeDhTestRenderer.java rename to common/src/main/java/com/seibel/distanthorizons/common/render/blaze/test/BlazeDhTestTriangleRenderer.java index e25f4e33e..697b7288e 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/test/BlazeDhTestRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/test/BlazeDhTestTriangleRenderer.java @@ -47,14 +47,14 @@ import java.util.OptionalInt; * to the center of the screen to confirm DH's * apply shader is running correctly */ -public class BlazeDhTestRenderer implements IDhTestTriangleRenderer +public class BlazeDhTestTriangleRenderer implements IDhTestTriangleRenderer { public static final DhLogger LOGGER = new DhLoggerBuilder().build(); private static final GpuDevice GPU_DEVICE = RenderSystem.getDevice(); private static final CommandEncoder COMMAND_ENCODER = GPU_DEVICE.createCommandEncoder(); - public static final BlazeDhTestRenderer INSTANCE = new BlazeDhTestRenderer(); + public static final BlazeDhTestTriangleRenderer INSTANCE = new BlazeDhTestTriangleRenderer(); private RenderPipeline pipeline; private boolean init = false; @@ -70,7 +70,7 @@ public class BlazeDhTestRenderer implements IDhTestTriangleRenderer //=============// //region - private BlazeDhTestRenderer() { } + private BlazeDhTestTriangleRenderer() { } private void tryInit() { diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/nativeGl/OpenGlDhRenderApiDefinition.java b/common/src/main/java/com/seibel/distanthorizons/common/render/nativeGl/OpenGlDhRenderApiDefinition.java new file mode 100644 index 000000000..a93b03f5a --- /dev/null +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/nativeGl/OpenGlDhRenderApiDefinition.java @@ -0,0 +1,31 @@ +package com.seibel.distanthorizons.common.render.nativeGl; + +import com.seibel.distanthorizons.core.render.renderer.AbstractDebugWireframeRenderer; +import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRenderApiDefinition; +import com.seibel.distanthorizons.core.wrapperInterfaces.render.objects.IDhGenericObjectVertexBufferContainer; +import com.seibel.distanthorizons.core.wrapperInterfaces.render.objects.ILodContainerUniformBufferWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.render.objects.IVertexBufferWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.*; + +public class OpenGlDhRenderApiDefinition extends AbstractDhRenderApiDefinition +{ + + @Override public IDhTerrainRenderer getTerrainRenderer() { return null; } + @Override public IDhSsaoRenderer getSsaoRenderer() { return null; } + @Override public IDhFogRenderer getFogRenderer() { return null; } + @Override public IDhFarFadeRenderer getFarFadeRenderer() { return null; } + @Override public AbstractDebugWireframeRenderer getDebugWireframeRenderer() { return null; } + + @Override public IDhVanillaFadeRenderer getVanillaFadeRenderer() { return null; } + @Override public IDhTestTriangleRenderer getTestTriangleRenderer() { return null; } + + @Override public IDhGenericRenderer createGenericRenderer() { return null; } + + + @Override public IVertexBufferWrapper createVboWrapper(String name) { return null; } + @Override public ILodContainerUniformBufferWrapper createLodContainerUniformWrapper() { return null; } + @Override public IDhGenericObjectVertexBufferContainer createGenericVboContainer() { return null; } + + + +} diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/nativeGl/generic/RenderableBoxGroup.java b/common/src/main/java/com/seibel/distanthorizons/common/render/nativeGl/generic/RenderableBoxGroup.java index 83882fb36..c9a7adc99 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/nativeGl/generic/RenderableBoxGroup.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/nativeGl/generic/RenderableBoxGroup.java @@ -67,9 +67,9 @@ public class RenderableBoxGroup public Consumer afterRenderFunc; // instance data - public IDhGenericObjectVertexBufferContainer vertexBufferContainer = WRAPPER_FACTORY.createInstancedVboContainer(); + public IDhGenericObjectVertexBufferContainer vertexBufferContainer = WRAPPER_FACTORY.createGenericObjectVboContainer(); /** double buffering for thread safety and to prevent locking the render thread during update */ - private IDhGenericObjectVertexBufferContainer altVertexBufferContainer = WRAPPER_FACTORY.createInstancedVboContainer(); + private IDhGenericObjectVertexBufferContainer altVertexBufferContainer = WRAPPER_FACTORY.createGenericObjectVboContainer(); diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/DependencySetup.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/DependencySetup.java index 639da81ab..f6c1bfdd6 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/DependencySetup.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/DependencySetup.java @@ -19,21 +19,19 @@ package com.seibel.distanthorizons.common.wrappers; +import com.seibel.distanthorizons.api.enums.config.EDhApiRenderApi; import com.seibel.distanthorizons.api.interfaces.render.IDhApiCustomRenderObjectFactory; -import com.seibel.distanthorizons.common.render.blaze.BlazeDebugWireframeRenderer; -import com.seibel.distanthorizons.common.render.blaze.BlazeDhTerrainRenderer; -import com.seibel.distanthorizons.common.render.blaze.postProcessing.BlazeDhFarFadeRenderer; -import com.seibel.distanthorizons.common.render.blaze.postProcessing.BlazeDhFogRenderer; -import com.seibel.distanthorizons.common.render.blaze.postProcessing.BlazeDhSsaoRenderer; -import com.seibel.distanthorizons.common.render.blaze.postProcessing.BlazeVanillaFadeRenderer; -import com.seibel.distanthorizons.common.render.blaze.test.BlazeDhTestRenderer; +import com.seibel.distanthorizons.common.render.blaze.BlazeDhRenderApiDefinition; +import com.seibel.distanthorizons.common.render.nativeGl.OpenGlDhRenderApiDefinition; import com.seibel.distanthorizons.common.render.nativeGl.generic.GenericRenderObjectFactory; import com.seibel.distanthorizons.common.wrappers.gui.ClassicConfigGUI; import com.seibel.distanthorizons.common.wrappers.gui.LangWrapper; import com.seibel.distanthorizons.common.wrappers.level.KeyedClientLevelManager; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftServerWrapper; +import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.level.IKeyedClientLevelManager; -import com.seibel.distanthorizons.core.render.renderer.AbstractDebugWireframeRenderer; +import com.seibel.distanthorizons.core.logging.DhLogger; +import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.wrapperInterfaces.config.IConfigGui; import com.seibel.distanthorizons.core.wrapperInterfaces.config.ILangWrapper; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftClientWrapper; @@ -44,7 +42,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.IWrapperFactory; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftSharedWrapper; -import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.*; +import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRenderApiDefinition; /** * Binds all necessary dependencies, so we @@ -58,6 +56,9 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.*; */ public class DependencySetup { + protected static final DhLogger LOGGER = new DhLoggerBuilder().build(); + + public static void createSharedBindings() { @@ -77,18 +78,38 @@ public class DependencySetup SingletonInjector.INSTANCE.bind(IMinecraftSharedWrapper.class, MinecraftClientWrapper.INSTANCE); SingletonInjector.INSTANCE.bind(IMinecraftRenderWrapper.class, MinecraftRenderWrapper.INSTANCE); SingletonInjector.INSTANCE.bind(IConfigGui.class, ClassicConfigGUI.CONFIG_CORE_INTERFACE); - - SingletonInjector.INSTANCE.bind(AbstractDebugWireframeRenderer.class, BlazeDebugWireframeRenderer.INSTANCE); } - public static void createRenderBindings() + public static void setRenderingApiBindings() { - SingletonInjector.INSTANCE.bind(IDhTestTriangleRenderer.class, BlazeDhTestRenderer.INSTANCE); - SingletonInjector.INSTANCE.bind(IDhVanillaFadeRenderer.class, BlazeVanillaFadeRenderer.INSTANCE); - SingletonInjector.INSTANCE.bind(IDhTerrainRenderer.class, BlazeDhTerrainRenderer.INSTANCE); - SingletonInjector.INSTANCE.bind(IDhSsaoRenderer.class, BlazeDhSsaoRenderer.INSTANCE); - SingletonInjector.INSTANCE.bind(IDhFogRenderer.class, BlazeDhFogRenderer.INSTANCE); - SingletonInjector.INSTANCE.bind(IDhFarFadeRenderer.class, BlazeDhFarFadeRenderer.INSTANCE); + EDhApiRenderApi renderingApiEnum = Config.Client.Advanced.Graphics.Experimental.renderingApi.get(); + if (renderingApiEnum == EDhApiRenderApi.AUTO) + { + #if MC_VER < MC_1_21_11 + renderingApiEnum = EDhApiRenderApi.OPEN_GL; + #else + renderingApiEnum = EDhApiRenderApi.BLAZE_3D; + #endif + } + + LOGGER.info("Setting DH Rendering API to: ["+renderingApiEnum+"]."); + + AbstractDhRenderApiDefinition renderDefinition; + if (renderingApiEnum == EDhApiRenderApi.OPEN_GL) + { + renderDefinition = new OpenGlDhRenderApiDefinition(); + } + else if (renderingApiEnum == EDhApiRenderApi.BLAZE_3D) + { + renderDefinition = new BlazeDhRenderApiDefinition(); + } + else + { + throw new IllegalStateException("No ["+ AbstractDhRenderApiDefinition.class.getSimpleName()+"] concrete implementation found for the value: ["+renderingApiEnum+"]."); + } + renderDefinition.bindRenderers(); } + + } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java index 3f5facabb..44a9c3662 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/WrapperFactory.java @@ -24,18 +24,16 @@ import com.seibel.distanthorizons.api.interfaces.block.IDhApiBlockStateWrapper; import com.seibel.distanthorizons.api.interfaces.override.worldGenerator.IDhApiWorldGenerator; import com.seibel.distanthorizons.api.interfaces.world.IDhApiLevelWrapper; import com.seibel.distanthorizons.api.interfaces.factories.IDhApiWrapperFactory; -import com.seibel.distanthorizons.common.render.blaze.BlazeDhGenericObjectRenderer; -import com.seibel.distanthorizons.common.render.blaze.helpers.BlazeGenericObjectVertexContainer; -import com.seibel.distanthorizons.common.render.blaze.wrappers.uniform.BlazeLodUniformBufferWrapper; -import com.seibel.distanthorizons.common.render.blaze.wrappers.buffer.BlazeVertexBufferWrapper; import com.seibel.distanthorizons.common.wrappers.block.BiomeWrapper; import com.seibel.distanthorizons.common.wrappers.block.BlockStateWrapper; import com.seibel.distanthorizons.common.wrappers.chunk.ChunkWrapper; import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper; import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; import com.seibel.distanthorizons.common.wrappers.worldGeneration.BatchGenerationEnvironment; +import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.level.IDhLevel; import com.seibel.distanthorizons.core.level.IDhServerLevel; +import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRenderApiDefinition; import com.seibel.distanthorizons.core.wrapperInterfaces.render.objects.IDhGenericObjectVertexBufferContainer; import com.seibel.distanthorizons.core.util.LodUtil; import com.seibel.distanthorizons.core.wrapperInterfaces.IWrapperFactory; @@ -69,6 +67,28 @@ public class WrapperFactory implements IWrapperFactory + //=====================// + // internal properties // + //=====================// + //region + + private AbstractDhRenderApiDefinition renderDefinition; + private AbstractDhRenderApiDefinition getRenderDefinition() + { + // delayed get to make sure we don't accidentally set the variable before it's bound + if (this.renderDefinition != null) + { + return this.renderDefinition; + } + + this.renderDefinition = SingletonInjector.INSTANCE.get(AbstractDhRenderApiDefinition.class); + return this.renderDefinition; + } + + //endregion + + + //==============// // core methods // //==============// @@ -219,16 +239,10 @@ public class WrapperFactory implements IWrapperFactory } - @Override - public IVertexBufferWrapper createVboWrapper(String name) { return new BlazeVertexBufferWrapper(name); } - @Override - public ILodContainerUniformBufferWrapper createLodContainerUniformWrapper() { return new BlazeLodUniformBufferWrapper(); } - - @Override - public IDhGenericObjectVertexBufferContainer createInstancedVboContainer() { return new BlazeGenericObjectVertexContainer(); } - - @Override - public IDhGenericRenderer createGenericRenderer() { return new BlazeDhGenericObjectRenderer(); } + @Override public IVertexBufferWrapper createVboWrapper(String name) { return this.getRenderDefinition().createVboWrapper(name); } + @Override public ILodContainerUniformBufferWrapper createLodContainerUniformWrapper() { return this.getRenderDefinition().createLodContainerUniformWrapper(); } + @Override public IDhGenericObjectVertexBufferContainer createGenericObjectVboContainer() { return this.getRenderDefinition().createGenericVboContainer(); } + @Override public IDhGenericRenderer createGenericRenderer() { return this.getRenderDefinition().createGenericRenderer(); } //endregion diff --git a/coreSubProjects b/coreSubProjects index 1dd244e88..559bad567 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 1dd244e889498ac84fb227a49b2c026e1de5b90e +Subproject commit 559bad5676d492b832fa6958e3c1ca57df42f1c8