From 44845f781d1a8536b5299bc4833896edf7087da0 Mon Sep 17 00:00:00 2001 From: Halbear Date: Wed, 21 Jan 2026 19:37:37 +0000 Subject: [PATCH] call me a millionaire because i've got 1456477fps --- .../java/net/halbear/Executable/Init.java | 4 ++-- .../Terrain4J/EngineCore/Display/Window.java | 8 ++++++-- .../EngineCore/Logic/EngineConfig.java | 20 ++++++++++++------- .../Terrain4J/EngineCore/Logic/GameLogic.java | 4 ++-- .../Terrain4J/EngineCore/Main/GameCore.java | 4 ++-- .../EngineCore/Main/PrimaryRuntime.java | 14 +++++++++---- .../Vulkan/Structure/DeviceLayers/Device.java | 2 +- ...perties => DefaultEngineConfig.properties} | 0 src/main/resources/tinylog.properties | 5 +++++ terrain4j.properties | 2 +- 10 files changed, 42 insertions(+), 21 deletions(-) rename src/main/resources/{terrain4j.properties => DefaultEngineConfig.properties} (100%) create mode 100644 src/main/resources/tinylog.properties diff --git a/src/main/java/net/halbear/Executable/Init.java b/src/main/java/net/halbear/Executable/Init.java index 138f35c..5568a6c 100644 --- a/src/main/java/net/halbear/Executable/Init.java +++ b/src/main/java/net/halbear/Executable/Init.java @@ -6,9 +6,9 @@ import org.tinylog.Logger; public class Init { public static void main(String[] args){ - Logger.info("Launching Software"); + Logger.info("\nLaunching New Terrain4J Powered Software!"); var GameEngine = new PrimaryRuntime("Terrain4J", new GameCore()); - Logger.info("Launched Engine"); + Logger.info("Launched Terrain4J Engine"); GameEngine.run(); } } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Window.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Window.java index 1a69acf..95e6ed0 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Window.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Window.java @@ -5,6 +5,7 @@ import net.halbear.Terrain4J.EngineCore.Input.MouseListener; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import org.lwjgl.glfw.GLFWVidMode; import org.lwjgl.system.MemoryUtil; +import org.tinylog.Logger; import static org.lwjgl.glfw.Callbacks.glfwFreeCallbacks; import static org.lwjgl.glfw.GLFW.*; @@ -16,7 +17,7 @@ public class Window { private final MouseListener mouseInput; private int height; private int width; - private boolean displayFPS = true; + private boolean displayFPS = false; public Window(String title){ if (!glfwInit()) { @@ -69,7 +70,6 @@ public class Window { return mouseInput; } public void pollEvents() { - if (displayFPS) glfwSetWindowTitle(handle, "Terrain 4J Engine - FPS: " + EngineConfig.FrameRate_PRIMARYTHREAD + " TPS: " + EngineConfig.TPS + " RenderFPS: " + EngineConfig.FrameRate_RENDER + " VSYNC: " + EngineConfig.VSYNC); if (keyboardInput.keySinglePress(GLFW_KEY_V)) { SetVsync(); } @@ -77,7 +77,11 @@ public class Window { mouseInput.input(); EngineConfig.RENDERFRAMES++; } + public void UpdateWindowTitle(){ + if (displayFPS) glfwSetWindowTitle(handle, EngineConfig.SOFTWARE_TITLE + " - FPS: " + EngineConfig.FrameRate_PRIMARYTHREAD + " TPS: " + EngineConfig.TPS + " RenderFPS: " + EngineConfig.FrameRate_RENDER + " VSYNC: " + EngineConfig.VSYNC); + } public void SetVsync(){ + Logger.info("Vsync Swap"); if (EngineConfig.VSYNC) { glfwSwapInterval(0); EngineConfig.VSYNC = false; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineConfig.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineConfig.java index 88adcdc..9d99c18 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineConfig.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineConfig.java @@ -1,6 +1,7 @@ package net.halbear.Terrain4J.EngineCore.Logic; import org.tinylog.Logger; +import org.tinylog.core.TinylogLoggingConfiguration; import java.io.*; import java.nio.file.Path; @@ -13,7 +14,7 @@ public class EngineConfig { private static final int DEFAULT_WIDTH = 640; private static final int DEFAULT_HEIGHT = 480; private static final String FILENAME = "terrain4j.properties"; - private static String SOFTWARE_TITLE; + public static String SOFTWARE_TITLE; private static EngineConfig instance; private long accuracy; private int TickRate; @@ -44,7 +45,6 @@ public class EngineConfig { Logger.error("File [{}] not read", FILENAME, excp); } try { - assert stream != null; stream.close(); } catch(IOException excp) { Logger.error("stream unable to be closed", excp); @@ -53,12 +53,18 @@ public class EngineConfig { Logger.error("FileStream for file [{}] is null, Error: [{}]", ConfigFile.getAbsolutePath(),error); } if (!SuccessfulLoad){ - InputStream NewStream = (EngineConfig.class.getResourceAsStream("terrain4j.properties")); + InputStream NewStream = (EngineConfig.class.getResourceAsStream("DefaultEngineConfig.properties")); try { EngineConfigVar.load(NewStream); SuccessfulLoad = true; } catch (IOException error){ - Logger.error("FileStream for file [{}] is null, Error: [{}]", "terrain4j.properties",error); + Logger.error("FileStream for file [{}] is null", "DefaultEngineConfig.properties",error); + } + try { + assert NewStream != null; + NewStream.close(); + } catch (IOException error){ + Logger.error("FileStream Failed to close",error); } } if(SuccessfulLoad) { @@ -87,10 +93,9 @@ public class EngineConfig { } catch (IOException excp2) { Logger.error("File [{}] not written", FILENAME, excp2); } - } else{ - Logger.debug("Config File [{}] exists but was unable to be loaded",ConfigFile.getAbsolutePath()); + } else { + Logger.debug("Config File [{}] exists but was unable to be loaded", ConfigFile.getAbsolutePath()); } - } public boolean VkValidated(){ @@ -99,6 +104,7 @@ public class EngineConfig { public static synchronized EngineConfig getInstance() { if (instance == null) { + instance = new EngineConfig(); } return instance; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/GameLogic.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/GameLogic.java index a69ae27..ab417c9 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/GameLogic.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/GameLogic.java @@ -3,6 +3,6 @@ package net.halbear.Terrain4J.EngineCore.Logic; public interface GameLogic { void cleanup(); void Initialise(EngineInstance engineInstance); - void Input(EngineInstance engineInstance, long diffMS); - void Update(EngineInstance engineInstance, long diffMS); + void Input(EngineInstance engineInstance, long FrameDiffNanoSeconds); + void Update(EngineInstance engineInstance, long FrameDiffNanoSeconds); } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/GameCore.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/GameCore.java index f313967..5d5ee70 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/GameCore.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/GameCore.java @@ -15,12 +15,12 @@ public class GameCore implements GameLogic { } @Override - public void Input(EngineInstance engineInstance, long diffMS) { + public void Input(EngineInstance engineInstance, long FrameDiffNanoSeconds) { } @Override - public void Update(EngineInstance engineInstance, long diffMS) { + public void Update(EngineInstance engineInstance, long FrameDiffNanoSeconds) { } } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.java index 0e1da70..7432bb2 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.java @@ -5,6 +5,7 @@ import net.halbear.Terrain4J.EngineCore.Display.Window; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; import net.halbear.Terrain4J.EngineCore.Logic.GameLogic; +import org.tinylog.Logger; public class PrimaryRuntime { private final EngineInstance engineInstance; @@ -13,6 +14,7 @@ public class PrimaryRuntime { private Window window; private int Frames = 0; private int TickFrames = 0; + private double TickRate = 0; public PrimaryRuntime(String windowTitle, GameLogic appLogic) { this.gameLogic = appLogic; @@ -29,6 +31,9 @@ public class PrimaryRuntime { public EngineInstance getEngineInstance() { return engineInstance; } + public void UpdateTickRate(){ + TickRate = (double) 1000000000 / (double) EngineConfig.getInstance().getTickRate(); + } public void run(){ long InitialTime = System.nanoTime(); long updateTime = InitialTime; @@ -36,6 +41,7 @@ public class PrimaryRuntime { double TickDiff =0; double SecondCounter =0; double tickDiff = 0; + TickRate = (double) 1000000000 / (double) EngineConfig.getInstance().getTickRate(); while (!window.shouldClose()){ long now = System.nanoTime(); tickDiff = now - InitialTime; @@ -44,24 +50,24 @@ public class PrimaryRuntime { SecondCounter += tickDiff; if (FrameDiff >= EngineConfig.getInstance().getAccuracy()){ window.pollEvents(); - gameLogic.Input(engineInstance, (now - InitialTime)/ 1000000); + gameLogic.Input(engineInstance, (now - InitialTime)); Frames++; - if (TickDiff/1000 >= (double) 1000000 / (double) EngineConfig.getInstance().getTickRate()) { + if (TickDiff >= TickRate) { TickFrames++; long nsTimeDiff = now - updateTime; - gameLogic.Update(engineInstance, nsTimeDiff / 1000000); + gameLogic.Update(engineInstance, nsTimeDiff); updateTime = now; TickDiff = 0; } if (SecondCounter >= 1000000000){ SecondCounter = 0; - //System.out.println("FPS: " + Frames + " Ticks: " + TickFrames); EngineConfig.FrameRate_PRIMARYTHREAD = Frames; EngineConfig.FrameRate_RENDER = EngineConfig.RENDERFRAMES; EngineConfig.TPS = TickFrames; Frames = 0; TickFrames = 0; EngineConfig.RENDERFRAMES = 0; + Logger.info("FPS: " + EngineConfig.FrameRate_PRIMARYTHREAD + " TPS: " + EngineConfig.TPS + " RenderFPS: " + EngineConfig.FrameRate_RENDER); } render.render(engineInstance); FrameDiff = 0; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/Device.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/Device.java index 3e3fc2c..6d3ae8f 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/Device.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/DeviceLayers/Device.java @@ -82,7 +82,7 @@ public class Device { VkExtensionProperties Properties = PropertiesBuffer.get(i); String ExtensionName = Properties.extensionNameString(); DeviceExtensions.add(ExtensionName); - Logger.trace("[{}] is a supported extension", ExtensionCount); + Logger.trace("[{}] is a supported extension", ExtensionName); } } } diff --git a/src/main/resources/terrain4j.properties b/src/main/resources/DefaultEngineConfig.properties similarity index 100% rename from src/main/resources/terrain4j.properties rename to src/main/resources/DefaultEngineConfig.properties diff --git a/src/main/resources/tinylog.properties b/src/main/resources/tinylog.properties new file mode 100644 index 0000000..dfc3ef6 --- /dev/null +++ b/src/main/resources/tinylog.properties @@ -0,0 +1,5 @@ +writer = file +writer.file = LastSession.t4jlog +writer.format = {date: DD:MM:YYYY} {date: HH:mm:ss.SSS} {level}: {message} +writer.level = trace +writingthread = true \ No newline at end of file diff --git a/terrain4j.properties b/terrain4j.properties index 2aada15..7167f8b 100644 --- a/terrain4j.properties +++ b/terrain4j.properties @@ -10,7 +10,7 @@ main_tick_rate=120 #Vulkan Debugging toggle vkValidated=true -vsync=false +vsync=true #This is the name of the GPU you want the engine to use PhysicalDeviceName= #Title that shows up on app window