Add rendering API definition

This commit is contained in:
James Seibel
2026-03-09 20:12:40 -05:00
parent f145444fd4
commit 559bad5676
7 changed files with 107 additions and 4 deletions
@@ -0,0 +1,19 @@
package com.seibel.distanthorizons.api.enums.config;
import com.seibel.distanthorizons.coreapi.ModInfo;
/**
* AUTO, <br>
* OPEN_GL, <br>
* BLAZE_3D, <br><br>
*
* @since API 6.0.0
* @version 2024-6-8
*/
public enum EDhApiRenderApi
{
AUTO,
OPEN_GL,
BLAZE_3D;
}
@@ -74,6 +74,11 @@ public class DependencyInjector<BindableType extends IBindable> 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) ||
@@ -833,6 +833,18 @@ public class Config
.addListener(IgnoredDimensionCsvHandler.INSTANCE)
.build();
public static ConfigEntry<EDhApiRenderApi> renderingApi = new ConfigEntry.Builder<EDhApiRenderApi>()
.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();
}
}
@@ -110,7 +110,7 @@ public interface IWrapperFactory extends IDhApiWrapperFactory, IBindable
IVertexBufferWrapper createVboWrapper(String name);
ILodContainerUniformBufferWrapper createLodContainerUniformWrapper();
IDhGenericObjectVertexBufferContainer createInstancedVboContainer();
IDhGenericObjectVertexBufferContainer createGenericObjectVboContainer();
IDhGenericRenderer createGenericRenderer();
@@ -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
}
@@ -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);
@@ -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":