Replace the ApiShared Logger with class specific loggers
This should make the logs easier to understand.
This commit is contained in:
+17
-13
@@ -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<RenderRegion>(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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
+15
-16
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
+8
-3
@@ -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 <T> 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)
|
||||
|
||||
@@ -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 <br>
|
||||
* "ModInfo.Name-className" <br>
|
||||
* For example: <br>
|
||||
* "DistantHorizons-ReflectionHandler" <br><br>
|
||||
*
|
||||
* The suggested way to use this method is like this: <br><br>
|
||||
* <code>
|
||||
* private static final Logger LOGGER = DhLoggerBuilder.getLogger(MethodHandles.lookup().lookupClass().getSimpleName());
|
||||
* </code> <br><br>
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
@@ -16,82 +16,123 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
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<WeakReference<SpamReducedLogger>> loggers
|
||||
= Collections.synchronizedList(new LinkedList<WeakReference<SpamReducedLogger>>());
|
||||
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<SpamReducedLogger>(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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user