diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiFramebuffer.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiFramebuffer.java
index 7bd7db3dc..7f3fb4b11 100644
--- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiFramebuffer.java
+++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiFramebuffer.java
@@ -19,9 +19,21 @@
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.render.IDhApiRenderProxy;
/**
+ * Note:
+ * 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
* @version 2024-1-24
* @since API 2.0.0
diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiGenericObjectShaderProgram.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiGenericObjectShaderProgram.java
index ecc7e744d..51c46895d 100644
--- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiGenericObjectShaderProgram.java
+++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiGenericObjectShaderProgram.java
@@ -19,7 +19,9 @@
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.render.IDhApiRenderProxy;
import com.seibel.distanthorizons.api.interfaces.render.IDhApiRenderableBoxGroup;
import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam;
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;
/**
+ * Note:
+ * 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 IDhApiRenderProxy#getRenderingApi()
+ * @see IDhApiRenderProxy#isNativeRenderer()
*
* @author James Seibel
* @version 2024-7-11
diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiShaderProgram.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiShaderProgram.java
index c5110cb7b..58c246b6f 100644
--- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiShaderProgram.java
+++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiShaderProgram.java
@@ -19,12 +19,23 @@
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.render.IDhApiRenderProxy;
import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam;
import com.seibel.distanthorizons.api.objects.math.DhApiVec3f;
/**
+ * Note:
+ * 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 IDhApiRenderProxy#getRenderingApi()
+ * @see IDhApiRenderProxy#isNativeRenderer()
*
* @author James Seibel
* @version 2024-1-24
diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/render/IDhApiRenderProxy.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/render/IDhApiRenderProxy.java
index 01e931ec2..52bf20d17 100644
--- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/render/IDhApiRenderProxy.java
+++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/render/IDhApiRenderProxy.java
@@ -19,6 +19,8 @@
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;
@@ -44,6 +46,34 @@ public interface IDhApiRenderProxy
*/
DhApiResult clearRenderDataCache();
+ /**
+ * Returns which specific {@link EDhApiRenderApi}
+ * Distant Horizons will use for rendering.
+ * Will not return {@link EDhApiRenderApi#AUTO}.
+ *
+ * @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.
+ * ie GL.drawArrays() for OpenGL.
+ *
+ * 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;
+
//=======================//
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/DhApiRenderProxy.java b/core/src/main/java/com/seibel/distanthorizons/core/render/DhApiRenderProxy.java
index a76c1e253..dee4ccb21 100644
--- a/core/src/main/java/com/seibel/distanthorizons/core/render/DhApiRenderProxy.java
+++ b/core/src/main/java/com/seibel/distanthorizons/core/render/DhApiRenderProxy.java
@@ -19,6 +19,7 @@
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.objects.DhApiResult;
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.world.AbstractDhWorld;
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.
@@ -43,6 +46,18 @@ public class DhApiRenderProxy implements IDhApiRenderProxy
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 //
//=========//
+ @Override
public DhApiResult clearRenderDataCache()
{
// make sure this is a valid time to run the method
@@ -80,6 +96,32 @@ public class DhApiRenderProxy implements IDhApiRenderProxy
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;
@Override
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/EDhRenderApi.java b/core/src/main/java/com/seibel/distanthorizons/core/render/EDhRenderApi.java
deleted file mode 100644
index 0369d6f3d..000000000
--- a/core/src/main/java/com/seibel/distanthorizons/core/render/EDhRenderApi.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.seibel.distanthorizons.core.render;
-
-/**
- * VULKAN,
- * OPEN_GL,
- */
-public enum EDhRenderApi
-{
- VULKAN,
- OPEN_GL;
-
-}
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/minecraft/IMinecraftRenderWrapper.java b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/minecraft/IMinecraftRenderWrapper.java
index 2c922e815..153756d82 100644
--- a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/minecraft/IMinecraftRenderWrapper.java
+++ b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/minecraft/IMinecraftRenderWrapper.java
@@ -21,9 +21,9 @@ package com.seibel.distanthorizons.core.wrapperInterfaces.minecraft;
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.enums.EDhDirection;
-import com.seibel.distanthorizons.core.render.EDhRenderApi;
import com.seibel.distanthorizons.core.wrapperInterfaces.misc.ILightMapWrapper;
import com.seibel.distanthorizons.coreapi.interfaces.dependencyInjection.IBindable;
import com.seibel.distanthorizons.core.util.math.Vec3d;
@@ -77,7 +77,7 @@ public interface IMinecraftRenderWrapper extends IBindable
boolean mcRendersToFrameBuffer();
boolean runningLegacyOpenGL();
/** Returns the API Minecraft is currently using for rendering */
- EDhRenderApi getMcRenderingApi();
+ EDhApiRenderApi getMcRenderingApi();
/** @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)
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
index 4738f1a2b..5fba84ff8 100644
--- 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
@@ -1,8 +1,8 @@
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.jar.EPlatform;
-import com.seibel.distanthorizons.core.render.EDhRenderApi;
import com.seibel.distanthorizons.core.render.EDhRenderDepth;
import com.seibel.distanthorizons.core.render.renderer.AbstractDebugWireframeRenderer;
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 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.
+ * ie GL.drawArrays() for OpenGL.
+ *
+ * If DH is using Blaze3D (Mojang's rendering API)
+ * this will return false.
+ */
+ public abstract boolean isNativeRenderer();
//endregion