document openGL interfaces not used on Blaze3D

Also add API logic to determine if DH is handling the rendering natively or using an interpretation layer
This commit is contained in:
James Seibel
2026-05-19 21:52:11 -05:00
parent c81dc83bb1
commit 9db045d614
8 changed files with 120 additions and 16 deletions
@@ -19,9 +19,21 @@
package com.seibel.distanthorizons.api.interfaces.override.rendering; package com.seibel.distanthorizons.api.interfaces.override.rendering;
import com.seibel.distanthorizons.api.enums.config.EDhApiRenderApi;
import com.seibel.distanthorizons.api.interfaces.override.IDhApiOverrideable; import com.seibel.distanthorizons.api.interfaces.override.IDhApiOverrideable;
import com.seibel.distanthorizons.api.interfaces.render.IDhApiRenderProxy;
/** /**
* <b>Note: </b><br>
* This is only used if Distant Horizons'
* {@link IDhApiRenderProxy#getRenderingApi()} returns {@link EDhApiRenderApi#OPEN_GL}
* and {@link IDhApiRenderProxy#isNativeRenderer()} returns true.
* ie this is only used when DH is doing native OpenGL rendering,
* if DH is using Blaze3D this interface will be ignored.
*
* @see IDhApiRenderProxy#getRenderingApi()
* @see IDhApiRenderProxy#isNativeRenderer()
*
* @author James Seibel * @author James Seibel
* @version 2024-1-24 * @version 2024-1-24
* @since API 2.0.0 * @since API 2.0.0
@@ -19,7 +19,9 @@
package com.seibel.distanthorizons.api.interfaces.override.rendering; package com.seibel.distanthorizons.api.interfaces.override.rendering;
import com.seibel.distanthorizons.api.enums.config.EDhApiRenderApi;
import com.seibel.distanthorizons.api.interfaces.override.IDhApiOverrideable; import com.seibel.distanthorizons.api.interfaces.override.IDhApiOverrideable;
import com.seibel.distanthorizons.api.interfaces.render.IDhApiRenderProxy;
import com.seibel.distanthorizons.api.interfaces.render.IDhApiRenderableBoxGroup; import com.seibel.distanthorizons.api.interfaces.render.IDhApiRenderableBoxGroup;
import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam; import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam;
import com.seibel.distanthorizons.api.objects.math.DhApiVec3d; import com.seibel.distanthorizons.api.objects.math.DhApiVec3d;
@@ -27,7 +29,16 @@ import com.seibel.distanthorizons.api.objects.render.DhApiRenderableBox;
import com.seibel.distanthorizons.api.objects.render.DhApiRenderableBoxGroupShading; import com.seibel.distanthorizons.api.objects.render.DhApiRenderableBoxGroupShading;
/** /**
* <b>Note: </b><br>
* This is only used if Distant Horizons'
* {@link IDhApiRenderProxy#getRenderingApi()} returns {@link EDhApiRenderApi#OPEN_GL}
* and {@link IDhApiRenderProxy#isNativeRenderer()} returns true.
* ie this is only used when DH is doing native OpenGL rendering,
* if DH is using Blaze3D this interface will be ignored.
*
* @see IDhApiShaderProgram * @see IDhApiShaderProgram
* @see IDhApiRenderProxy#getRenderingApi()
* @see IDhApiRenderProxy#isNativeRenderer()
* *
* @author James Seibel * @author James Seibel
* @version 2024-7-11 * @version 2024-7-11
@@ -19,12 +19,23 @@
package com.seibel.distanthorizons.api.interfaces.override.rendering; package com.seibel.distanthorizons.api.interfaces.override.rendering;
import com.seibel.distanthorizons.api.enums.config.EDhApiRenderApi;
import com.seibel.distanthorizons.api.interfaces.override.IDhApiOverrideable; import com.seibel.distanthorizons.api.interfaces.override.IDhApiOverrideable;
import com.seibel.distanthorizons.api.interfaces.render.IDhApiRenderProxy;
import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam; import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam;
import com.seibel.distanthorizons.api.objects.math.DhApiVec3f; import com.seibel.distanthorizons.api.objects.math.DhApiVec3f;
/** /**
* <b>Note: </b><br>
* This is only used if Distant Horizons'
* {@link IDhApiRenderProxy#getRenderingApi()} returns {@link EDhApiRenderApi#OPEN_GL}
* and {@link IDhApiRenderProxy#isNativeRenderer()} returns true.
* ie this is only used when DH is doing native OpenGL rendering,
* if DH is using Blaze3D this interface will be ignored.
*
* @see IDhApiGenericObjectShaderProgram * @see IDhApiGenericObjectShaderProgram
* @see IDhApiRenderProxy#getRenderingApi()
* @see IDhApiRenderProxy#isNativeRenderer()
* *
* @author James Seibel * @author James Seibel
* @version 2024-1-24 * @version 2024-1-24
@@ -19,6 +19,8 @@
package com.seibel.distanthorizons.api.interfaces.render; package com.seibel.distanthorizons.api.interfaces.render;
import com.seibel.distanthorizons.api.enums.config.EDhApiRenderApi;
import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiAfterDhInitEvent;
import com.seibel.distanthorizons.api.objects.DhApiResult; import com.seibel.distanthorizons.api.objects.DhApiResult;
@@ -44,6 +46,34 @@ public interface IDhApiRenderProxy
*/ */
DhApiResult<Boolean> clearRenderDataCache(); DhApiResult<Boolean> clearRenderDataCache();
/**
* Returns which specific {@link EDhApiRenderApi}
* Distant Horizons will use for rendering. <br>
* Will not return {@link EDhApiRenderApi#AUTO}.<br>
*
* @throws IllegalStateException if no renderer has been bound yet,
* wait till after {@link DhApiAfterDhInitEvent} has been fired
*
* @see DhApiAfterDhInitEvent
* @since API 7.0.0
*/
EDhApiRenderApi getRenderingApi() throws IllegalStateException;
/**
* Returns true if the current renderer
* is calling the base rendering API's method calls. <br>
* ie GL.drawArrays() for OpenGL. <Br><br>
*
* If DH is using a rendering interpretation layer like Blaze3D (Mojang's rendering API)
* this will return false.
*
* @throws IllegalStateException if no renderer has been bound yet,
* wait till after {@link DhApiAfterDhInitEvent} has been fired
*
* @see DhApiAfterDhInitEvent
* @since API 7.0.0
*/
boolean isNativeRenderer() throws IllegalStateException;
//=======================// //=======================//
@@ -19,6 +19,7 @@
package com.seibel.distanthorizons.core.render; package com.seibel.distanthorizons.core.render;
import com.seibel.distanthorizons.api.enums.config.EDhApiRenderApi;
import com.seibel.distanthorizons.api.interfaces.render.IDhApiRenderProxy; import com.seibel.distanthorizons.api.interfaces.render.IDhApiRenderProxy;
import com.seibel.distanthorizons.api.objects.DhApiResult; import com.seibel.distanthorizons.api.objects.DhApiResult;
import com.seibel.distanthorizons.core.api.internal.SharedApi; import com.seibel.distanthorizons.core.api.internal.SharedApi;
@@ -28,6 +29,8 @@ import com.seibel.distanthorizons.core.level.IDhLevel;
import com.seibel.distanthorizons.core.util.RenderUtil; import com.seibel.distanthorizons.core.util.RenderUtil;
import com.seibel.distanthorizons.core.world.AbstractDhWorld; import com.seibel.distanthorizons.core.world.AbstractDhWorld;
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.render.AbstractDhRenderApiDefinition;
import org.jetbrains.annotations.Nullable;
/** /**
* Used to interact with Distant Horizons' rendering systems. * Used to interact with Distant Horizons' rendering systems.
@@ -43,6 +46,18 @@ public class DhApiRenderProxy implements IDhApiRenderProxy
private boolean deferTransparentRendering = false; private boolean deferTransparentRendering = false;
private static AbstractDhRenderApiDefinition renderApiDef = null;
@Nullable
private static AbstractDhRenderApiDefinition tryGetApiDef()
{
if (renderApiDef == null)
{
renderApiDef = SingletonInjector.INSTANCE.get(AbstractDhRenderApiDefinition.class);
}
return renderApiDef;
}
//=============// //=============//
@@ -57,6 +72,7 @@ public class DhApiRenderProxy implements IDhApiRenderProxy
// methods // // methods //
//=========// //=========//
@Override
public DhApiResult<Boolean> clearRenderDataCache() public DhApiResult<Boolean> clearRenderDataCache()
{ {
// make sure this is a valid time to run the method // make sure this is a valid time to run the method
@@ -80,6 +96,32 @@ public class DhApiRenderProxy implements IDhApiRenderProxy
return DhApiResult.createSuccess(); return DhApiResult.createSuccess();
} }
@Override
public EDhApiRenderApi getRenderingApi() throws IllegalStateException
{
AbstractDhRenderApiDefinition apiDef = tryGetApiDef();
if (apiDef == null)
{
// The rendering API hasn't been set up yet
throw new IllegalStateException("Distant Horizons hasn't finished setup yet. No renderer has been set.");
}
return apiDef.getRenderApi();
}
@Override
public boolean isNativeRenderer() throws IllegalStateException
{
AbstractDhRenderApiDefinition apiDef = tryGetApiDef();
if (apiDef == null)
{
// The rendering API hasn't been set up yet
throw new IllegalStateException("Distant Horizons hasn't finished setup yet. No renderer has been set.");
}
return apiDef.isNativeRenderer();
}
public static int activeOpenGlDhDepthTextureId = -1; public static int activeOpenGlDhDepthTextureId = -1;
@Override @Override
@@ -1,12 +0,0 @@
package com.seibel.distanthorizons.core.render;
/**
* VULKAN, <br>
* OPEN_GL, <br>
*/
public enum EDhRenderApi
{
VULKAN,
OPEN_GL;
}
@@ -21,9 +21,9 @@ package com.seibel.distanthorizons.core.wrapperInterfaces.minecraft;
import java.awt.Color; import java.awt.Color;
import com.seibel.distanthorizons.api.enums.config.EDhApiRenderApi;
import com.seibel.distanthorizons.core.api.internal.rendering.DhRenderState; import com.seibel.distanthorizons.core.api.internal.rendering.DhRenderState;
import com.seibel.distanthorizons.core.enums.EDhDirection; import com.seibel.distanthorizons.core.enums.EDhDirection;
import com.seibel.distanthorizons.core.render.EDhRenderApi;
import com.seibel.distanthorizons.core.wrapperInterfaces.misc.ILightMapWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.misc.ILightMapWrapper;
import com.seibel.distanthorizons.coreapi.interfaces.dependencyInjection.IBindable; import com.seibel.distanthorizons.coreapi.interfaces.dependencyInjection.IBindable;
import com.seibel.distanthorizons.core.util.math.Vec3d; import com.seibel.distanthorizons.core.util.math.Vec3d;
@@ -77,7 +77,7 @@ public interface IMinecraftRenderWrapper extends IBindable
boolean mcRendersToFrameBuffer(); boolean mcRendersToFrameBuffer();
boolean runningLegacyOpenGL(); boolean runningLegacyOpenGL();
/** Returns the API Minecraft is currently using for rendering */ /** Returns the API Minecraft is currently using for rendering */
EDhRenderApi getMcRenderingApi(); EDhApiRenderApi getMcRenderingApi();
/** @return -1 if no valid framebuffer is available yet */ /** @return -1 if no valid framebuffer is available yet */
int getTargetFramebuffer(); // Note: Iris is now hooking onto this for DH + Iris compat, try not to change (unless we wanna deal with some annoyances) int getTargetFramebuffer(); // Note: Iris is now hooking onto this for DH + Iris compat, try not to change (unless we wanna deal with some annoyances)
@@ -1,8 +1,8 @@
package com.seibel.distanthorizons.core.wrapperInterfaces.render; package com.seibel.distanthorizons.core.wrapperInterfaces.render;
import com.seibel.distanthorizons.api.enums.config.EDhApiRenderApi;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
import com.seibel.distanthorizons.core.jar.EPlatform; import com.seibel.distanthorizons.core.jar.EPlatform;
import com.seibel.distanthorizons.core.render.EDhRenderApi;
import com.seibel.distanthorizons.core.render.EDhRenderDepth; import com.seibel.distanthorizons.core.render.EDhRenderDepth;
import com.seibel.distanthorizons.core.render.renderer.AbstractDebugWireframeRenderer; 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.IDhGenericObjectVertexBufferContainer;
@@ -32,7 +32,17 @@ public abstract class AbstractDhRenderApiDefinition implements IBindable
public boolean useSingleIbo() { return this.useSingleIbo; } public boolean useSingleIbo() { return this.useSingleIbo; }
public abstract EDhRenderDepth getRenderDepth(); public abstract EDhRenderDepth getRenderDepth();
public abstract EDhRenderApi getRenderApi(); /** will not return {@link EDhApiRenderApi#AUTO} */
public abstract EDhApiRenderApi getRenderApi();
/**
* Returns true if the current renderer
* is calling the base rendering API's method calls. <br>
* ie GL.drawArrays() for OpenGL. <Br><br>
*
* If DH is using Blaze3D (Mojang's rendering API)
* this will return false.
*/
public abstract boolean isNativeRenderer();
//endregion //endregion