add useCameraPositionForQualityDropOff config/api

This commit is contained in:
James Seibel
2026-06-02 18:05:16 -05:00
parent c28cf643b3
commit cbff0cd9e9
5 changed files with 45 additions and 4 deletions
@@ -85,6 +85,16 @@ public interface IDhApiGraphicsConfig extends IDhApiConfigGroup
/** Modifies the quadratic function fake chunks use for horizontal quality drop-off. */ /** Modifies the quadratic function fake chunks use for horizontal quality drop-off. */
IDhApiConfigValue<EDhApiHorizontalQuality> horizontalQuality(); IDhApiConfigValue<EDhApiHorizontalQuality> horizontalQuality();
/**
* If true DH will try to use the camera position when
* determining LOD quality drop-off. <br>
* If false DH will use the player's position.
* <br><br>
* Enabling helps free-cam mods render correctly. <br>
* Disabling helps multi-camera mods render correctly (ie Immersive Portals or camera mods).
*/
IDhApiConfigValue<Boolean> useCameraPositionForQualityDropOff();
IDhApiConfigValue<EDhApiTransparency> transparency(); IDhApiConfigValue<EDhApiTransparency> transparency();
/** Defines what blocks won't be rendered as LODs. */ /** Defines what blocks won't be rendered as LODs. */
@@ -85,6 +85,10 @@ public class DhApiGraphicsConfig implements IDhApiGraphicsConfig
public IDhApiConfigValue<EDhApiHorizontalQuality> horizontalQuality() public IDhApiConfigValue<EDhApiHorizontalQuality> horizontalQuality()
{ return new DhApiConfigValue<EDhApiHorizontalQuality, EDhApiHorizontalQuality>(Config.Client.Advanced.Graphics.Quality.horizontalQuality); } { return new DhApiConfigValue<EDhApiHorizontalQuality, EDhApiHorizontalQuality>(Config.Client.Advanced.Graphics.Quality.horizontalQuality); }
@Override
public IDhApiConfigValue<Boolean> useCameraPositionForQualityDropOff()
{ return new DhApiConfigValue<Boolean, Boolean>(Config.Client.Advanced.Graphics.Quality.useCameraPositionForQualityDropOff); }
@Override @Override
public IDhApiConfigValue<EDhApiTransparency> transparency() public IDhApiConfigValue<EDhApiTransparency> transparency()
{ return new DhApiConfigValue<EDhApiTransparency, EDhApiTransparency>(Config.Client.Advanced.Graphics.Quality.transparency); } { return new DhApiConfigValue<EDhApiTransparency, EDhApiTransparency>(Config.Client.Advanced.Graphics.Quality.transparency); }
@@ -223,6 +223,18 @@ public class Config
.addListener(ReloadLodsConfigEventHandler.DELAYED_INSTANCE) .addListener(ReloadLodsConfigEventHandler.DELAYED_INSTANCE)
.build(); .build();
public static ConfigEntry<Boolean> useCameraPositionForQualityDropOff = new ConfigEntry.Builder<Boolean>()
.set(true)
.comment(""
+ "If true DH will try to use the camera position when \n"
+ "determining LOD quality drop-off. \n"
+ "If false DH will use the player's position. \n"
+ " \n"
+ "Enabling helps free-cam mods render correctly. \n"
+ "Disabling helps multi-camera mods render correctly (ie Immersive Portals or camera mods). \n"
+ "")
.build();
public static ConfigUISpacer qualitySpacer = new ConfigUISpacer.Builder().build(); public static ConfigUISpacer qualitySpacer = new ConfigUISpacer.Builder().build();
public static ConfigEntry<EDhApiTransparency> transparency = new ConfigEntry.Builder<EDhApiTransparency>() public static ConfigEntry<EDhApiTransparency> transparency = new ConfigEntry.Builder<EDhApiTransparency>()
@@ -109,10 +109,21 @@ public class ClientLevelModule implements Closeable, IDataSourceUpdateListenerFu
this.ClientRenderStateRef.set(clientRenderState); this.ClientRenderStateRef.set(clientRenderState);
} }
// use camera position instead of player pos so free cam mods work better
DhBlockPos2D quadTreeTickBlockPos;
if (Config.Client.Advanced.Graphics.Quality.useCameraPositionForQualityDropOff.get())
{
// use camera position allow free cam mods work better
DhVec3d cameraDoublePos = MC_RENDER.getCameraExactPosition(); DhVec3d cameraDoublePos = MC_RENDER.getCameraExactPosition();
DhBlockPos2D cameraBlockPos = new DhBlockPos2D((int)cameraDoublePos.x, (int)cameraDoublePos.z); quadTreeTickBlockPos = new DhBlockPos2D((int)cameraDoublePos.x, (int)cameraDoublePos.z);
clientRenderState.quadtree.tryTick(cameraBlockPos); }
else
{
// player position allows multi-cam mods to work better
quadTreeTickBlockPos = new DhBlockPos2D(MC_CLIENT.getPlayerBlockPos());
}
clientRenderState.quadtree.tryTick(quadTreeTickBlockPos);
} }
@@ -127,6 +127,10 @@
"Vertical Quality", "Vertical Quality",
"distanthorizons.config.client.advanced.graphics.quality.verticalQuality.@tooltip": "distanthorizons.config.client.advanced.graphics.quality.verticalQuality.@tooltip":
"How well LODs represent overhangs, caves, cliffsides, etc.\n\nHigher options will increase memory and GPU usage.", "How well LODs represent overhangs, caves, cliffsides, etc.\n\nHigher options will increase memory and GPU usage.",
"distanthorizons.config.client.advanced.graphics.quality.useCameraPositionForQualityDropOff":
"Use Camera Pos for Quality Drop-Off",
"distanthorizons.config.client.advanced.graphics.quality.useCameraPositionForQualityDropOff.@tooltip":
"If true DH will try to use the camera position when \ndetermining LOD quality drop-off. \nIf false DH will use the player's position. \n\nEnabling helps free-cam mods render correctly. \nDisabling helps multi-camera mods render correctly (ie Immersive Portals or camera mods).",
"distanthorizons.config.client.advanced.graphics.quality.horizontalScale": "distanthorizons.config.client.advanced.graphics.quality.horizontalScale":
"Horizontal Scale", "Horizontal Scale",
"distanthorizons.config.client.advanced.graphics.quality.horizontalScale.@tooltip": "distanthorizons.config.client.advanced.graphics.quality.horizontalScale.@tooltip":