From ad0eb208eaaa4dea9c956ca402fe5d1df951aa89 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 24 Apr 2022 19:13:18 -0500 Subject: [PATCH] Replace the ApiShared Logger with class specific loggers This should make the logs easier to understand. --- .../LodBufferBuilderFactory.java | 30 ++--- .../worldGeneration/BatchGenerator.java | 29 +++-- .../lod/core/handlers/LodDimensionFinder.java | 11 +- .../LodDimensionOldFileStructureHandler.java | 31 +++-- .../lod/core/handlers/ReflectionHandler.java | 4 +- .../ModAccessorHandler.java | 11 +- .../lod/core/logging/DhLoggerBuilder.java | 34 ++++++ .../lod/core/logging/SpamReducedLogger.java | 107 ++++++++++++------ .../core/objects/PosToRenderContainer.java | 9 +- .../lod/core/objects/lod/LodDimension.java | 24 ++-- .../seibel/lod/core/objects/lod/LodWorld.java | 16 ++- .../objects/opengl/SimpleRenderBuffer.java | 10 +- .../com/seibel/lod/core/render/GLProxy.java | 22 ++-- .../lod/core/render/objects/GLBuffer.java | 16 ++- .../render/objects/QuadElementBuffer.java | 14 ++- .../com/seibel/lod/core/util/GLMessage.java | 13 ++- .../lod/core/util/LodThreadFactory.java | 10 +- 17 files changed, 263 insertions(+), 128 deletions(-) create mode 100644 src/main/java/com/seibel/lod/core/logging/DhLoggerBuilder.java diff --git a/src/main/java/com/seibel/lod/core/builders/lodBuilding/bufferBuilding/LodBufferBuilderFactory.java b/src/main/java/com/seibel/lod/core/builders/lodBuilding/bufferBuilding/LodBufferBuilderFactory.java index cb870d238..6b47ddc68 100644 --- a/src/main/java/com/seibel/lod/core/builders/lodBuilding/bufferBuilding/LodBufferBuilderFactory.java +++ b/src/main/java/com/seibel/lod/core/builders/lodBuilding/bufferBuilding/LodBufferBuilderFactory.java @@ -19,12 +19,14 @@ package com.seibel.lod.core.builders.lodBuilding.bufferBuilding; +import java.lang.invoke.MethodHandles; import java.time.Duration; import java.util.concurrent.*; import java.util.concurrent.locks.ReentrantLock; -import com.seibel.lod.core.api.ApiShared; +import com.seibel.lod.core.api.internal.InternalApiShared; import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; +import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.logging.SpamReducedLogger; import com.seibel.lod.core.objects.Pos2D; import com.seibel.lod.core.objects.lod.LodDimension; @@ -36,6 +38,7 @@ import com.seibel.lod.core.util.*; import com.seibel.lod.core.util.gridList.MovableGridRingList; import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; +import org.apache.logging.log4j.Logger; /** * This object creates the buffers that are rendered by the LodRenderer. @@ -63,14 +66,15 @@ public class LodBufferBuilderFactory { return; timer = System.nanoTime() - timer; if (timer > LAG_SPIKE_THRESOLD_NS) { - ApiShared.LOGGER.info("LagSpikeCatcher: " + source + " took " + Duration.ofNanos(timer) + "!"); + LOGGER.info("LagSpikeCatcher: " + source + " took " + Duration.ofNanos(timer) + "!"); } } } - + private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); - + private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); + /** The thread used to generate new LODs off the main thread. */ private static LodThreadFactory mainGenThreadFactory = new LodThreadFactory( LodBufferBuilderFactory.class.getSimpleName() + " - main", Thread.NORM_PRIORITY - 2); @@ -156,7 +160,7 @@ public class LodBufferBuilderFactory { renderRegions = new MovableGridRingList(regionWidth/2, LevelPosUtil.getRegion(LodUtil.BLOCK_DETAIL_LEVEL, playerX), LevelPosUtil.getRegion(LodUtil.BLOCK_DETAIL_LEVEL, playerZ)); - ApiShared.LOGGER.info("============Render Regions rebuilt============"); + LOGGER.info("============Render Regions rebuilt============"); } else { renderRegions.move(LevelPosUtil.getRegion(LodUtil.BLOCK_DETAIL_LEVEL, playerX), LevelPosUtil.getRegion(LodUtil.BLOCK_DETAIL_LEVEL, playerZ), RenderRegion::close); @@ -188,7 +192,7 @@ public class LodBufferBuilderFactory { resetThreadPools(false); regionsListLock.lockInterruptibly(); if (ENABLE_EVENT_LOGGING) - ApiShared.LOGGER.info("BufferBuilderStarter locked the region lock! LodDim: [{}], RenderRegion: [{}]", + LOGGER.info("BufferBuilderStarter locked the region lock! LodDim: [{}], RenderRegion: [{}]", lodDim, renderRegions==null ? "NULL" : renderRegions.toString()); long startTime = System.currentTimeMillis(); @@ -255,7 +259,7 @@ public class LodBufferBuilderFactory { } catch (CancellationException ce) { throw new InterruptedException("Future interrupted"); } catch (ExecutionException ee) { - ApiShared.LOGGER.error("LodBufferBuilder ran into trouble: ", ee.getCause()); + LOGGER.error("LodBufferBuilder ran into trouble: ", ee.getCause()); } long executeEnd = System.currentTimeMillis(); @@ -263,7 +267,7 @@ public class LodBufferBuilderFactory { long buildTime = endTime - startTime; long executeTime = executeEnd - executeStart; if (ENABLE_BUFFER_PERF_LOGGING) - ApiShared.LOGGER.info("Thread Build&Upload(" + numOfJobs + "/" + LOGGER.info("Thread Build&Upload(" + numOfJobs + "/" + (lodDim.getWidth() * lodDim.getWidth()) + (fullRegen ? "FULL" : "") + ") time: " + buildTime + " ms" + '\n' + "thread execute time: " + executeTime + " ms"); @@ -274,18 +278,18 @@ public class LodBufferBuilderFactory { } catch (Throwable ignored) { } } catch (TimeoutException te) { - ApiShared.LOGGER.error("LodBufferBuilder timed out: ", te); + LOGGER.error("LodBufferBuilder timed out: ", te); resetThreadPools(true); } } catch (RuntimeException e) { - ApiShared.LOGGER.error("\"LodNodeBufferBuilder.generateLodBuffersAsync\" ran into trouble: ", e); + LOGGER.error("\"LodNodeBufferBuilder.generateLodBuffersAsync\" ran into trouble: ", e); } } catch (InterruptedException ignored) { } finally { regionsListLock.unlock(); - if (ENABLE_EVENT_LOGGING) ApiShared.LOGGER.info("BufferBuilderStarter unlocked the region lock!"); + if (ENABLE_EVENT_LOGGING) LOGGER.info("BufferBuilderStarter unlocked the region lock!"); builderThreadRunning = false; } } @@ -326,7 +330,7 @@ public class LodBufferBuilderFactory { * May have to wait for the bufferLock to open. */ public void destroyBuffers() { - ApiShared.LOGGER.info("Destroying LodBufferBuilder..."); + LOGGER.info("Destroying LodBufferBuilder..."); mainGenThread.shutdownNow(); mainGenThread = Executors.newSingleThreadExecutor(mainGenThreadFactory); boolean locked = false; @@ -339,7 +343,7 @@ public class LodBufferBuilderFactory { } finally { if (locked) regionsListLock.unlock(); } - ApiShared.LOGGER.info("LodBufferBuilder destroyed."); + LOGGER.info("LodBufferBuilder destroyed."); } /** Get the newly created VBOs diff --git a/src/main/java/com/seibel/lod/core/builders/worldGeneration/BatchGenerator.java b/src/main/java/com/seibel/lod/core/builders/worldGeneration/BatchGenerator.java index 1c8e70a1b..83b6db277 100644 --- a/src/main/java/com/seibel/lod/core/builders/worldGeneration/BatchGenerator.java +++ b/src/main/java/com/seibel/lod/core/builders/worldGeneration/BatchGenerator.java @@ -19,11 +19,12 @@ package com.seibel.lod.core.builders.worldGeneration; -import com.seibel.lod.core.api.ApiShared; +import com.seibel.lod.core.api.internal.InternalApiShared; import com.seibel.lod.core.builders.lodBuilding.LodBuilder; import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.enums.config.GenerationPriority; import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; +import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.objects.PosToGenerateContainer; import com.seibel.lod.core.objects.lod.LodDimension; import com.seibel.lod.core.util.LevelPosUtil; @@ -34,9 +35,12 @@ import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IWorldWrapper; import com.seibel.lod.core.wrapperInterfaces.worldGeneration.AbstractBatchGenerationEnvionmentWrapper; import com.seibel.lod.core.wrapperInterfaces.worldGeneration.AbstractBatchGenerationEnvionmentWrapper.Steps; +import org.apache.logging.log4j.Logger; -public class BatchGenerator { +import java.lang.invoke.MethodHandles; +public class BatchGenerator +{ public static final boolean ENABLE_GENERATOR_STATS_LOGGING = false; private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); @@ -46,7 +50,8 @@ public class BatchGenerator { public LodDimension targetLodDim; public static final int generationGroupSize = 4; public static int previousThreadCount = CONFIG.client().advanced().threading()._getWorldGenerationThreadPoolSize(); - + private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); + private int estimatedSampleNeeded = 128; private int estimatedPointsToQueue = 1; @@ -55,7 +60,7 @@ public class BatchGenerator { targetLodDim = newLodDimension; generationGroup = FACTORY.createBatchGenerator(newLodBuilder, newLodDimension, world); MC.sendChatMessage("NOTE: You are currently using Distant Horizon's Batch Chunk Pre-Generator."); - ApiShared.LOGGER.info("Batch Chunk Generator initialized"); + LOGGER.info("Batch Chunk Generator initialized"); } @SuppressWarnings("unused") @@ -65,7 +70,7 @@ public class BatchGenerator { IWorldWrapper dim = LodUtil.getServerWorldFromDimension(lodDim.dimension); generationGroup = FACTORY.createBatchGenerator(lodBuilder, lodDim, dim); targetLodDim = lodDim; - ApiShared.LOGGER.info("1.18 Experimental Chunk Generator reinitialized"); + LOGGER.info("1.18 Experimental Chunk Generator reinitialized"); } DistanceGenerationMode mode = CONFIG.client().worldGenerator().getDistanceGenerationMode(); @@ -143,14 +148,14 @@ public class BatchGenerator { } if (ENABLE_GENERATOR_STATS_LOGGING) - ApiShared.LOGGER.info("WorldGen. Near:" + posToGenerate.getNumberOfNearPos() + " Far:" + LOGGER.info("WorldGen. Near:" + posToGenerate.getNumberOfNearPos() + " Far:" + posToGenerate.getNumberOfFarPos()); if (priority == GenerationPriority.FAR_FIRST || priority == GenerationPriority.BALANCED) { int nearCount = posToGenerate.getNumberOfNearPos(); int farCount = posToGenerate.getNumberOfFarPos(); if (ENABLE_GENERATOR_STATS_LOGGING) - ApiShared.LOGGER.info("WorldGen. Near:" + nearCount + " Far:" + farCount); + LOGGER.info("WorldGen. Near:" + nearCount + " Far:" + farCount); int maxIteration = Math.max(nearCount, farCount); for (int i = 0; i < maxIteration; i++) { @@ -225,11 +230,11 @@ public class BatchGenerator { if (targetToGenerate != toGenerate && ENABLE_GENERATOR_STATS_LOGGING) { if (toGenerate <= 0) { - ApiShared.LOGGER.info( + LOGGER.info( "WorldGenerator: Sampled " + posToGenerate.getNumberOfPos() + " out of " + estimatedSampleNeeded + " points, started all targeted " + targetToGenerate + " generations."); } else { - ApiShared.LOGGER.info("WorldGenerator: Sampled " + posToGenerate.getNumberOfPos() + " out of " + LOGGER.info("WorldGenerator: Sampled " + posToGenerate.getNumberOfPos() + " out of " + estimatedSampleNeeded + " points, started " + (targetToGenerate - toGenerate) + " out of targeted " + targetToGenerate + " generations."); } @@ -243,7 +248,7 @@ public class BatchGenerator { if (estimatedSampleNeeded > 32768) estimatedSampleNeeded = 32768; if (ENABLE_GENERATOR_STATS_LOGGING) - ApiShared.LOGGER.info("WorldGenerator: Increasing estimatedSampleNeeeded to " + estimatedSampleNeeded); + LOGGER.info("WorldGenerator: Increasing estimatedSampleNeeeded to " + estimatedSampleNeeded); } else if (toGenerate <= 0 && positionGoneThough * 1.5 < posToGenerate.getNumberOfPos()) { // We haven't gone though half of them and it's already enough. @@ -253,13 +258,13 @@ public class BatchGenerator { if (estimatedSampleNeeded < 4) estimatedSampleNeeded = 4; if (ENABLE_GENERATOR_STATS_LOGGING) - ApiShared.LOGGER.info("WorldGenerator: Decreasing estimatedSampleNeeeded to " + estimatedSampleNeeded); + LOGGER.info("WorldGenerator: Decreasing estimatedSampleNeeeded to " + estimatedSampleNeeded); } } public void stop(boolean blocking) { - ApiShared.LOGGER.info("1.18 Experimental Chunk Generator shutting down..."); + LOGGER.info("1.18 Experimental Chunk Generator shutting down..."); generationGroup.stop(blocking); } diff --git a/src/main/java/com/seibel/lod/core/handlers/LodDimensionFinder.java b/src/main/java/com/seibel/lod/core/handlers/LodDimensionFinder.java index 8519a4fd3..7b9d3ae51 100644 --- a/src/main/java/com/seibel/lod/core/handlers/LodDimensionFinder.java +++ b/src/main/java/com/seibel/lod/core/handlers/LodDimensionFinder.java @@ -21,7 +21,7 @@ package com.seibel.lod.core.handlers; import com.electronwill.nightconfig.core.file.CommentedFileConfig; -import com.seibel.lod.core.api.ApiShared; +import com.seibel.lod.core.api.internal.InternalApiShared; import com.seibel.lod.core.handlers.dimensionFinder.PlayerData; import com.seibel.lod.core.handlers.dimensionFinder.SubDimCompare; import com.seibel.lod.core.builders.lodBuilding.LodBuilder; @@ -48,7 +48,6 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.util.Arrays; -import java.util.Comparator; import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; @@ -133,11 +132,11 @@ public class LodDimensionFinder if (saveDir == null) return; - foundLodDimension = new LodDimension(dimensionTypeWrapper, ApiShared.lodBuilder.defaultDimensionWidthInRegions, saveDir); + foundLodDimension = new LodDimension(dimensionTypeWrapper, InternalApiShared.lodBuilder.defaultDimensionWidthInRegions, saveDir); } catch (IOException e) { - ApiShared.LOGGER.error("Unable to set the dimension file handler for dimension type [" + dimensionTypeWrapper.getDimensionName() + "]. Error: " + e.getMessage(), e); + LOGGER.error("Unable to set the dimension file handler for dimension type [" + dimensionTypeWrapper.getDimensionName() + "]. Error: " + e.getMessage(), e); } finally { @@ -242,7 +241,7 @@ public class LodDimensionFinder newlyLoadedDim.regions.set(playerRegionPos.x, playerRegionPos.z, new LodRegion(LodUtil.BLOCK_DETAIL_LEVEL, playerRegionPos, VERTICAL_QUALITY_TO_TEST_WITH)); // generate a LOD to test against - boolean lodGenerated = ApiShared.lodBuilder.generateLodNodeFromChunk(newlyLoadedDim, newlyLoadedChunk, new LodBuilderConfig(DistanceGenerationMode.FULL), true, true); + boolean lodGenerated = InternalApiShared.lodBuilder.generateLodNodeFromChunk(newlyLoadedDim, newlyLoadedChunk, new LodBuilderConfig(DistanceGenerationMode.FULL), true, true); if (!lodGenerated) return null; @@ -341,7 +340,7 @@ public class LodDimensionFinder // check if the block positions are close int playerBlockDist = testPlayerData.playerBlockPos.getManhattanDistance(playerData.playerBlockPos); - ApiShared.LOGGER.info("Player block position distance between saved sub dimension and first seen is [" + playerBlockDist + "]"); + LOGGER.info("Player block position distance between saved sub dimension and first seen is [" + playerBlockDist + "]"); // check if the chunk is actually empty diff --git a/src/main/java/com/seibel/lod/core/handlers/LodDimensionOldFileStructureHandler.java b/src/main/java/com/seibel/lod/core/handlers/LodDimensionOldFileStructureHandler.java index bc77f849e..f57974b59 100644 --- a/src/main/java/com/seibel/lod/core/handlers/LodDimensionOldFileStructureHandler.java +++ b/src/main/java/com/seibel/lod/core/handlers/LodDimensionOldFileStructureHandler.java @@ -23,28 +23,27 @@ import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.lang.invoke.MethodHandles; import java.util.ArrayList; import java.util.HashSet; -import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; -import java.util.concurrent.locks.ReentrantLock; -import com.seibel.lod.core.api.ApiShared; +import com.seibel.lod.core.api.internal.InternalApiShared; +import com.seibel.lod.core.logging.DhLoggerBuilder; import org.apache.commons.compress.compressors.xz.XZCompressorInputStream; -import com.google.common.util.concurrent.ThreadFactoryBuilder; -import com.seibel.lod.core.api.ClientApi; -import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.enums.config.VerticalQuality; import com.seibel.lod.core.objects.lod.RegionPos; import com.seibel.lod.core.objects.lod.VerticalLevelContainer; import com.seibel.lod.core.util.LodUtil; +import org.apache.logging.log4j.Logger; public class LodDimensionOldFileStructureHandler { - + private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); + /** This is the dimension that owns this file handler */ private final File dimensionDataSaveFolder; private final LodDimensionFileHandler newFileHandler; @@ -119,7 +118,7 @@ public class LodDimensionOldFileStructureHandler // the file we are reading is too old. // close the reader and delete the file. inputStream.close(); - ApiShared.LOGGER.info("Outdated LOD region file for region: (" + regionX + "," + regionZ + ")" + LOGGER.info("Outdated LOD region file for region: (" + regionX + "," + regionZ + ")" + " version found: " + fileVersion + ", version requested: " + LOD_SAVE_FILE_VERSION + ". this region file will not be read and merged into the new save structure."); @@ -131,7 +130,7 @@ public class LodDimensionOldFileStructureHandler // close the reader and ignore the file, we don't // want to accidentally delete anything the user may want. inputStream.close(); - ApiShared.LOGGER.info("Unexpected newer LOD region file for region: (" + regionX + "," + regionZ + ")" + LOGGER.info("Unexpected newer LOD region file for region: (" + regionX + "," + regionZ + ")" + " version found: " + fileVersion + ", version requested: " + LOD_SAVE_FILE_VERSION + " this region file will not be read and merged into the new save structure."); @@ -139,7 +138,7 @@ public class LodDimensionOldFileStructureHandler } else if (fileVersion < LOD_SAVE_FILE_VERSION) { - ApiShared.LOGGER.debug("Old LOD region file for region: (" + regionX + "," + regionZ + ")" + LOGGER.debug("Old LOD region file for region: (" + regionX + "," + regionZ + ")" + " version found: " + fileVersion + ", version requested: " + LOD_SAVE_FILE_VERSION + ". this region file be read, updated, and merged into the new save structure."); @@ -154,7 +153,7 @@ public class LodDimensionOldFileStructureHandler } catch (IOException ioEx) { - ApiShared.LOGGER.error("LOD file read error. Unable to read xz compressed file [" + file + "] error [" + ioEx.getMessage() + "]: "); + LOGGER.error("LOD file read error. Unable to read xz compressed file [" + file + "] error [" + ioEx.getMessage() + "]: "); ioEx.printStackTrace(); } } @@ -169,18 +168,18 @@ public class LodDimensionOldFileStructureHandler private void loadAndMergeAndSaveRegion(VerticalQuality verticalQuality, RegionPos regionPos) { - ApiShared.LOGGER.info("Merging region "+regionPos+" at "+verticalQuality+"..."); + LOGGER.info("Merging region "+regionPos+" at "+verticalQuality+"..."); TempLodRegion region = new TempLodRegion(verticalQuality, regionPos); - ApiShared.LOGGER.info("Reading data..."); + LOGGER.info("Reading data..."); loadGenModeToRegion(region, OldDistanceGenerationMode.FULL); loadGenModeToRegion(region, OldDistanceGenerationMode.FEATURES); loadGenModeToRegion(region, OldDistanceGenerationMode.SURFACE); loadGenModeToRegion(region, OldDistanceGenerationMode.BIOME_ONLY_SIMULATE_HEIGHT); loadGenModeToRegion(region, OldDistanceGenerationMode.BIOME_ONLY); loadGenModeToRegion(region, OldDistanceGenerationMode.NONE); - ApiShared.LOGGER.info("Writing data..."); + LOGGER.info("Writing data..."); saveRegion(region); - ApiShared.LOGGER.info("region "+regionPos+" at "+verticalQuality+" merged"); + LOGGER.info("region "+regionPos+" at "+verticalQuality+" merged"); } @@ -269,7 +268,7 @@ public class LodDimensionOldFileStructureHandler } catch (IOException e) { - ApiShared.LOGGER.warn("Unable to get the base save file path. Error: " + e.getMessage(), e); + LOGGER.warn("Unable to get the base save file path. Error: " + e.getMessage(), e); throw new RuntimeException("DistantHorizons Get Save File Path Failure"); } } diff --git a/src/main/java/com/seibel/lod/core/handlers/ReflectionHandler.java b/src/main/java/com/seibel/lod/core/handlers/ReflectionHandler.java index 1c5741bb6..f18d58a43 100644 --- a/src/main/java/com/seibel/lod/core/handlers/ReflectionHandler.java +++ b/src/main/java/com/seibel/lod/core/handlers/ReflectionHandler.java @@ -19,8 +19,10 @@ package com.seibel.lod.core.handlers; +import java.lang.invoke.MethodHandles; import java.lang.reflect.Field; +import com.seibel.lod.core.logging.DhLoggerBuilder; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -38,7 +40,7 @@ import com.seibel.lod.core.enums.rendering.FogDrawMode; */ public class ReflectionHandler implements IReflectionHandler { - private static final Logger LOGGER = LogManager.getLogger(ModInfo.NAME + "-" + ReflectionHandler.class.getSimpleName()); + private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); public static ReflectionHandler instance; diff --git a/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/ModAccessorHandler.java b/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/ModAccessorHandler.java index 4bd7d2368..ce1a9b936 100644 --- a/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/ModAccessorHandler.java +++ b/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/ModAccessorHandler.java @@ -19,8 +19,12 @@ package com.seibel.lod.core.handlers.dependencyInjection; -import com.seibel.lod.core.api.ApiShared; +import com.seibel.lod.core.api.internal.InternalApiShared; +import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.wrapperInterfaces.modAccessor.IModAccessor; +import org.apache.logging.log4j.Logger; + +import java.lang.invoke.MethodHandles; /** * This class takes care of dependency injection for mods accessors. (for mod compatibility @@ -37,6 +41,7 @@ import com.seibel.lod.core.wrapperInterfaces.modAccessor.IModAccessor; public class ModAccessorHandler { private static final DependencyHandler dependencyHandler = new DependencyHandler(); + private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); /** @@ -51,7 +56,7 @@ public class ModAccessorHandler throws IllegalStateException { dependencyHandler.bind(interfaceClass, modAccessor); - ApiShared.LOGGER.info("Registored mod comatibility accessor for " + modAccessor.getModName()); + LOGGER.info("Registored mod comatibility accessor for " + modAccessor.getModName()); } /** @@ -60,7 +65,7 @@ public class ModAccessorHandler * * @param class of the mod accessor * (inferred from the objectClass parameter) - * @param interfaceClass Interface of the mod accessor + * @param objectClass class of the mod accessor, must extend IModAccessor * @return the dependency of type T * @throws ClassCastException If the mod accessor isn't able to be cast to type T. * (this shouldn't normally happen, unless the bound object changed somehow) diff --git a/src/main/java/com/seibel/lod/core/logging/DhLoggerBuilder.java b/src/main/java/com/seibel/lod/core/logging/DhLoggerBuilder.java new file mode 100644 index 000000000..de759d173 --- /dev/null +++ b/src/main/java/com/seibel/lod/core/logging/DhLoggerBuilder.java @@ -0,0 +1,34 @@ +package com.seibel.lod.core.logging; + +import com.seibel.lod.core.ModInfo; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +/** + * Used to create loggers with specific names. + * + * @author James Seibel + * @version 2022-4-24 + */ +public class DhLoggerBuilder +{ + /** + * Creates a logger in the format
+ * "ModInfo.Name-className"
+ * For example:
+ * "DistantHorizons-ReflectionHandler"

+ * + * The suggested way to use this method is like this:

+ * + * private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); + *

+ * By using MethodHandles you don't have to manually enter the class name, + * Java figures that out for you. Even in a static context. + * + * @param className name of the class this logger will be named after. + */ + public static Logger getLogger(String className) + { + return LogManager.getLogger(ModInfo.NAME + "-" + className); + } +} diff --git a/src/main/java/com/seibel/lod/core/logging/SpamReducedLogger.java b/src/main/java/com/seibel/lod/core/logging/SpamReducedLogger.java index 6097b56ba..719e0a5c3 100644 --- a/src/main/java/com/seibel/lod/core/logging/SpamReducedLogger.java +++ b/src/main/java/com/seibel/lod/core/logging/SpamReducedLogger.java @@ -16,82 +16,123 @@ * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ - + package com.seibel.lod.core.logging; +import java.lang.invoke.MethodHandles; import java.lang.ref.WeakReference; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; -import com.seibel.lod.core.api.ApiShared; +import com.seibel.lod.core.api.internal.InternalApiShared; import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; -public class SpamReducedLogger { +public class SpamReducedLogger +{ + public static final Logger LOGGER = LogManager.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); + public static final List> loggers = Collections.synchronizedList(new LinkedList>()); - public static synchronized void flushAll() { - loggers.removeIf((logger) -> logger.get()==null); + + public static synchronized void flushAll() + { + loggers.removeIf((logger) -> logger.get() == null); loggers.forEach((logger) -> { SpamReducedLogger l = logger.get(); - if (l!=null) l.reset(); + if (l != null) + l.reset(); }); } - + private final int maxLogCount; private final AtomicInteger logTries = new AtomicInteger(0); - - public SpamReducedLogger(int maxLogPerSec) { + + public SpamReducedLogger(int maxLogPerSec) + { maxLogCount = maxLogPerSec; loggers.add(new WeakReference(this)); } - public void reset() {logTries.set(0);} - public boolean canMaybeLog() {return logTries.get() < maxLogCount;} - - public void log(Level level, String str, Object... param) { - if (logTries.get() >= maxLogCount) return; - ApiShared.LOGGER.log(level.isLessSpecificThan(Level.INFO) ? Level.INFO : level, str, param); + + public void reset() + { + logTries.set(0); } - - public void error(String str, Object... param) { + + public boolean canMaybeLog() + { + return logTries.get() < maxLogCount; + } + + public void log(Level level, String str, Object... param) + { + if (logTries.get() >= maxLogCount) + return; + LOGGER.log(level.isLessSpecificThan(Level.INFO) ? Level.INFO : level, str, param); + } + + public void error(String str, Object... param) + { log(Level.ERROR, str, param); } - public void warn(String str, Object... param) { + + public void warn(String str, Object... param) + { log(Level.WARN, str, param); } - public void info(String str, Object... param) { + + public void info(String str, Object... param) + { log(Level.INFO, str, param); } - public void debug(String str, Object... param) { + + public void debug(String str, Object... param) + { log(Level.DEBUG, str, param); } - public void trace(String str, Object... param) { + + public void trace(String str, Object... param) + { log(Level.TRACE, str, param); } - - public void incLogTries() { + + public void incLogTries() + { logTries.getAndIncrement(); } - - public void logInc(Level level, String str, Object... param) { - if (logTries.getAndIncrement() >= maxLogCount) return; - ApiShared.LOGGER.log(level.isLessSpecificThan(Level.INFO) ? Level.INFO : level, str, param); + + public void logInc(Level level, String str, Object... param) + { + if (logTries.getAndIncrement() >= maxLogCount) + return; + LOGGER.log(level.isLessSpecificThan(Level.INFO) ? Level.INFO : level, str, param); } - - public void errorInc(String str, Object... param) { + + public void errorInc(String str, Object... param) + { logInc(Level.ERROR, str, param); } - public void warnInc(String str, Object... param) { + + public void warnInc(String str, Object... param) + { logInc(Level.WARN, str, param); } - public void infoInc(String str, Object... param) { + + public void infoInc(String str, Object... param) + { logInc(Level.INFO, str, param); } - public void debugInc(String str, Object... param) { + + public void debugInc(String str, Object... param) + { logInc(Level.DEBUG, str, param); } - public void traceInc(String str, Object... param) { + + public void traceInc(String str, Object... param) + { logInc(Level.TRACE, str, param); } } \ No newline at end of file diff --git a/src/main/java/com/seibel/lod/core/objects/PosToRenderContainer.java b/src/main/java/com/seibel/lod/core/objects/PosToRenderContainer.java index e411e6cea..21c8b4ce0 100644 --- a/src/main/java/com/seibel/lod/core/objects/PosToRenderContainer.java +++ b/src/main/java/com/seibel/lod/core/objects/PosToRenderContainer.java @@ -19,11 +19,14 @@ package com.seibel.lod.core.objects; +import java.lang.invoke.MethodHandles; import java.util.Arrays; -import com.seibel.lod.core.api.ApiShared; +import com.seibel.lod.core.api.internal.InternalApiShared; +import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.util.LevelPosUtil; import com.seibel.lod.core.util.LodUtil; +import org.apache.logging.log4j.Logger; /** * Holds a levelPos that needs to be rendered. @@ -33,6 +36,8 @@ import com.seibel.lod.core.util.LodUtil; */ public class PosToRenderContainer { + private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); + public byte minDetail; private int regionPosX; private int regionPosZ; @@ -60,7 +65,7 @@ public class PosToRenderContainer { // This is might be due to dimensions having a different width // when first loading in - ApiShared.LOGGER.error("Unable to addPosToRender. numberOfPosToRender [" + numberOfPosToRender + "] detailLevel [" + detailLevel + "] Pos [" + posX + "," + posZ + "]"); + LOGGER.error("Unable to addPosToRender. numberOfPosToRender [" + numberOfPosToRender + "] detailLevel [" + detailLevel + "] Pos [" + posX + "," + posZ + "]"); numberOfPosToRender++; // incrementing so we can see how many pos over the limit we would go return; } diff --git a/src/main/java/com/seibel/lod/core/objects/lod/LodDimension.java b/src/main/java/com/seibel/lod/core/objects/lod/LodDimension.java index 95a86300d..79e2b8851 100644 --- a/src/main/java/com/seibel/lod/core/objects/lod/LodDimension.java +++ b/src/main/java/com/seibel/lod/core/objects/lod/LodDimension.java @@ -19,14 +19,15 @@ package com.seibel.lod.core.objects.lod; -import com.seibel.lod.core.api.ApiShared; -import com.seibel.lod.core.api.ClientApi; +import com.seibel.lod.core.api.internal.InternalApiShared; +import com.seibel.lod.core.api.internal.ClientApi; import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.enums.config.DropoffQuality; import com.seibel.lod.core.enums.config.GenerationPriority; import com.seibel.lod.core.enums.config.VerticalQuality; import com.seibel.lod.core.handlers.LodDimensionFileHandler; import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; +import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.logging.SpamReducedLogger; import com.seibel.lod.core.objects.Pos2D; import com.seibel.lod.core.objects.PosToGenerateContainer; @@ -35,8 +36,10 @@ import com.seibel.lod.core.util.gridList.MovableGridRingList; import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IDimensionTypeWrapper; +import org.apache.logging.log4j.Logger; import java.io.File; +import java.lang.invoke.MethodHandles; import java.util.Arrays; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -61,6 +64,7 @@ public class LodDimension { private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); + private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); public final IDimensionTypeWrapper dimension; @@ -167,14 +171,14 @@ public class LodDimension public synchronized void move(RegionPos regionOffset) { if (this.logEvents) - ApiShared.LOGGER.info("LodDim MOVE. Offset: "+regionOffset); + LOGGER.info("LodDim MOVE. Offset: "+regionOffset); saveDirtyRegionsToFile(false); //async add dirty regions to be saved. Pos2D p = regions.getCenter(); regions.move(p.x+regionOffset.x, p.y+regionOffset.z); if (this.logEvents) - ApiShared.LOGGER.info("LodDim MOVE complete. Offset: "+regionOffset); + LOGGER.info("LodDim MOVE complete. Offset: "+regionOffset); } @@ -326,7 +330,7 @@ public class LodDimension if (LodUtil.checkRamUsage(0.2, 128)) { if (this.logEvents) - ApiShared.LOGGER.info("Enough ram for expandOrLoadThread. Restarting..."); + LOGGER.info("Enough ram for expandOrLoadThread. Restarting..."); expandOrLoadPaused = false; } @@ -353,7 +357,7 @@ public class LodDimension if (!LodUtil.checkRamUsage(0.2, 128)) { if (this.logEvents) - ApiShared.LOGGER.warn("Not enough ram for expandOrLoadThread. Pausing until Ram is freed..."); + LOGGER.warn("Not enough ram for expandOrLoadThread. Pausing until Ram is freed..."); // We have less than 10% or 64MB ram left. Don't expend. expandOrLoadPaused = true; @@ -388,7 +392,7 @@ public class LodDimension { if (this.logEvents) { - ApiShared.LOGGER.error("MinDistance/MaxDistance is WRONG!!! minDist: [{}], maxDist: [{}], centerDist: [{}]\n" + LOGGER.error("MinDistance/MaxDistance is WRONG!!! minDist: [{}], maxDist: [{}], centerDist: [{}]\n" + "At center block pos: {} {}, region pos: {}", minDistance, maxDistance, debugDistance, debugRPosX, debugRPosZ, regionPos); } @@ -698,7 +702,7 @@ public class LodDimension if (r.isWriting.get() != 0) writingRegionCount++; LevelContainer[] container = r.debugGetDataContainers().clone(); if (container == null || container.length != LodUtil.DETAIL_OPTIONS) { - ApiShared.LOGGER.warn("DumpRamUsage encountered an invalid region!"); + LOGGER.warn("DumpRamUsage encountered an invalid region!"); continue; } for (int i = 0; i < LodUtil.DETAIL_OPTIONS; i++) { @@ -743,11 +747,11 @@ public class LodDimension boolean worked = cutAndExpandThread.awaitTermination(5, TimeUnit.SECONDS); if (!worked) - ApiShared.LOGGER.error("Cut And Expend threads timed out! May cause crash on game exit due to cleanup failure."); + LOGGER.error("Cut And Expend threads timed out! May cause crash on game exit due to cleanup failure."); } catch (InterruptedException e) { - ApiShared.LOGGER.error("Cut And Expend threads shutdown is interrupted! May cause crash on game exit due to cleanup failure: ", e); + LOGGER.error("Cut And Expend threads shutdown is interrupted! May cause crash on game exit due to cleanup failure: ", e); } } diff --git a/src/main/java/com/seibel/lod/core/objects/lod/LodWorld.java b/src/main/java/com/seibel/lod/core/objects/lod/LodWorld.java index 1899ed536..8e11bd8c7 100644 --- a/src/main/java/com/seibel/lod/core/objects/lod/LodWorld.java +++ b/src/main/java/com/seibel/lod/core/objects/lod/LodWorld.java @@ -19,11 +19,14 @@ package com.seibel.lod.core.objects.lod; +import java.lang.invoke.MethodHandles; import java.util.Hashtable; import java.util.Map; -import com.seibel.lod.core.api.ApiShared; +import com.seibel.lod.core.api.internal.InternalApiShared; +import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.wrapperInterfaces.world.IDimensionTypeWrapper; +import org.apache.logging.log4j.Logger; /** * This stores all LODs for a given world. @@ -33,6 +36,9 @@ import com.seibel.lod.core.wrapperInterfaces.world.IDimensionTypeWrapper; */ public class LodWorld { + private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); + + /** name of this world */ private String worldName; @@ -64,7 +70,7 @@ public class LodWorld */ public void selectWorld(String newWorldName) { - ApiShared.LOGGER.info("Selecting world {} while in world {}", newWorldName, worldName); + LOGGER.info("Selecting world {} while in world {}", newWorldName, worldName); if (worldName.equals(newWorldName)) // don't recreate everything if we // didn't actually change worlds @@ -85,7 +91,7 @@ public class LodWorld */ public void deselectWorld() { - ApiShared.LOGGER.info("Deselecting world {}", worldName); + LOGGER.info("Deselecting world {}", worldName); worldName = NO_WORLD_LOADED; saveAllDimensions(true); // Make sure all dims are saved. This will block threads lodDimensions = null; @@ -101,7 +107,7 @@ public class LodWorld { if (lodDimensions == null) return; - ApiShared.LOGGER.info("Adding dim {} to world {}", newDimension, worldName); + LOGGER.info("Adding dim {} to world {}", newDimension, worldName); LodDimension oldDim = lodDimensions.put(newDimension.dimension, newDimension); if (oldDim != null) @@ -144,7 +150,7 @@ public class LodWorld // TODO we should only print this if lods were actually saved to file // but that requires a LodDimension.hasDirtyRegions() method or something similar - ApiShared.LOGGER.info("Saving LODs"); + LOGGER.info("Saving LODs"); for (IDimensionTypeWrapper key : lodDimensions.keySet()) { diff --git a/src/main/java/com/seibel/lod/core/objects/opengl/SimpleRenderBuffer.java b/src/main/java/com/seibel/lod/core/objects/opengl/SimpleRenderBuffer.java index eb0b70bc5..13a1e7e0c 100644 --- a/src/main/java/com/seibel/lod/core/objects/opengl/SimpleRenderBuffer.java +++ b/src/main/java/com/seibel/lod/core/objects/opengl/SimpleRenderBuffer.java @@ -19,17 +19,20 @@ package com.seibel.lod.core.objects.opengl; +import java.lang.invoke.MethodHandles; import java.nio.ByteBuffer; import java.util.Iterator; import java.util.concurrent.TimeUnit; -import com.seibel.lod.core.api.ClientApi; +import com.seibel.lod.core.api.internal.ClientApi; +import com.seibel.lod.core.api.internal.InternalApiShared; import com.seibel.lod.core.builders.lodBuilding.bufferBuilding.LodQuadBuilder; +import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.render.LodRenderer; import com.seibel.lod.core.render.objects.GLVertexBuffer; +import org.apache.logging.log4j.Logger; import org.lwjgl.opengl.GL32; -import com.seibel.lod.core.api.ApiShared; import com.seibel.lod.core.builders.lodBuilding.bufferBuilding.LodBufferBuilderFactory; import com.seibel.lod.core.enums.config.GpuUploadMethod; import com.seibel.lod.core.handlers.dependencyInjection.SingletonHandler; @@ -44,6 +47,7 @@ import static com.seibel.lod.core.render.GLProxy.GL_LOGGER; public class SimpleRenderBuffer extends RenderBuffer { + private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); private static final long MAX_BUFFER_UPLOAD_TIMEOUT_NANOSECONDS = 1_000_000; @@ -137,7 +141,7 @@ public class SimpleRenderBuffer extends RenderBuffer } catch (Exception e) { vbos[i-1] = null; vbo.close(); - ApiShared.LOGGER.error("Failed to upload buffer: ", e); + LOGGER.error("Failed to upload buffer: ", e); } if (BPerNS<=0) continue; // upload buffers over an extended period of time diff --git a/src/main/java/com/seibel/lod/core/render/GLProxy.java b/src/main/java/com/seibel/lod/core/render/GLProxy.java index 6d83086f4..e9a563959 100644 --- a/src/main/java/com/seibel/lod/core/render/GLProxy.java +++ b/src/main/java/com/seibel/lod/core/render/GLProxy.java @@ -21,13 +21,15 @@ package com.seibel.lod.core.render; import java.io.FileNotFoundException; import java.io.PrintStream; +import java.lang.invoke.MethodHandles; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import com.seibel.lod.core.api.ApiShared; import com.seibel.lod.core.logging.ConfigBasedLogger; +import com.seibel.lod.core.logging.DhLoggerBuilder; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.lwjgl.glfw.GLFW; import org.lwjgl.opengl.GL; import org.lwjgl.opengl.GL11; @@ -66,12 +68,12 @@ public class GLProxy { public static final boolean OVERWIDE_VANILLA_GL_LOGGER = true; - private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); - - private ExecutorService workerThread = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat(GLProxy.class.getSimpleName() + "-Worker-Thread").build()); - private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); - + private static final IMinecraftClientWrapper MC = SingletonHandler.get(IMinecraftClientWrapper.class); + + private ExecutorService workerThread = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat(GLProxy.class.getSimpleName() + "-Worker-Thread").build()); + + private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); public static final ConfigBasedLogger GL_LOGGER = new ConfigBasedLogger(LogManager.getLogger(GLProxy.class), () -> CONFIG.client().advanced().debugging().debugSwitch().getLogRendererGLEvent()); @@ -463,18 +465,18 @@ public class GLProxy public static void ensureAllGLJobCompleted() { // Uses global logger since it's a cleanup method if (!hasInstance()) return; - ApiShared.LOGGER.info("Blocking until GL jobs finished..."); + LOGGER.info("Blocking until GL jobs finished..."); try { instance.workerThread.shutdown(); boolean worked = instance.workerThread.awaitTermination(30, TimeUnit.SECONDS); if (!worked) - ApiShared.LOGGER.error("GLWorkerThread shutdown timed out! Game may crash on exit due to cleanup failure!"); + LOGGER.error("GLWorkerThread shutdown timed out! Game may crash on exit due to cleanup failure!"); } catch (InterruptedException e) { - ApiShared.LOGGER.error("GLWorkerThread shutdown is interrupted! Game may crash on exit due to cleanup failure!"); + LOGGER.error("GLWorkerThread shutdown is interrupted! Game may crash on exit due to cleanup failure!"); e.printStackTrace(); } finally { instance.workerThread = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat(GLProxy.class.getSimpleName() + "-Worker-Thread").build()); } - ApiShared.LOGGER.info("All GL jobs finished!"); + LOGGER.info("All GL jobs finished!"); } } diff --git a/src/main/java/com/seibel/lod/core/render/objects/GLBuffer.java b/src/main/java/com/seibel/lod/core/render/objects/GLBuffer.java index 2916b637b..7a5fdfffe 100644 --- a/src/main/java/com/seibel/lod/core/render/objects/GLBuffer.java +++ b/src/main/java/com/seibel/lod/core/render/objects/GLBuffer.java @@ -1,20 +1,27 @@ package com.seibel.lod.core.render.objects; -import com.seibel.lod.core.api.ApiShared; +import com.seibel.lod.core.api.internal.InternalApiShared; import com.seibel.lod.core.enums.config.GpuUploadMethod; import com.seibel.lod.core.enums.rendering.GLProxyContext; +import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.render.GLProxy; import com.seibel.lod.core.util.UnitBytes; +import org.apache.logging.log4j.Logger; import org.lwjgl.opengl.GL32; import org.lwjgl.opengl.GL44; +import java.lang.invoke.MethodHandles; import java.nio.ByteBuffer; import java.util.concurrent.atomic.AtomicInteger; -public class GLBuffer implements AutoCloseable { +public class GLBuffer implements AutoCloseable +{ + private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); + public static final double BUFFER_EXPANSION_MULTIPLIER = 1.3; public static final double BUFFER_SHRINK_TRIGGER = BUFFER_EXPANSION_MULTIPLIER * BUFFER_EXPANSION_MULTIPLIER; public static AtomicInteger count = new AtomicInteger(0); + protected int id; public final int getId() { return id; @@ -29,11 +36,13 @@ public class GLBuffer implements AutoCloseable { } protected boolean isMapped = false; + public GLBuffer(boolean isBufferStorage) { create(isBufferStorage); } + // Should be override by subclasses public int getBufferBindingTarget() { return GL32.GL_COPY_READ_BUFFER; @@ -68,7 +77,8 @@ public class GLBuffer implements AutoCloseable { //firstCloseCallStack = Thread.currentThread().getStackTrace(); id = 0; size = 0; - if (count.decrementAndGet()==0) ApiShared.LOGGER.info("All GLBuffer is freed."); + if (count.decrementAndGet()==0) + LOGGER.info("All GLBuffer is freed."); } } diff --git a/src/main/java/com/seibel/lod/core/render/objects/QuadElementBuffer.java b/src/main/java/com/seibel/lod/core/render/objects/QuadElementBuffer.java index b6f2c2328..60ec0ccce 100644 --- a/src/main/java/com/seibel/lod/core/render/objects/QuadElementBuffer.java +++ b/src/main/java/com/seibel/lod/core/render/objects/QuadElementBuffer.java @@ -1,15 +1,21 @@ package com.seibel.lod.core.render.objects; -import com.seibel.lod.core.api.ApiShared; +import com.seibel.lod.core.api.internal.InternalApiShared; import com.seibel.lod.core.enums.config.GpuUploadMethod; +import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.render.GLProxy; +import org.apache.logging.log4j.Logger; import org.lwjgl.opengl.GL32; +import java.lang.invoke.MethodHandles; import java.nio.ByteBuffer; import java.nio.ByteOrder; -public class QuadElementBuffer extends GLElementBuffer { - +public class QuadElementBuffer extends GLElementBuffer +{ + private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); + + public QuadElementBuffer() { super(GLProxy.getInstance().bufferStorageSupported); } @@ -105,7 +111,7 @@ public class QuadElementBuffer extends GLElementBuffer { } else { type = GL32.GL_UNSIGNED_INT; } - ApiShared.LOGGER.info("Quad IBO Resizing from [" + getCapacity() + "] to [" + quadCount + "]" + " with type: " + + LOGGER.info("Quad IBO Resizing from [" + getCapacity() + "] to [" + quadCount + "]" + " with type: " + GLEnums.getString(type)); ByteBuffer buffer = ByteBuffer.allocateDirect(indicesCount * GLEnums.getTypeSize(type)).order(ByteOrder.nativeOrder()); diff --git a/src/main/java/com/seibel/lod/core/util/GLMessage.java b/src/main/java/com/seibel/lod/core/util/GLMessage.java index b08d37fc0..0fbcebba9 100644 --- a/src/main/java/com/seibel/lod/core/util/GLMessage.java +++ b/src/main/java/com/seibel/lod/core/util/GLMessage.java @@ -19,13 +19,18 @@ package com.seibel.lod.core.util; -import com.seibel.lod.core.api.ApiShared; -import org.lwjgl.system.CallbackI; +import com.seibel.lod.core.api.internal.InternalApiShared; +import com.seibel.lod.core.logging.DhLoggerBuilder; +import org.apache.logging.log4j.Logger; +import java.lang.invoke.MethodHandles; import java.util.HashMap; import java.util.function.Function; -public final class GLMessage { +public final class GLMessage +{ + private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); + static final String HEADER = "[LWJGL] OpenGL debug message"; public final GLMessage.Type type; public final GLMessage.Severity severity; @@ -176,7 +181,7 @@ public final class GLMessage { return msg; } } else if (!b) { - ApiShared.LOGGER.warn("Failed to parse GLMessage line '{}' at stage {}", str, stage); + LOGGER.warn("Failed to parse GLMessage line '{}' at stage {}", str, stage); } return null; } diff --git a/src/main/java/com/seibel/lod/core/util/LodThreadFactory.java b/src/main/java/com/seibel/lod/core/util/LodThreadFactory.java index 96585631e..297e18496 100644 --- a/src/main/java/com/seibel/lod/core/util/LodThreadFactory.java +++ b/src/main/java/com/seibel/lod/core/util/LodThreadFactory.java @@ -19,12 +19,14 @@ package com.seibel.lod.core.util; +import java.lang.invoke.MethodHandles; import java.lang.ref.WeakReference; import java.util.LinkedList; import java.util.concurrent.ThreadFactory; -import com.seibel.lod.core.api.ApiShared; -import com.seibel.lod.core.api.ClientApi; +import com.seibel.lod.core.api.internal.InternalApiShared; +import com.seibel.lod.core.logging.DhLoggerBuilder; +import org.apache.logging.log4j.Logger; /** * Just a simple ThreadFactory to name ExecutorService @@ -34,6 +36,8 @@ import com.seibel.lod.core.api.ClientApi; */ public class LodThreadFactory implements ThreadFactory { + private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName()); + public final String threadName; public final int priority; private int threadCount = 0; @@ -74,7 +78,7 @@ public class LodThreadFactory implements ThreadFactory if (t != null) { StackTraceElement[] stacks = t.getStackTrace(); if (stacks.length != 0) { - ApiShared.LOGGER.info("===========================================\n" + LOGGER.info("===========================================\n" + "Thread: "+t.getName()+"\n"+StackTraceToString(stacks)); } }