Queues started

This commit is contained in:
Harrison Corlett 2026-01-19 14:55:26 +00:00
parent 934f949881
commit 20d0867755
3 changed files with 144 additions and 0 deletions

View file

@ -0,0 +1,101 @@
package net.halbear.Terrain4J.EngineCore.Logic;
import org.tinylog.Logger;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Properties;
public class EngineConfig {
private static final long DEFAULT_ACCURACY = 0;
private static final int DEFAULT_TICKRATE = 60;
private static final int DEFAULT_WIDTH = 640;
private static final int DEFAULT_HEIGHT = 480;
private static final String FILENAME = "terrain4j.properties";
private static EngineConfig instance;
private long accuracy;
private int TickRate;
private int Width;
private int Height;
public static int FrameRate_PRIMARYTHREAD =0;
public static int TPS =0;
public static int FrameRate_MAINENGINETHREAD =0;
public static int FrameRate_RENDER =0;
public static int RENDERFRAMES =0;
public static boolean VSYNC = false;
private boolean vkValidated;
private String PhysicalDeviceName;
private EngineConfig() {
var EngineConfig = new Properties();
Path path = Paths.get("");
InputStream stream = EngineConfig.class.getResourceAsStream(path.toAbsolutePath().toString() + "/" + FILENAME);
boolean SuccessfulLoad = false;
if (stream != null) {
try {
EngineConfig.load(stream);
SuccessfulLoad = true;
} catch (IOException excp) {
Logger.error("File [{}] not read", FILENAME, excp);
}
}
if (SuccessfulLoad){
PhysicalDeviceName = EngineConfig.getOrDefault("PhysicalDeviceName", DEFAULT_ACCURACY).toString();
accuracy = Long.parseLong(EngineConfig.getOrDefault("frame_accuracy", DEFAULT_ACCURACY).toString());
TickRate = Integer.parseInt(EngineConfig.getOrDefault("main_tick_rate", DEFAULT_TICKRATE).toString());
Width = Integer.parseInt(EngineConfig.getOrDefault("display_width", DEFAULT_TICKRATE).toString());
Height = Integer.parseInt(EngineConfig.getOrDefault("display_height", DEFAULT_TICKRATE).toString());
VSYNC = Boolean.parseBoolean(EngineConfig.getOrDefault("vsync", false).toString());
try {
assert stream != null;
stream.close();
} catch(IOException excp) {
Logger.error("stream unable to be closed", excp);
}
} else{
try {
EngineConfig.setProperty("frame_accuracy", "0");
EngineConfig.setProperty("main_tick_rate", "60");
EngineConfig.setProperty("display_width", "640");
EngineConfig.setProperty("display_height", "480");
EngineConfig.setProperty("vsync", "false");
EngineConfig.store(new FileWriter(path.toAbsolutePath().toString() + "/" + FILENAME), "created new properties file");
} catch (IOException excp2) {
Logger.error("File [{}] not written", FILENAME, excp2);
}
accuracy = DEFAULT_ACCURACY;
TickRate = DEFAULT_TICKRATE;
}
vkValidated = Boolean.parseBoolean(EngineConfig.getOrDefault("vkValidated", false).toString());
}
public boolean VkValidated(){
return vkValidated;
}
public static synchronized EngineConfig getInstance() {
if (instance == null) {
instance = new EngineConfig();
}
return instance;
}
public int getWidth(){
return Width;
}
public int getHeight(){
return Height;
}
public long getAccuracy() {
return accuracy;
}
public int getTickRate() {
return TickRate;
}
public String GetPhysicalDeviceName(){
return PhysicalDeviceName;
}
}

View file

@ -1,15 +1,36 @@
package net.halbear.Terrain4J.EngineCore.Logic; package net.halbear.Terrain4J.EngineCore.Logic;
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device;
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.PhysicalDevice;
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.Surface;
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.VulkanInstance; import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.VulkanInstance;
public class VulkanContext { public class VulkanContext {
private final VulkanInstance Instance; private final VulkanInstance Instance;
private final Device device;
private Surface surface;
private final PhysicalDevice PhysDevice;
public VulkanContext(){ public VulkanContext(){
var EngineGlobals = EngineConfig.getInstance(); var EngineGlobals = EngineConfig.getInstance();
Instance = new VulkanInstance(EngineGlobals.VkValidated()); Instance = new VulkanInstance(EngineGlobals.VkValidated());
PhysDevice = PhysicalDevice.createPhysicalDevice(Instance,EngineGlobals.getPhysDeviceName());
} }
public void cleanup(){ public void cleanup(){
surface.cleanup(Instance);
device.cleanup();
PhysDevice.cleanup();
Instance.cleanup(); Instance.cleanup();
} }
public Device GetDevice(){
return device;
}
public PhysicalDevice GetPhysicalDevice(){
return PhysDevice;
}
public Surface GetSurface(){
return surface;
}
} }

View file

@ -1,4 +1,26 @@
package net.halbear.Terrain4J.EngineCore.Vulkan.Structure; package net.halbear.Terrain4J.EngineCore.Vulkan.Structure;
import net.halbear.Terrain4J.EngineCore.Logic.VulkanContext;
import org.lwjgl.PointerBuffer;
import org.lwjgl.system.MemoryStack;
import org.lwjgl.vulkan.VkQueue;
import org.tinylog.Logger;
import static org.lwjgl.vulkan.VK13.*;
public class Queue { public class Queue {
private final int QueueFamilyIndex;
private final VkQueue VulkanQueue;
public Queue(VulkanContext vkContext, int QueueFamilyIndex, int QueueIndex){
Logger.debug("Vulkan: Creating A Queue");
this.QueueFamilyIndex = QueueFamilyIndex;
try(var MemStack = MemoryStack.stackPush()){
PointerBuffer QueuePointer = MemStack.mallocPointer(1);
vkGetDeviceQueue(vkContext.GetDevice().FetchVulkanDevice(), QueueFamilyIndex, QueueIndex, QueuePointer);
long Queue = QueuePointer.get(0);
VulkanQueue = new VkQueue(Queue, vkContext.GetDevice().FetchVulkanDevice());
}
}
} }