From 586531739418328d165c1fc2ec2073afe36be823 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 23 Jul 2024 19:53:13 -0500 Subject: [PATCH] Remove deprecated LodQuadBuilder code --- .../render/bufferBuilding/ColumnBox.java | 79 +++++++++---------- .../render/bufferBuilding/LodQuadBuilder.java | 28 +------ 2 files changed, 40 insertions(+), 67 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnBox.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnBox.java index 700baa3d8..ee61960e6 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnBox.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/ColumnBox.java @@ -35,6 +35,8 @@ public class ColumnBox { private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); + + public static void addBoxQuadsToBuilder( LodQuadBuilder builder, short xSize, short ySize, short zSize, @@ -42,6 +44,10 @@ public class ColumnBox int color, byte irisBlockMaterialId, byte skyLight, byte blockLight, long topData, long bottomData, ColumnArrayView[] adjData) { + //================// + // variable setup // + //================// + short maxX = (short) (x + xSize); short maxY = (short) (minY + ySize); short maxZ = (short) (z + zSize); @@ -53,33 +59,15 @@ public class ColumnBox boolean isTopTransparent = RenderDataPointUtil.getAlpha(topData) < 255 && LodRenderer.transparencyEnabled; boolean isBottomTransparent = RenderDataPointUtil.getAlpha(bottomData) < 255 && LodRenderer.transparencyEnabled; + // if there isn't any data below this LOD, make this LOD's color opaque to prevent seeing void through transparent blocks // Note: this LOD should still be considered transparent for this method's checks, otherwise rendering bugs may occur - // FIXME this transparency change should be applied before this point since this could affect other areas - // This may also be better than handling the LOD as transparent, but that is TBD if (!RenderDataPointUtil.doesDataPointExist(bottomData)) { color = ColorUtil.setAlpha(color, 255); } - // cave culling prevention - // prevents certain faces from being culled underground that should be allowed - if (builder.skipQuadsWithZeroSkylight - && 0 == skyLight - && builder.skyLightCullingBelow > maxY - && ( - (RenderDataPointUtil.getAlpha(topData) < 255 && RenderDataPointUtil.getYMax(topData) >= builder.skyLightCullingBelow) - || (RenderDataPointUtil.getYMin(topData) >= builder.skyLightCullingBelow) - || !RenderDataPointUtil.doesDataPointExist(topData) - ) - ) - { - maxY = builder.skyLightCullingBelow; - } - - - // fake ocean transparency if (LodRenderer.transparencyEnabled && LodRenderer.fakeOceanFloor) { @@ -99,7 +87,9 @@ public class ColumnBox - // add top and bottom faces if requested // + //==========================// + // add top and bottom faces // + //==========================// boolean skipTop = RenderDataPointUtil.doesDataPointExist(topData) && (RenderDataPointUtil.getYMin(topData) == maxY) && !isTopTransparent; if (!skipTop) @@ -114,14 +104,16 @@ public class ColumnBox } - // add North, south, east, and west faces if requested // - // TODO merge duplicate code - //NORTH face vertex creation + //========================================// + // add North, south, east, and west faces // + //========================================// + + // NORTH face { - ColumnArrayView adjDataNorth = adjData[EDhDirection.NORTH.ordinal() - 2]; // TODO can we use something other than ordinal-2? - int adjOverlapNorth = ColorUtil.INVISIBLE; - if (adjDataNorth == null) + ColumnArrayView adjCol = adjData[EDhDirection.NORTH.ordinal() - 2]; // TODO can we use something other than ordinal-2? + int adjOverlapNorth = ColorUtil.INVISIBLE; // can be set to a non-invisible color for debugging overlapping quads for a specific face + if (adjCol == null) { // add an adjacent face if this is opaque face or transparent over the void if (!isTransparent || overVoid) @@ -131,49 +123,49 @@ public class ColumnBox } else { - makeAdjVerticalQuad(builder, adjDataNorth, EDhDirection.NORTH, x, minY, z, xSize, ySize, + makeAdjVerticalQuad(builder, adjCol, EDhDirection.NORTH, x, minY, z, xSize, ySize, color, adjOverlapNorth, irisBlockMaterialId, skyLightTop, blockLight, topData, bottomData); } } - //SOUTH face vertex creation + // SOUTH face { - ColumnArrayView adjDataSouth = adjData[EDhDirection.SOUTH.ordinal() - 2]; + ColumnArrayView adjCol = adjData[EDhDirection.SOUTH.ordinal() - 2]; int adjOverlapSouth = ColorUtil.INVISIBLE; - if (adjDataSouth == null) + if (adjCol == null) { if (!isTransparent || overVoid) builder.addQuadAdj(EDhDirection.SOUTH, x, minY, maxZ, xSize, ySize, color, irisBlockMaterialId, LodUtil.MAX_MC_LIGHT, blockLight); } else { - makeAdjVerticalQuad(builder, adjDataSouth, EDhDirection.SOUTH, x, minY, maxZ, xSize, ySize, + makeAdjVerticalQuad(builder, adjCol, EDhDirection.SOUTH, x, minY, maxZ, xSize, ySize, color, adjOverlapSouth, irisBlockMaterialId, skyLightTop, blockLight, topData, bottomData); } } - //WEST face vertex creation + // WEST face { - ColumnArrayView adjDataWest = adjData[EDhDirection.WEST.ordinal() - 2]; + ColumnArrayView adjCol = adjData[EDhDirection.WEST.ordinal() - 2]; int adjOverlapWest = ColorUtil.INVISIBLE; - if (adjDataWest == null) + if (adjCol == null) { if (!isTransparent || overVoid) builder.addQuadAdj(EDhDirection.WEST, x, minY, z, zSize, ySize, color, irisBlockMaterialId, LodUtil.MAX_MC_LIGHT, blockLight); } else { - makeAdjVerticalQuad(builder, adjDataWest, EDhDirection.WEST, x, minY, z, zSize, ySize, + makeAdjVerticalQuad(builder, adjCol, EDhDirection.WEST, x, minY, z, zSize, ySize, color, adjOverlapWest, irisBlockMaterialId, skyLightTop, blockLight, topData, bottomData); } } - //EAST face vertex creation + // EAST face { - ColumnArrayView adjDataEast = adjData[EDhDirection.EAST.ordinal() - 2]; + ColumnArrayView adjCol = adjData[EDhDirection.EAST.ordinal() - 2]; int adjOverlapEast = ColorUtil.INVISIBLE; if (adjData[EDhDirection.EAST.ordinal() - 2] == null) { @@ -182,7 +174,7 @@ public class ColumnBox } else { - makeAdjVerticalQuad(builder, adjDataEast, EDhDirection.EAST, maxX, minY, z, zSize, ySize, + makeAdjVerticalQuad(builder, adjCol, EDhDirection.EAST, maxX, minY, z, zSize, ySize, color, adjOverlapEast, irisBlockMaterialId, skyLightTop, blockLight, topData, bottomData); } @@ -356,7 +348,7 @@ public class ColumnBox if (yMax <= adjYMax) { // The input face is completely inside the adj's face, don't render it - if (debugOverlapColor != 0) + if (debugOverlapColor != ColorUtil.INVISIBLE) { builder.addQuadAdj(direction, x, yMin, z, horizontalWidth, ySize, debugOverlapColor, irisBlockMaterialId, LodUtil.MAX_MC_LIGHT, LodUtil.MAX_MC_LIGHT); } @@ -365,7 +357,7 @@ public class ColumnBox { // the adj data intersects the lower part of the input data, don't render below the intersection - if (adjYMax > yMin && debugOverlapColor != 0) + if (adjYMax > yMin && debugOverlapColor != ColorUtil.INVISIBLE) { builder.addQuadAdj(direction, x, yMin, z, horizontalWidth, (short) (adjYMax - yMin), debugOverlapColor, irisBlockMaterialId, LodUtil.MAX_MC_LIGHT, LodUtil.MAX_MC_LIGHT); } @@ -374,6 +366,9 @@ public class ColumnBox // if there was another face finish the last one and then break if (firstFace) { + // TODO sections next to transparent (water) need to be split up + // everything works correctly with opaque water + builder.addQuadAdj(direction, x, adjYMax, z, horizontalWidth, (short) (yMax - adjYMax), color, irisBlockMaterialId, RenderDataPointUtil.getLightSky(adjPoint), blockLight); } @@ -411,7 +406,7 @@ public class ColumnBox // Basically: y _______ < yMax <= height // _______&&: y < depth < yMax // the adj data intersects the higher part of the current data - if (debugOverlapColor != 0) + if (debugOverlapColor != ColorUtil.INVISIBLE) { builder.addQuadAdj(direction, x, adjYMin, z, horizontalWidth, (short) (yMax - adjYMin), debugOverlapColor, irisBlockMaterialId, LodUtil.MAX_MC_LIGHT, LodUtil.MAX_MC_LIGHT); } @@ -422,7 +417,7 @@ public class ColumnBox { // Otherwise: y < _____ height < yMax // _______&&: y < depth ______ < yMax - if (debugOverlapColor != 0) + if (debugOverlapColor != ColorUtil.INVISIBLE) { builder.addQuadAdj(direction, x, adjYMin, z, horizontalWidth, (short) (adjYMax - adjYMin), debugOverlapColor, irisBlockMaterialId, LodUtil.MAX_MC_LIGHT, LodUtil.MAX_MC_LIGHT); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/LodQuadBuilder.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/LodQuadBuilder.java index ab3605bdd..b9db5c836 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/LodQuadBuilder.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/LodQuadBuilder.java @@ -39,8 +39,6 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapp import com.seibel.distanthorizons.coreapi.util.MathUtil; import org.apache.logging.log4j.Logger; -//TODO: Recheck this class for refactoring - /** * Used to create the quads before they are converted to render-able buffers.

* @@ -51,11 +49,6 @@ public class LodQuadBuilder private static final Logger LOGGER = DhLoggerBuilder.getLogger(); private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); - @Deprecated - public final boolean skipQuadsWithZeroSkylight; - @Deprecated - public final short skyLightCullingBelow; - @SuppressWarnings("unchecked") private final ArrayList[] opaqueQuads = (ArrayList[]) new ArrayList[6]; @SuppressWarnings("unchecked") @@ -134,8 +127,6 @@ public class LodQuadBuilder this.transparentQuads[i] = new ArrayList<>(); } - this.skipQuadsWithZeroSkylight = false; - this.skyLightCullingBelow = 0; this.clientLevelWrapper = clientLevelWrapper; this.debugRenderingMode = Config.Client.Advanced.Debugging.debugRendering.get(); @@ -159,11 +150,6 @@ public class LodQuadBuilder throw new IllegalArgumentException("addQuadAdj() is only for adj direction! Not UP or Down!"); } - if (this.skipQuadsWithZeroSkylight && skyLight == 0 && y + widthNorthSouthOrUpDown < this.skyLightCullingBelow) - { - return; - } - BufferQuad quad = new BufferQuad(x, y, z, widthEastWest, widthNorthSouthOrUpDown, color, irisBlockMaterialId, skyLight, blockLight, dir); ArrayList quadList = (this.doTransparency && ColorUtil.getAlpha(color) < 255) ? this.transparentQuads[dir.ordinal()] : this.opaqueQuads[dir.ordinal()]; if (!quadList.isEmpty() && @@ -182,12 +168,6 @@ public class LodQuadBuilder // XZ public void addQuadUp(short x, short maxY, short z, short widthEastWest, short widthNorthSouthOrUpDown, int color, byte irisBlockMaterialId, byte skylight, byte blocklight) // TODO argument names are wrong { - // cave culling - if (this.skipQuadsWithZeroSkylight && skylight == 0 && maxY < this.skyLightCullingBelow) - { - return; - } - BufferQuad quad = new BufferQuad(x, maxY, z, widthEastWest, widthNorthSouthOrUpDown, color, irisBlockMaterialId, skylight, blocklight, EDhDirection.UP); boolean isTransparent = (this.doTransparency && ColorUtil.getAlpha(color) < 255); ArrayList quadList = isTransparent ? this.transparentQuads[EDhDirection.UP.ordinal()] : this.opaqueQuads[EDhDirection.UP.ordinal()]; @@ -209,15 +189,13 @@ public class LodQuadBuilder public void addQuadDown(short x, short y, short z, short width, short wz, int color, byte irisBlockMaterialId, byte skylight, byte blocklight) { - if (skipQuadsWithZeroSkylight && skylight == 0 && y < skyLightCullingBelow) - return; BufferQuad quad = new BufferQuad(x, y, z, width, wz, color, irisBlockMaterialId, skylight, blocklight, EDhDirection.DOWN); ArrayList qs = (doTransparency && ColorUtil.getAlpha(color) < 255) ? transparentQuads[EDhDirection.DOWN.ordinal()] : opaqueQuads[EDhDirection.DOWN.ordinal()]; - if (!qs.isEmpty() && - (qs.get(qs.size() - 1).tryMerge(quad, BufferMergeDirectionEnum.EastWest) + if (!qs.isEmpty() + && (qs.get(qs.size() - 1).tryMerge(quad, BufferMergeDirectionEnum.EastWest) || qs.get(qs.size() - 1).tryMerge(quad, BufferMergeDirectionEnum.NorthSouthOrUpDown)) - ) + ) { premergeCount++; return;