diff --git a/api/src/main/java/com/seibel/distanthorizons/api/enums/config/EDhApiRenderApi.java b/api/src/main/java/com/seibel/distanthorizons/api/enums/config/EDhApiRenderApi.java new file mode 100644 index 000000000..f9c0b0c3b --- /dev/null +++ b/api/src/main/java/com/seibel/distanthorizons/api/enums/config/EDhApiRenderApi.java @@ -0,0 +1,19 @@ +package com.seibel.distanthorizons.api.enums.config; + +import com.seibel.distanthorizons.coreapi.ModInfo; + +/** + * AUTO,
+ * OPEN_GL,
+ * BLAZE_3D,

+ * + * @since API 6.0.0 + * @version 2024-6-8 + */ +public enum EDhApiRenderApi +{ + AUTO, + OPEN_GL, + BLAZE_3D; + +} diff --git a/api/src/main/java/com/seibel/distanthorizons/coreapi/DependencyInjection/DependencyInjector.java b/api/src/main/java/com/seibel/distanthorizons/coreapi/DependencyInjection/DependencyInjector.java index dc9a4e5e6..f21673b96 100644 --- a/api/src/main/java/com/seibel/distanthorizons/coreapi/DependencyInjection/DependencyInjector.java +++ b/api/src/main/java/com/seibel/distanthorizons/coreapi/DependencyInjection/DependencyInjector.java @@ -74,6 +74,11 @@ public class DependencyInjector implements IDepe throw new IllegalStateException("The dependency [" + dependencyInterface.getSimpleName() + "] has already been bound."); } + if (dependencyImplementation == null) + { + throw new NullPointerException("Can't bind null to ["+dependencyInterface.getSimpleName()+"]"); + } + // make sure the given dependency implements the necessary interfaces boolean implementsInterface = this.checkIfClassImplements(dependencyImplementation.getClass(), dependencyInterface) || diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java b/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java index 0c413a863..cfe1a8f8b 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java @@ -833,6 +833,18 @@ public class Config .addListener(IgnoredDimensionCsvHandler.INSTANCE) .build(); + public static ConfigEntry renderingApi = new ConfigEntry.Builder() + .set(EDhApiRenderApi.AUTO) + .setAppearance(EConfigEntryAppearance.ONLY_IN_FILE) // can't be changed while the game is running + .comment("" + + "Options: \n" + + EDhApiRenderApi.AUTO + " \n" + + EDhApiRenderApi.OPEN_GL + " \n" + + EDhApiRenderApi.BLAZE_3D + " \n" + + "") + .build(); + + } } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/IWrapperFactory.java b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/IWrapperFactory.java index b25607dc2..d5daec17d 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/IWrapperFactory.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/IWrapperFactory.java @@ -110,7 +110,7 @@ public interface IWrapperFactory extends IDhApiWrapperFactory, IBindable IVertexBufferWrapper createVboWrapper(String name); ILodContainerUniformBufferWrapper createLodContainerUniformWrapper(); - IDhGenericObjectVertexBufferContainer createInstancedVboContainer(); + IDhGenericObjectVertexBufferContainer createGenericObjectVboContainer(); IDhGenericRenderer createGenericRenderer(); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/AbstractDhRenderApiDefinition.java b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/AbstractDhRenderApiDefinition.java new file mode 100644 index 000000000..97de9cd2f --- /dev/null +++ b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/AbstractDhRenderApiDefinition.java @@ -0,0 +1,64 @@ +package com.seibel.distanthorizons.core.wrapperInterfaces.render; + +import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; +import com.seibel.distanthorizons.core.render.renderer.AbstractDebugWireframeRenderer; +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.*; +import com.seibel.distanthorizons.coreapi.interfaces.dependencyInjection.IBindable; + +public abstract class AbstractDhRenderApiDefinition implements IBindable +{ + //============// + // singletons // + //============// + //region + + public abstract IDhTerrainRenderer getTerrainRenderer(); + public abstract IDhSsaoRenderer getSsaoRenderer(); + public abstract IDhFogRenderer getFogRenderer(); + public abstract IDhFarFadeRenderer getFarFadeRenderer(); + public abstract AbstractDebugWireframeRenderer getDebugWireframeRenderer(); + public abstract IDhVanillaFadeRenderer getVanillaFadeRenderer(); + public abstract IDhTestTriangleRenderer getTestTriangleRenderer(); + + public void bindRenderers() + { + SingletonInjector.INSTANCE.bind(AbstractDhRenderApiDefinition.class, this); + + SingletonInjector.INSTANCE.bind(IDhTerrainRenderer.class, this.getTerrainRenderer()); + SingletonInjector.INSTANCE.bind(IDhSsaoRenderer.class, this.getSsaoRenderer()); + SingletonInjector.INSTANCE.bind(IDhFogRenderer.class, this.getFogRenderer()); + SingletonInjector.INSTANCE.bind(IDhFarFadeRenderer.class, this.getFarFadeRenderer()); + SingletonInjector.INSTANCE.bind(AbstractDebugWireframeRenderer.class, this.getDebugWireframeRenderer()); + SingletonInjector.INSTANCE.bind(IDhVanillaFadeRenderer.class, this.getVanillaFadeRenderer()); + SingletonInjector.INSTANCE.bind(IDhTestTriangleRenderer.class, this.getTestTriangleRenderer()); + } + + //endregion + + + + //===========// + // factories // + //===========// + //region + + // these methods are used by WrapperFactory + + /** + * Generic renderers are created for each level they're used in + * so we can't just define a single instance. + */ + public abstract IDhGenericRenderer createGenericRenderer(); + + public abstract IVertexBufferWrapper createVboWrapper(String name); + public abstract ILodContainerUniformBufferWrapper createLodContainerUniformWrapper(); + public abstract IDhGenericObjectVertexBufferContainer createGenericVboContainer(); + + //endregion + + + +} diff --git a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/renderPass/IDhGenericRenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/renderPass/IDhGenericRenderer.java index 0eb19a59e..56f6cc6e5 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/renderPass/IDhGenericRenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/renderPass/IDhGenericRenderer.java @@ -22,9 +22,8 @@ package com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass; import com.seibel.distanthorizons.api.interfaces.render.IDhApiCustomRenderRegister; import com.seibel.distanthorizons.core.render.RenderParams; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IProfilerWrapper; -import com.seibel.distanthorizons.coreapi.interfaces.dependencyInjection.IBindable; -public interface IDhGenericRenderer extends IDhApiCustomRenderRegister, IBindable +public interface IDhGenericRenderer extends IDhApiCustomRenderRegister { void render(RenderParams renderEventParam, IProfilerWrapper profiler, boolean renderingWithSsao); diff --git a/core/src/main/resources/assets/distanthorizons/lang/en_us.json b/core/src/main/resources/assets/distanthorizons/lang/en_us.json index 9ec5075d0..d86891dbe 100644 --- a/core/src/main/resources/assets/distanthorizons/lang/en_us.json +++ b/core/src/main/resources/assets/distanthorizons/lang/en_us.json @@ -415,7 +415,11 @@ "Ignored Dimension CSV", "distanthorizons.config.client.advanced.graphics.experimental.ignoredDimensionCsv.@tooltip": "A comma separated list of dimension resource locations where DH won't render. Example: \"minecraft:the_nether,minecraft:the_end\" \n\nNote: \nSome DH settings will be disabled and/or changed to improve \nvisuals when DH rendering is disabled.", - + "distanthorizons.config.client.advanced.graphics.experimental.renderingApi": + "Rendering API", + "distanthorizons.config.client.advanced.graphics.experimental.renderingApi.@tooltip": + "", + "distanthorizons.config.client.advanced.autoUpdater":