diff --git a/src/main/java/net/halbear/Executable/Init.java b/src/main/java/net/halbear/Executable/Init.java index 9fe7a37..138f35c 100644 --- a/src/main/java/net/halbear/Executable/Init.java +++ b/src/main/java/net/halbear/Executable/Init.java @@ -8,7 +8,7 @@ public class Init { public static void main(String[] args){ Logger.info("Launching Software"); var GameEngine = new PrimaryRuntime("Terrain4J", new GameCore()); - GameEngine.run(); Logger.info("Launched Engine"); + GameEngine.run(); } } 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 4cb6ff4..2e69d98 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineConfig.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineConfig.java @@ -33,15 +33,19 @@ public class EngineConfig { private EngineConfig() { var EngineConfig = new Properties(); Path path = Paths.get(""); - InputStream stream = EngineConfig.class.getResourceAsStream(path.toAbsolutePath().toString() + "/" + FILENAME); + InputStream stream = EngineConfig.class.getResourceAsStream("/" + FILENAME); boolean SuccessfulLoad = false; if (stream != null) { try { EngineConfig.load(stream); SuccessfulLoad = true; + Logger.debug("File [{}] read", FILENAME); } catch (IOException excp) { Logger.error("File [{}] not read", FILENAME, excp); } + } else{ + Logger.debug("FileStream for file [{}] is null, Filepath [{}] not found", FILENAME,path.toAbsolutePath().toString() + "/" + FILENAME); + } if (SuccessfulLoad){ PhysicalDeviceName = EngineConfig.getOrDefault("PhysicalDeviceName", DEFAULT_ACCURACY).toString(); @@ -58,8 +62,9 @@ public class EngineConfig { } } else{ try { + EngineConfig.setProperty("vkValidated", "true"); EngineConfig.setProperty("frame_accuracy", "0"); - EngineConfig.setProperty("main_tick_rate", "60"); + EngineConfig.setProperty("main_tick_rate", "120"); EngineConfig.setProperty("display_width", "640"); EngineConfig.setProperty("display_height", "480"); EngineConfig.setProperty("vsync", "false"); 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 7580474..0e1da70 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/PrimaryRuntime.java @@ -55,7 +55,7 @@ public class PrimaryRuntime { } if (SecondCounter >= 1000000000){ SecondCounter = 0; - System.out.println("FPS: " + Frames + " Ticks: " + TickFrames); + //System.out.println("FPS: " + Frames + " Ticks: " + TickFrames); EngineConfig.FrameRate_PRIMARYTHREAD = Frames; EngineConfig.FrameRate_RENDER = EngineConfig.RENDERFRAMES; EngineConfig.TPS = TickFrames; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/ImageView.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/ImageView.java new file mode 100644 index 0000000..c49b815 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/ImageView.java @@ -0,0 +1,4 @@ +package net.halbear.Terrain4J.EngineCore.Vulkan.Structure; + +public class ImageView { +} diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/Surface.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/Surface.java index 5db4379..175f90e 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/Surface.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/Surface.java @@ -21,9 +21,7 @@ public class Surface { private final SurfaceFormat SurfaceFormatVar; private final long VulkanSurface; - public record SurfaceFormat(int ImageFormat, int ColourSpace){ - - } + public record SurfaceFormat(int ImageFormat, int ColourSpace){} public Surface(VulkanInstance VkInstance, PhysicalDevice PhysDevice, Window window){ Logger.debug("Creating Vulkan Surface"); diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/SwapChain.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/SwapChain.java new file mode 100644 index 0000000..a96fb70 --- /dev/null +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/SwapChain.java @@ -0,0 +1,72 @@ +package net.halbear.Terrain4J.EngineCore.Vulkan.Structure; + +import net.halbear.Terrain4J.EngineCore.Display.Window; +import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.vulkan.*; +import org.tinylog.Logger; + +import java.nio.LongBuffer; + +import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck; +import static org.lwjgl.vulkan.VK10.VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; + +public class SwapChain { + private final ImageView[] ImageViewArray; + private final int ImageCount; + private final VkExtent2D SwapChainExtent; + private final long VulkanSwapChain; + + public SwapChain(Window window, Device device, Surface surface, int RequestedImages, boolean VSYNC){ + Logger.debug("Creating Vulkan SwapChain"); + try(var MemStack = MemoryStack.stackPush()){ + VkSurfaceCapabilitiesKHR SurfaceCapabilities = surface.GetSurfaceCapabilities(); + int requestedImages = CalculateImageCount(SurfaceCapabilities, RequestedImages); + SwapChainExtent = CalculateSwapChainExtent(window, SurfaceCapabilities); + + Surface.SurfaceFormat surfaceFormat = surface.GetSurfaceFormat(); + var VulkanSwapChainCreateInfo = VkSwapchainCreateInfoKHR.calloc(MemStack) + .sType$Default() + .surface(surface.GetVkSurface()) + .minImageCount(requestedImages) + .imageFormat(surfaceFormat.ImageFormat()) + .imageColorSpace(surfaceFormat.ColourSpace()) + .imageExtent(SwapChainExtent) + .imageArrayLayers(1) + .imageUsage(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) + .preTransform(SurfaceCapabilities.currentTransform()) + .compositeAlpha(KHRSurface.VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR) + .clipped(true); + if (VSYNC){ + VulkanSwapChainCreateInfo.presentMode(KHRSurface.VK_PRESENT_MODE_FIFO_KHR); + } else{ + VulkanSwapChainCreateInfo.presentMode(KHRSurface.VK_PRESENT_MODE_IMMEDIATE_KHR); + } + + LongBuffer LongPointer = MemStack.mallocLong(1); + vkCheck(KHRSwapchain.vkCreateSwapchainKHR(device.FetchVulkanDevice(),VulkanSwapChainCreateInfo, null, LongPointer), "Failed to create vulkan Swap Chain"); + VulkanSwapChain = LongPointer.get(0); + + ImageViewArray = CreateImageViews(MemStack, device, VulkanSwapChain, surfaceFormat.ImageFormat()); + ImageCount = ImageViewArray.length; + } + } + + public static int CalculateImageCount(VkSurfaceCapabilitiesKHR SurfaceCapabilities, int RequestedImages){ + int MaxImages = SurfaceCapabilities.maxImageCount(); + int MinImages = SurfaceCapabilities.minImageCount(); + int result = MinImages; + if(MaxImages != 0){ + return Math.min(RequestedImages, MaxImages); + } + result = Math.max(result, MinImages); + Logger.debug("Requested Image Count: [{}]\nReceived [{}] Images\nSurfaceCapabilities-> MaxImgs:[{}] MinImgs:[{}] ",RequestedImages,result,MaxImages,MinImages); + return result; + } + public static VkExtent2D CalculateSwapChainExtent(Window window, VkSurfaceCapabilitiesKHR SurfaceCapabilities){ + return null; //finish later + } + public static ImageView[] CreateImageViews(MemoryStack MemStack, Device device, long SwapChain, int Format){ + return null; //finish later + } +} diff --git a/terrain4j.properties b/terrain4j.properties index 04404fb..ad2aa2d 100644 --- a/terrain4j.properties +++ b/terrain4j.properties @@ -1,8 +1,8 @@ #created new properties file -#Thu Jan 15 13:32:39 GMT 2026 +#Tue Jan 20 08:16:32 GMT 2026 display_height=480 display_width=640 frame_accuracy=0 main_tick_rate=120 -vsync=false vkValidated=true +vsync=false