It crashes
This commit is contained in:
parent
c2aa4ec895
commit
66783c4cc5
24 changed files with 27993 additions and 82 deletions
BIN
resources/Models/Cube/cube.idx
Normal file
BIN
resources/Models/Cube/cube.idx
Normal file
Binary file not shown.
15
resources/Models/Cube/cube.json
Normal file
15
resources/Models/Cube/cube.json
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"id": "cube",
|
||||||
|
"meshes": [
|
||||||
|
{
|
||||||
|
"id": "cubemtl_0",
|
||||||
|
"material_id": "cube-mat-1",
|
||||||
|
"offset_vtx": 0,
|
||||||
|
"vtx_size": 480,
|
||||||
|
"offset_idx": 0,
|
||||||
|
"idx_size": 144
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vtx_path": "resources/models/cube/cube.vtx",
|
||||||
|
"idx_path": "resources/models/cube/cube.idx"
|
||||||
|
}
|
||||||
5
resources/Models/Cube/cube.mtl
Normal file
5
resources/Models/Cube/cube.mtl
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
newmtl cubemtl
|
||||||
|
Kd 0.00 0.00 0.00
|
||||||
|
Ka 0.59 0.45 0.35
|
||||||
|
Ks 0.59 0.45 0.35
|
||||||
|
map_Kd cube.png
|
||||||
88
resources/Models/Cube/cube.obj
Normal file
88
resources/Models/Cube/cube.obj
Normal file
|
|
@ -0,0 +1,88 @@
|
||||||
|
mtllib cube.mtl
|
||||||
|
o cube
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
v -0.500000 0.500000 0.500000
|
||||||
|
v 0.500000 0.500000 0.500000
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
v -0.500000 0.500000 0.500000
|
||||||
|
v -0.500000 0.500000 -0.500000
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
v 0.500000 0.500000 0.500000
|
||||||
|
v 0.500000 0.500000 -0.500000
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
|
||||||
|
v -0.500000 0.500000 0.500000
|
||||||
|
v -0.500000 0.500000 -0.500000
|
||||||
|
v 0.500000 0.500000 0.500000
|
||||||
|
v 0.500000 0.500000 -0.500000
|
||||||
|
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
v -0.500000 0.500000 -0.500000
|
||||||
|
v 0.500000 0.500000 -0.500000
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
|
||||||
|
vt 0.000000 1.000000
|
||||||
|
vt 0.250000 1.000000
|
||||||
|
vt 0.000000 0.500000
|
||||||
|
vt 0.250000 0.500000
|
||||||
|
|
||||||
|
vt 0.250000 1.000000
|
||||||
|
vt 0.500000 1.000000
|
||||||
|
vt 0.250000 0.500000
|
||||||
|
vt 0.500000 0.500000
|
||||||
|
|
||||||
|
vt 0.500000 1.000000
|
||||||
|
vt 0.750000 1.000000
|
||||||
|
vt 0.500000 0.500000
|
||||||
|
vt 0.750000 0.500000
|
||||||
|
|
||||||
|
vt 0.750000 1.000000
|
||||||
|
vt 1.000000 1.000000
|
||||||
|
vt 0.750000 0.500000
|
||||||
|
vt 1.000000 0.500000
|
||||||
|
|
||||||
|
vt 0.000000 0.000000
|
||||||
|
vt 0.250000 0.000000
|
||||||
|
vt 0.000000 0.500000
|
||||||
|
vt 0.250000 0.500000
|
||||||
|
|
||||||
|
vt 0.250000 0.500000
|
||||||
|
vt 0.500000 0.500000
|
||||||
|
vt 0.250000 0.000000
|
||||||
|
vt 0.500000 0.000000
|
||||||
|
|
||||||
|
vn 0.000000 0.000000 1.000000
|
||||||
|
vn -1.000000 0.000000 0.000000
|
||||||
|
vn 1.000000 0.000000 0.000000
|
||||||
|
vn 0.000000 1.000000 0.000000
|
||||||
|
vn 0.000000 -1.000000 0.000000
|
||||||
|
vn 0.000000 0.000000 -1.000000
|
||||||
|
|
||||||
|
g cubemtl
|
||||||
|
usemtl cubemtl
|
||||||
|
f 1/3/1 2/1/1 4/4/1
|
||||||
|
f 2/1/1 3/2/1 4/4/1
|
||||||
|
|
||||||
|
f 5/8/2 6/6/2 8/7/2
|
||||||
|
f 6/6/2 7/5/2 8/7/2
|
||||||
|
|
||||||
|
f 9/11/3 10/9/3 12/12/3
|
||||||
|
f 10/9/3 12/12/3 11/10/3
|
||||||
|
|
||||||
|
f 13/15/4 14/13/4 15/16/4
|
||||||
|
f 14/13/4 16/14/4 15/16/4
|
||||||
|
|
||||||
|
f 17/19/5 18/17/5 19/20/5
|
||||||
|
f 18/17/5 20/18/5 19/20/5
|
||||||
|
|
||||||
|
f 21/24/6 22/22/6 24/23/6
|
||||||
|
f 22/22/6 23/21/6 24/23/6
|
||||||
BIN
resources/Models/Cube/cube.vtx
Normal file
BIN
resources/Models/Cube/cube.vtx
Normal file
Binary file not shown.
22
resources/Models/Cube/cube_mat.json
Normal file
22
resources/Models/Cube/cube_mat.json
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "cube-mat-0",
|
||||||
|
"texture_path": "",
|
||||||
|
"diffuse_color": {
|
||||||
|
"x": 0.6,
|
||||||
|
"y": 0.6,
|
||||||
|
"z": 0.6,
|
||||||
|
"w": 1.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "cube-mat-1",
|
||||||
|
"texture_path": "resources/models/cube/cube.png",
|
||||||
|
"diffuse_color": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 0.0,
|
||||||
|
"w": 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
BIN
resources/Models/Metro/MetroCarLeadDefault.png
Normal file
BIN
resources/Models/Metro/MetroCarLeadDefault.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
BIN
resources/Models/Metro/MetroCarLeadDefaultGreyscale.png
Normal file
BIN
resources/Models/Metro/MetroCarLeadDefaultGreyscale.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
5609
resources/Models/Metro/MetroLeadCar.json
Normal file
5609
resources/Models/Metro/MetroLeadCar.json
Normal file
File diff suppressed because it is too large
Load diff
BIN
resources/Models/Sloop/SloopBluePaintedSpruce.png
Normal file
BIN
resources/Models/Sloop/SloopBluePaintedSpruce.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 153 KiB |
4
resources/Models/Sloop/SloopOBJ.mtl
Normal file
4
resources/Models/Sloop/SloopOBJ.mtl
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
# Made in Blockbench 5.1.4
|
||||||
|
newmtl m_1306cabb-1c39-88cc-7a28-6065072778b2
|
||||||
|
map_Kd SloopBluePaintedSpruce.png
|
||||||
|
newmtl none
|
||||||
22129
resources/Models/Sloop/SloopOBJ.obj
Normal file
22129
resources/Models/Sloop/SloopOBJ.obj
Normal file
File diff suppressed because it is too large
Load diff
Binary file not shown.
Binary file not shown.
|
|
@ -3,6 +3,9 @@ package net.halbear.Terrain4J.EngineCore.Display;
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance;
|
import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance;
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.InitData;
|
import net.halbear.Terrain4J.EngineCore.Logic.InitData;
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext;
|
import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.TextureCache;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.MaterialData;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.MaterialsCache;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelData;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelData;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelsCache;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelsCache;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer;
|
||||||
|
|
@ -41,6 +44,9 @@ public class Render {
|
||||||
private final VulkanContext RendererContext;
|
private final VulkanContext RendererContext;
|
||||||
private boolean Resize = false;
|
private boolean Resize = false;
|
||||||
|
|
||||||
|
private final MaterialsCache materialsCache;
|
||||||
|
private TextureCache textureCache;
|
||||||
|
|
||||||
public Render(EngineInstance engineInstance) {
|
public Render(EngineInstance engineInstance) {
|
||||||
RendererContext = new VulkanContext(engineInstance.window());
|
RendererContext = new VulkanContext(engineInstance.window());
|
||||||
CurrentFrame = 0;
|
CurrentFrame = 0;
|
||||||
|
|
@ -62,15 +68,28 @@ public class Render {
|
||||||
RenderCompleteSemaphores[i] = new Semaphore(RendererContext);
|
RenderCompleteSemaphores[i] = new Semaphore(RendererContext);
|
||||||
}
|
}
|
||||||
sceneRender = new SceneRender(RendererContext);
|
sceneRender = new SceneRender(RendererContext);
|
||||||
|
textureCache = new TextureCache();
|
||||||
|
materialsCache = new MaterialsCache();
|
||||||
modelsCache = new ModelsCache();
|
modelsCache = new ModelsCache();
|
||||||
Resize = false;
|
Resize = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Initialise(InitData initData){
|
public void Initialise(InitData initData){
|
||||||
|
|
||||||
|
List<MaterialData> Materials = initData.Materials();
|
||||||
|
Logger.debug("Loading {} Materials", Materials.size());
|
||||||
|
materialsCache.LoadMaterials(RendererContext, Materials,textureCache, CommandPools[0], GraphicsQueue);
|
||||||
|
Logger.debug("Loaded {} Materials", Materials.size());
|
||||||
|
|
||||||
|
Logger.debug("Transitioning Textures");
|
||||||
|
textureCache.TransitionTexts(RendererContext, CommandPools[0], GraphicsQueue);
|
||||||
|
Logger.debug("Transitioned Textures");
|
||||||
|
|
||||||
List<ModelData> Models = initData.Models();
|
List<ModelData> Models = initData.Models();
|
||||||
Logger.debug("Loading {} models", Models.size());
|
Logger.debug("Loading {} models", Models.size());
|
||||||
modelsCache.loadModels(RendererContext, Models, CommandPools[0], GraphicsQueue);
|
modelsCache.loadModels(RendererContext, Models, CommandPools[0], GraphicsQueue);
|
||||||
Logger.debug("Loaded {} models", Models.size());
|
Logger.debug("Loaded {} models", Models.size());
|
||||||
|
sceneRender.LoadMaterials(RendererContext,materialsCache,textureCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RecordingStart(CommandPool commandPool, CommandBuffer commandBuffer){
|
private void RecordingStart(CommandPool commandPool, CommandBuffer commandBuffer){
|
||||||
|
|
@ -99,6 +118,8 @@ public class Render {
|
||||||
}
|
}
|
||||||
Logger.debug("Command pools cleaned up");
|
Logger.debug("Command pools cleaned up");
|
||||||
modelsCache.CleanUp(RendererContext);
|
modelsCache.CleanUp(RendererContext);
|
||||||
|
materialsCache.CleanUp(RendererContext);
|
||||||
|
textureCache.CleanUp(RendererContext);
|
||||||
RendererContext.cleanup();
|
RendererContext.cleanup();
|
||||||
}
|
}
|
||||||
public void render(EngineInstance engineInstance){
|
public void render(EngineInstance engineInstance){
|
||||||
|
|
@ -112,7 +133,7 @@ public class Render {
|
||||||
resize(engineInstance);
|
resize(engineInstance);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sceneRender.Render(engineInstance,RendererContext,CommandBuffer, modelsCache,ImageIndex);
|
sceneRender.Render(engineInstance,RendererContext,CommandBuffer, modelsCache,materialsCache,ImageIndex);
|
||||||
RecordingStop(CommandBuffer);
|
RecordingStop(CommandBuffer);
|
||||||
Submit(CommandBuffer, CurrentFrame, ImageIndex);
|
Submit(CommandBuffer, CurrentFrame, ImageIndex);
|
||||||
Resize = swapChain.PresentImage(PresentQueue, RenderCompleteSemaphores[ImageIndex],ImageIndex);
|
Resize = swapChain.PresentImage(PresentQueue, RenderCompleteSemaphores[ImageIndex],ImageIndex);
|
||||||
|
|
@ -139,7 +160,7 @@ public class Render {
|
||||||
|
|
||||||
VkExtent2D extend = RendererContext.GetSwapChain().GetSwapChainExtent();
|
VkExtent2D extend = RendererContext.GetSwapChain().GetSwapChainExtent();
|
||||||
engineInstance.scene().GetProjection().Resize(extend.width(),extend.height());
|
engineInstance.scene().GetProjection().Resize(extend.width(),extend.height());
|
||||||
sceneRender.Resize(RendererContext);
|
sceneRender.Resize(engineInstance,RendererContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ResetFence(int currentFrame){
|
private void ResetFence(int currentFrame){
|
||||||
|
|
|
||||||
|
|
@ -44,17 +44,20 @@ public class EngineConfig {
|
||||||
private String PhysicalDeviceName;
|
private String PhysicalDeviceName;
|
||||||
private int RequestedImages;
|
private int RequestedImages;
|
||||||
private String IconPath = "/WindowResources/Icon/";
|
private String IconPath = "/WindowResources/Icon/";
|
||||||
private String DefaultTexturePath = "/EngineResources/Texture/DefaultTexture.png";
|
private String DefaultTexturePath = "Resources/EngineResources/Texture/DefaultTexture.png";
|
||||||
private String IconName = "ProgramIcon.png";
|
private String IconName = "ProgramIcon.png";
|
||||||
private float FOV = 60f;
|
private float FOV = 60f;
|
||||||
private float zFarPlane;
|
private float zFarPlane;
|
||||||
private float zNearPlane;
|
private float zNearPlane;
|
||||||
private boolean GPU_SUPPORTS_LOGGING = true;
|
private boolean GPU_SUPPORTS_LOGGING = true;
|
||||||
|
private int MaxDescriptors = 1000;
|
||||||
|
|
||||||
public void GPU_Does_Not_Support_Logging(){
|
public void GPU_Does_Not_Support_Logging(){
|
||||||
GPU_SUPPORTS_LOGGING = false;
|
GPU_SUPPORTS_LOGGING = false;
|
||||||
}
|
}
|
||||||
public boolean doesGPUSupportLogging(){return GPU_SUPPORTS_LOGGING;}
|
public boolean doesGPUSupportLogging(){return GPU_SUPPORTS_LOGGING;}
|
||||||
|
public String GetDefaultTexturePath(){return DefaultTexturePath;}
|
||||||
|
public int GetMaxDescriptors(){return MaxDescriptors;}
|
||||||
|
|
||||||
private EngineConfig() {
|
private EngineConfig() {
|
||||||
var EngineConfigVar = new Properties();
|
var EngineConfigVar = new Properties();
|
||||||
|
|
@ -108,6 +111,7 @@ public class EngineConfig {
|
||||||
TickRate = Integer.parseInt(EngineConfigVar.getOrDefault("master_tick_rate", DEFAULT_TICKRATE).toString());
|
TickRate = Integer.parseInt(EngineConfigVar.getOrDefault("master_tick_rate", DEFAULT_TICKRATE).toString());
|
||||||
Width = Integer.parseInt(EngineConfigVar.getOrDefault("display_width", "1280").toString());
|
Width = Integer.parseInt(EngineConfigVar.getOrDefault("display_width", "1280").toString());
|
||||||
Height = Integer.parseInt(EngineConfigVar.getOrDefault("display_height", "720").toString());
|
Height = Integer.parseInt(EngineConfigVar.getOrDefault("display_height", "720").toString());
|
||||||
|
MaxDescriptors = Integer.parseInt(EngineConfigVar.getOrDefault("MaxDescriptors", "1000").toString());
|
||||||
VSYNC = Boolean.parseBoolean(EngineConfigVar.getOrDefault("vsync", true).toString());
|
VSYNC = Boolean.parseBoolean(EngineConfigVar.getOrDefault("vsync", true).toString());
|
||||||
vkValidated = Boolean.parseBoolean(EngineConfigVar.getOrDefault("vkValidated", false).toString());
|
vkValidated = Boolean.parseBoolean(EngineConfigVar.getOrDefault("vkValidated", false).toString());
|
||||||
RequestedImages = Integer.parseInt(EngineConfigVar.getOrDefault("RequestedImages", 3).toString());
|
RequestedImages = Integer.parseInt(EngineConfigVar.getOrDefault("RequestedImages", 3).toString());
|
||||||
|
|
@ -144,6 +148,7 @@ public class EngineConfig {
|
||||||
EngineConfigVar.setProperty("z_near_plane","1");
|
EngineConfigVar.setProperty("z_near_plane","1");
|
||||||
EngineConfigVar.setProperty("z_far_plane","100");
|
EngineConfigVar.setProperty("z_far_plane","100");
|
||||||
EngineConfigVar.setProperty("DefaultTexturePath",DefaultTexturePath);
|
EngineConfigVar.setProperty("DefaultTexturePath",DefaultTexturePath);
|
||||||
|
EngineConfigVar.setProperty("MaxDescriptors","1000");
|
||||||
EngineConfigVar.store(new FileWriter(path.toAbsolutePath().toString() + "/" + FILENAME), "created new properties file");
|
EngineConfigVar.store(new FileWriter(path.toAbsolutePath().toString() + "/" + FILENAME), "created new properties file");
|
||||||
Logger.debug("Wrote New Config File [{}]", ConfigFile.getAbsolutePath());
|
Logger.debug("Wrote New Config File [{}]", ConfigFile.getAbsolutePath());
|
||||||
} catch (IOException excp2) {
|
} catch (IOException excp2) {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
package net.halbear.Terrain4J.EngineCore.Logic;
|
package net.halbear.Terrain4J.EngineCore.Logic;
|
||||||
|
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.MaterialData;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelData;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelData;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public record InitData(List<ModelData> Models) {
|
public record InitData(List<ModelData> Models, List<MaterialData> Materials) {
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,13 @@ import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig;
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance;
|
import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance;
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.GameLogic;
|
import net.halbear.Terrain4J.EngineCore.Logic.GameLogic;
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.InitData;
|
import net.halbear.Terrain4J.EngineCore.Logic.InitData;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Logic.Rendering.ModelLoader;
|
||||||
import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor;
|
import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.MeshData;
|
import net.halbear.Terrain4J.EngineCore.Main.Scene.Scene;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.MaterialData;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelData;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelData;
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -28,54 +31,17 @@ public class GameCore implements GameLogic {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InitData Initialise(EngineInstance engineInstance) {
|
public InitData Initialise(EngineInstance engineInstance) {
|
||||||
float[] positions = new float[]{
|
Scene scene = engineInstance.scene();
|
||||||
-0.25f, 0.25f, 0.25f,
|
|
||||||
-0.25f, -0.25f, 0.25f,
|
|
||||||
0.25f, -0.25f, 0.25f,
|
|
||||||
0.25f, 0.25f, 0.25f,
|
|
||||||
-0.25f, 0.25f, -0.25f,
|
|
||||||
0.25f, 0.25f, -0.25f,
|
|
||||||
-0.25f, -0.25f, -0.25f,
|
|
||||||
0.25f, -0.25f, -0.25f,
|
|
||||||
};
|
|
||||||
float[] textCoords = new float[]{
|
|
||||||
0.0f, 0.0f,
|
|
||||||
0.5f, 0.0f,
|
|
||||||
1.0f, 0.0f,
|
|
||||||
1.0f, 0.5f,
|
|
||||||
1.0f, 1.0f,
|
|
||||||
0.5f, 1.0f,
|
|
||||||
0.0f, 1.0f,
|
|
||||||
0.0f, 0.5f,
|
|
||||||
};
|
|
||||||
int[] indices = new int[]{
|
|
||||||
// Front face
|
|
||||||
0, 1, 3, 3, 1, 2,
|
|
||||||
// Top Face
|
|
||||||
4, 0, 3, 5, 4, 3,
|
|
||||||
// Right face
|
|
||||||
3, 2, 7, 5, 3, 7,
|
|
||||||
// Left face
|
|
||||||
6, 1, 0, 6, 0, 4,
|
|
||||||
// Bottom face
|
|
||||||
2, 1, 6, 2, 6, 7,
|
|
||||||
// Back face
|
|
||||||
7, 6, 4, 7, 4, 5,
|
|
||||||
};
|
|
||||||
List<MeshData> meshDataList = new ArrayList<>();
|
|
||||||
List<ModelData> models = new ArrayList<>();
|
List<ModelData> models = new ArrayList<>();
|
||||||
var modelID = "CubeModel";
|
|
||||||
MeshData meshData = new MeshData("cube_mesh", positions, textCoords, indices);
|
ModelData SloopModel = ModelLoader.LoadModel("resources/Models/Cube/cube.json");
|
||||||
meshDataList.add(meshData);
|
models.add(SloopModel);
|
||||||
ModelData modelData = new ModelData(modelID, meshDataList);
|
Logger.trace(SloopModel.ID());
|
||||||
models.add(modelData);
|
Actor SloopActor = new Actor("CubeEntity",SloopModel.ID(),new Vector3f(0.0f,0.0f,-20.0f));
|
||||||
for(int i = 0; i < 1000; i++) {
|
scene.AddActor(SloopActor);
|
||||||
angles.add((float)Math.floor(Math.random() * 360));
|
|
||||||
Velocities.add(new Vector3f((float)(-2 + (4* Math.random())),(float)(-2 + (4* Math.random())),(float)(-2 + (4* Math.random()))));
|
List<MaterialData> materials = new ArrayList<>(ModelLoader.LoadMaterials("resources/Models/Cube/cube_mat.json"));
|
||||||
CubeActors.add(new Actor("CubeActor", modelID, new Vector3f(-25f + (float)Math.floor(Math.random() *50), -25f + (float)Math.floor(Math.random() * 50), -2f + (float)Math.floor(Math.random() * -15))));
|
return new InitData(models,materials);
|
||||||
engineInstance.scene().AddActor(CubeActors.get(i));
|
|
||||||
}
|
|
||||||
return new InitData(models);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ public class DescriptorSet {
|
||||||
.sType$Default()
|
.sType$Default()
|
||||||
.dstSet(VkDescriptorSet)
|
.dstSet(VkDescriptorSet)
|
||||||
.dstBinding(Binding)
|
.dstBinding(Binding)
|
||||||
|
.descriptorType(Type)
|
||||||
.descriptorCount(1)
|
.descriptorCount(1)
|
||||||
.pBufferInfo(BufferInfo);
|
.pBufferInfo(BufferInfo);
|
||||||
vkUpdateDescriptorSets(device.FetchVulkanDevice(),DescriptorBuffer,null);
|
vkUpdateDescriptorSets(device.FetchVulkanDevice(),DescriptorBuffer,null);
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ public class TextureSampler {
|
||||||
.minLod(0.0f)
|
.minLod(0.0f)
|
||||||
.maxLod(textureSamplerInfo.MipLevels())
|
.maxLod(textureSamplerInfo.MipLevels())
|
||||||
.mipLodBias(0.0f);
|
.mipLodBias(0.0f);
|
||||||
if(textureSamplerInfo.Anisotrophy() && VkCtx.GetDevice().SamplesAnisotropy()){
|
if(textureSamplerInfo.Anisotropy() && VkCtx.GetDevice().SamplesAnisotropy()){
|
||||||
SamplerInfo
|
SamplerInfo
|
||||||
.anisotropyEnable(true)
|
.anisotropyEnable(true)
|
||||||
.maxAnisotropy(MAX_ANISOTROPY);
|
.maxAnisotropy(MAX_ANISOTROPY);
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ public class MaterialsCache {
|
||||||
}
|
}
|
||||||
VulkanMaterial newMaterial = new VulkanMaterial(Material.ID());
|
VulkanMaterial newMaterial = new VulkanMaterial(Material.ID());
|
||||||
MaterialsMap.put(newMaterial.ID(), newMaterial);
|
MaterialsMap.put(newMaterial.ID(), newMaterial);
|
||||||
|
Logger.trace(Material.toString());
|
||||||
Material.DiffuseColour().get(Offset, data);
|
Material.DiffuseColour().get(Offset, data);
|
||||||
data.putInt(Offset + VulkanUtils.VEC4_SIZE, ValidTexture ? 1 : 0);
|
data.putInt(Offset + VulkanUtils.VEC4_SIZE, ValidTexture ? 1 : 0);
|
||||||
data.putInt(Offset + VulkanUtils.VEC4_SIZE + VulkanUtils.INT_SIZE, textureCache.GetPosition(TexturePath));
|
data.putInt(Offset + VulkanUtils.VEC4_SIZE + VulkanUtils.INT_SIZE, textureCache.GetPosition(TexturePath));
|
||||||
|
|
@ -72,7 +72,7 @@ public class MaterialsCache {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void CleanUp(VulkanContext VkCtx){
|
public void CleanUp(VulkanContext VkCtx){
|
||||||
if(MaterialsBuffer != null){
|
if(MaterialsBuffer != null){
|
||||||
MaterialsBuffer.cleanup(VkCtx);
|
MaterialsBuffer.cleanup(VkCtx);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,16 +8,16 @@ import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime;
|
||||||
import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor;
|
import net.halbear.Terrain4J.EngineCore.Main.Scene.Actor;
|
||||||
import net.halbear.Terrain4J.EngineCore.Main.Scene.Scene;
|
import net.halbear.Terrain4J.EngineCore.Main.Scene.Scene;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.Attachment;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.Attachment;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.Texture;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.TextureCache;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.TextureCache;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Pipeline;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Pipeline;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PipelineBuildInfo;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PipelineBuildInfo;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PushConstantsRange;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.PushConstantsRange;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.*;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.*;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VertexBufferStructure;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VertexBufferStructure;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.ModelsCache;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.*;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.VulkanMesh;
|
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel.VulkanModel;
|
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.CommandBuffer;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer;
|
||||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils;
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils;
|
||||||
import org.joml.Matrix4f;
|
import org.joml.Matrix4f;
|
||||||
|
|
@ -25,6 +25,7 @@ import org.lwjgl.system.MemoryStack;
|
||||||
import org.lwjgl.system.MemoryUtil;
|
import org.lwjgl.system.MemoryUtil;
|
||||||
import org.lwjgl.util.shaderc.Shaderc;
|
import org.lwjgl.util.shaderc.Shaderc;
|
||||||
import org.lwjgl.vulkan.*;
|
import org.lwjgl.vulkan.*;
|
||||||
|
import org.tinylog.Logger;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.LongBuffer;
|
import java.nio.LongBuffer;
|
||||||
|
|
@ -141,15 +142,17 @@ public class SceneRender {//dynamic rendering
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Pipeline CreatePipeline(VulkanContext VkCtx, ShaderModule[] ShaderModules){
|
private static Pipeline CreatePipeline(VulkanContext VkCtx, ShaderModule[] ShaderModules, DescriptorSetLayout[] DescriptorSetLayouts){
|
||||||
var vertexBufferStructure = new VertexBufferStructure();
|
var vertexBufferStructure = new VertexBufferStructure();
|
||||||
var BuildInfo = new PipelineBuildInfo(ShaderModules,vertexBufferStructure.getVertexInput(),
|
var BuildInfo = new PipelineBuildInfo(ShaderModules,vertexBufferStructure.getVertexInput(),
|
||||||
VkCtx.GetSurface().GetSurfaceFormat().ImageFormat())
|
VkCtx.GetSurface().GetSurfaceFormat().ImageFormat())
|
||||||
.SetDepthFormat(DEPTH_FORMAT)
|
.SetDepthFormat(DEPTH_FORMAT)
|
||||||
.SetPushConstantRanges(
|
.SetPushConstantRanges(
|
||||||
new PushConstantsRange[]{
|
new PushConstantsRange[]{
|
||||||
new PushConstantsRange(VK_SHADER_STAGE_VERTEX_BIT,0,VulkanUtils.MATRIX4X4_SIZE * 2)
|
new PushConstantsRange(VK_SHADER_STAGE_VERTEX_BIT,0,VulkanUtils.MATRIX4X4_SIZE * 2),
|
||||||
});
|
new PushConstantsRange(VK_SHADER_STAGE_FRAGMENT_BIT,VulkanUtils.MATRIX4X4_SIZE,VulkanUtils.INT_SIZE)
|
||||||
|
})
|
||||||
|
.SetDescriptorSetLayouts(DescriptorSetLayouts);
|
||||||
var pipeline = new Pipeline(VkCtx, BuildInfo);
|
var pipeline = new Pipeline(VkCtx, BuildInfo);
|
||||||
vertexBufferStructure.cleanup();
|
vertexBufferStructure.cleanup();
|
||||||
return pipeline;
|
return pipeline;
|
||||||
|
|
@ -182,7 +185,7 @@ public class SceneRender {//dynamic rendering
|
||||||
RenderInfo = CreateRenderInfo(vulkanContext, AttachmentInfoColour, AttInfoDepth);
|
RenderInfo = CreateRenderInfo(vulkanContext, AttachmentInfoColour, AttInfoDepth);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Render(EngineInstance engineInstance,VulkanContext vulkanContext, CommandBuffer commandBuffer, ModelsCache modelsCache, int ImageIndex){
|
public void Render(EngineInstance engineInstance,VulkanContext vulkanContext, CommandBuffer commandBuffer, ModelsCache modelsCache,MaterialsCache materialsCache, int ImageIndex){
|
||||||
UpdateColours(vulkanContext);
|
UpdateColours(vulkanContext);
|
||||||
try(var MemStack = MemoryStack.stackPush()){
|
try(var MemStack = MemoryStack.stackPush()){
|
||||||
SwapChain swapChain = vulkanContext.GetSwapChain();
|
SwapChain swapChain = vulkanContext.GetSwapChain();
|
||||||
|
|
@ -221,35 +224,39 @@ public class SceneRender {//dynamic rendering
|
||||||
|
|
||||||
LongBuffer offsets = MemStack.mallocLong(1).put(0,0L);
|
LongBuffer offsets = MemStack.mallocLong(1).put(0,0L);
|
||||||
LongBuffer vertexBuffer = MemStack.mallocLong(1);
|
LongBuffer vertexBuffer = MemStack.mallocLong(1);
|
||||||
|
|
||||||
Scene scene = engineInstance.scene();
|
Scene scene = engineInstance.scene();
|
||||||
List<Actor> Actors = scene.GetActors();
|
List<Actor> Actors = scene.GetActors();
|
||||||
int ActorCount = Actors.size();
|
int ActorCount = Actors.size();
|
||||||
|
|
||||||
|
DescriptorAllocator descriptorAllocator = vulkanContext.GetDescriptorAllocator();
|
||||||
|
LongBuffer DescriptorSets = MemStack.mallocLong(3)
|
||||||
|
.put(0,descriptorAllocator.GetDescriptorSet(DESCRIPTOR_ID_PRJ).GetVkDescriptorSet())
|
||||||
|
.put(1,descriptorAllocator.GetDescriptorSet(DESCRIPTOR_ID_MAT).GetVkDescriptorSet())
|
||||||
|
.put(2,descriptorAllocator.GetDescriptorSet(DESCRIPTOR_ID_TEXT).GetVkDescriptorSet());
|
||||||
|
vkCmdBindDescriptorSets(CommandHandle, VK_PIPELINE_BIND_POINT_GRAPHICS, VkPipeline.GetVulkanPipelineLayout(),0,DescriptorSets,null);
|
||||||
|
|
||||||
|
|
||||||
for(int i = 0; i < ActorCount; i++){
|
for(int i = 0; i < ActorCount; i++){
|
||||||
var Actor = Actors.get(i);
|
var Actor = Actors.get(i);
|
||||||
VulkanModel model = modelsCache.GetModel(Actor.GetModelID());
|
VulkanModel model = modelsCache.GetModel(Actor.GetModelID());
|
||||||
List<VulkanMesh> VkMeshList = model.GetVkMeshList();
|
List<VulkanMesh> VkMeshList = model.GetVkMeshList();
|
||||||
int MeshCount = VkMeshList.size();
|
int MeshCount = VkMeshList.size();
|
||||||
SetPushConstants(CommandHandle, scene.GetProjection().GetProjectionMatrix(), Actor.GetModelMatrix());
|
|
||||||
for(int j = 0; j < MeshCount; j++){
|
for(int j = 0; j < MeshCount; j++){
|
||||||
var VkMesh = VkMeshList.get(j);
|
var VkMesh = VkMeshList.get(j);
|
||||||
|
String MaterialID = VkMesh.MaterialID();
|
||||||
|
int MaterialIndex = materialsCache.GetPosition(MaterialID);
|
||||||
|
VulkanMaterial vulkanMaterial = materialsCache.GetMaterial(MaterialID);
|
||||||
|
if(vulkanMaterial == null){
|
||||||
|
Logger.warn("Mesh [{}] in model [{}] does not have material",j,model.GetID());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
SetPushConstants(CommandHandle, Actor.GetModelMatrix(),MaterialIndex);
|
||||||
vertexBuffer.put(0,VkMesh.VerticesBuffer().GetBuffer());
|
vertexBuffer.put(0,VkMesh.VerticesBuffer().GetBuffer());
|
||||||
vkCmdBindVertexBuffers(CommandHandle,0,vertexBuffer,offsets);
|
vkCmdBindVertexBuffers(CommandHandle,0,vertexBuffer,offsets);
|
||||||
vkCmdBindIndexBuffer(CommandHandle,VkMesh.IndicesBuffer().GetBuffer(),0,VK_INDEX_TYPE_UINT32);
|
vkCmdBindIndexBuffer(CommandHandle,VkMesh.IndicesBuffer().GetBuffer(),0,VK_INDEX_TYPE_UINT32);
|
||||||
vkCmdDrawIndexed(CommandHandle,VkMesh.IndicesCount(),1,0,0,0);
|
vkCmdDrawIndexed(CommandHandle,VkMesh.IndicesCount(),1,0,0,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*var VulkanModels = modelsCache.GetModelMap().values(); // old outdated code
|
|
||||||
for(VulkanModel VkModel : VulkanModels){
|
|
||||||
|
|
||||||
for(VulkanMesh mesh : VkModel.GetVkMeshList()){
|
|
||||||
vertexBuffer.put(0,mesh.VerticesBuffer().GetBuffer());
|
|
||||||
vkCmdBindVertexBuffers(CommandHandle,0,vertexBuffer,offsets);
|
|
||||||
vkCmdBindIndexBuffer(CommandHandle,mesh.IndicesBuffer().GetBuffer(),0,VK_INDEX_TYPE_UINT32);
|
|
||||||
vkCmdDrawIndexed(CommandHandle,mesh.IndicesCount(),1,0,0,0);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
vkCmdEndRendering(CommandHandle);
|
vkCmdEndRendering(CommandHandle);
|
||||||
|
|
||||||
VulkanUtils.ImageBarrier(MemStack, CommandHandle, SwapChainImage,
|
VulkanUtils.ImageBarrier(MemStack, CommandHandle, SwapChainImage,
|
||||||
|
|
@ -259,13 +266,14 @@ public class SceneRender {//dynamic rendering
|
||||||
VK_IMAGE_ASPECT_COLOR_BIT);
|
VK_IMAGE_ASPECT_COLOR_BIT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void SetPushConstants(VkCommandBuffer CmdHandle, Matrix4f ProjectionMatrix, Matrix4f modelMatrix){
|
private void SetPushConstants(VkCommandBuffer CmdHandle, Matrix4f ModelMatrix, int MaterialIndex){
|
||||||
ProjectionMatrix.get(PushConstBuffer);
|
ModelMatrix.get(0,PushConstBuffer);
|
||||||
modelMatrix.get(VulkanUtils.MATRIX4X4_SIZE,PushConstBuffer);
|
PushConstBuffer.putInt(VulkanUtils.MATRIX4X4_SIZE, MaterialIndex);
|
||||||
vkCmdPushConstants(CmdHandle, VkPipeline.GetVulkanPipelineLayout(), VK_SHADER_STAGE_VERTEX_BIT, 0, PushConstBuffer);
|
vkCmdPushConstants(CmdHandle, VkPipeline.GetVulkanPipelineLayout(), VK_SHADER_STAGE_VERTEX_BIT, 0, PushConstBuffer.slice(0,VulkanUtils.MATRIX4X4_SIZE));
|
||||||
|
vkCmdPushConstants(CmdHandle, VkPipeline.GetVulkanPipelineLayout(), VK_SHADER_STAGE_FRAGMENT_BIT, VulkanUtils.MATRIX4X4_SIZE, PushConstBuffer.slice(VulkanUtils.MATRIX4X4_SIZE, VulkanUtils.INT_SIZE));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Resize(VulkanContext VkCtx){
|
public void Resize(EngineInstance instance, VulkanContext VkCtx){
|
||||||
Arrays.asList(RenderInfo).forEach(VkRenderingInfo::free);
|
Arrays.asList(RenderInfo).forEach(VkRenderingInfo::free);
|
||||||
Arrays.asList(AttInfoDepth).forEach(VkRenderingAttachmentInfo::free);
|
Arrays.asList(AttInfoDepth).forEach(VkRenderingAttachmentInfo::free);
|
||||||
Arrays.asList(AttachmentInfoColour).forEach(VkRenderingAttachmentInfo.Buffer::free);
|
Arrays.asList(AttachmentInfoColour).forEach(VkRenderingAttachmentInfo.Buffer::free);
|
||||||
|
|
@ -274,6 +282,19 @@ public class SceneRender {//dynamic rendering
|
||||||
AttachmentInfoColour = CreateColourAttachmentsInfo(VkCtx, ClearValueColour);
|
AttachmentInfoColour = CreateColourAttachmentsInfo(VkCtx, ClearValueColour);
|
||||||
AttInfoDepth = createDepthAttachmentsInfo(VkCtx, AttDepth, ClearValueDepth);
|
AttInfoDepth = createDepthAttachmentsInfo(VkCtx, AttDepth, ClearValueDepth);
|
||||||
RenderInfo = CreateRenderInfo(VkCtx, AttachmentInfoColour, AttInfoDepth);
|
RenderInfo = CreateRenderInfo(VkCtx, AttachmentInfoColour, AttInfoDepth);
|
||||||
|
VulkanUtils.CopyMatrixToBuffer(VkCtx, BufferProjectionMatrix, instance.scene().GetProjection().GetProjectionMatrix(),0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadMaterials(VulkanContext VkCtx, MaterialsCache materialsCache, TextureCache textureCache){
|
||||||
|
DescriptorAllocator descriptorAllocator = VkCtx.GetDescriptorAllocator();
|
||||||
|
Device device = VkCtx.GetDevice();
|
||||||
|
DescriptorSet descriptorSet = descriptorAllocator.AddDescriptorSet(device,DESCRIPTOR_ID_MAT,descriptorLayoutFragStorage);
|
||||||
|
DescriptorSetLayout.LayoutInformation LayoutInfo = descriptorLayoutFragStorage.GetLayoutInfo();
|
||||||
|
var Buffer = materialsCache.GetMaterialsBuffer();
|
||||||
|
descriptorSet.SetBuffer(device,Buffer,Buffer.GetRequestedSize(),LayoutInfo.Binding(),LayoutInfo.DescriptorType());
|
||||||
|
List<ImageView> imageViews = textureCache.GetTextureList().stream().map(Texture::GetImageView).toList();
|
||||||
|
descriptorSet = VkCtx.GetDescriptorAllocator().AddDescriptorSet(device,DESCRIPTOR_ID_TEXT,descriptorLayoutTexture);
|
||||||
|
descriptorSet.SetImageArray(device,imageViews,textureSampler,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static VkRenderingInfo[] CreateRenderInfo(VulkanContext vulkanContext, VkRenderingAttachmentInfo.Buffer[] ColourAttachments, VkRenderingAttachmentInfo[] DepthAttachments){
|
private static VkRenderingInfo[] CreateRenderInfo(VulkanContext vulkanContext, VkRenderingAttachmentInfo.Buffer[] ColourAttachments, VkRenderingAttachmentInfo[] DepthAttachments){
|
||||||
|
|
@ -322,6 +343,10 @@ public class SceneRender {//dynamic rendering
|
||||||
MemoryUtil.memFree(PushConstBuffer);
|
MemoryUtil.memFree(PushConstBuffer);
|
||||||
ClearValueDepth.free();
|
ClearValueDepth.free();
|
||||||
ClearValueColour.free();
|
ClearValueColour.free();
|
||||||
|
BufferProjectionMatrix.cleanup(VkCtx);
|
||||||
|
descriptorLayoutFragStorage.CleanUp(VkCtx);
|
||||||
|
descriptorLayoutTexture.CleanUp(VkCtx);
|
||||||
|
descriptorLayoutVertexUniform.CleanUp(VkCtx);
|
||||||
|
textureSampler.CleanUp(VkCtx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,15 @@
|
||||||
package net.halbear.Terrain4J.EngineCore.Vulkan.Util;
|
package net.halbear.Terrain4J.EngineCore.Vulkan.Util;
|
||||||
|
|
||||||
import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext;
|
import net.halbear.Terrain4J.EngineCore.Logic.Rendering.VulkanContext;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.DescriptorSet;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Shader.DescriptorSetLayout;
|
||||||
|
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device;
|
||||||
|
import org.joml.Matrix4f;
|
||||||
import org.lwjgl.system.MemoryStack;
|
import org.lwjgl.system.MemoryStack;
|
||||||
|
import org.lwjgl.system.MemoryUtil;
|
||||||
import org.lwjgl.vulkan.*;
|
import org.lwjgl.vulkan.*;
|
||||||
|
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import static org.lwjgl.vulkan.VK13.*;
|
import static org.lwjgl.vulkan.VK13.*;
|
||||||
|
|
@ -17,6 +23,20 @@ public class VulkanUtils {
|
||||||
public static final int MATRIX4X4_SIZE = 16 * FLOAT_SIZE;
|
public static final int MATRIX4X4_SIZE = 16 * FLOAT_SIZE;
|
||||||
public static final int VEC4_SIZE = 4 * FLOAT_SIZE;
|
public static final int VEC4_SIZE = 4 * FLOAT_SIZE;
|
||||||
|
|
||||||
|
public static void CopyMatrixToBuffer(VulkanContext VkCtx, VulkanBuffer VkBuffer, Matrix4f matrix, int Offset){
|
||||||
|
long MappedMemory = VkBuffer.MapMemory(VkCtx);
|
||||||
|
ByteBuffer matrixBuffer = MemoryUtil.memByteBuffer(MappedMemory, (int)VkBuffer.GetRequestedSize());
|
||||||
|
matrix.get(Offset, matrixBuffer);
|
||||||
|
VkBuffer.UnMapMemory(VkCtx);
|
||||||
|
}
|
||||||
|
public static VulkanBuffer CreateHostVisibleBuffer(VulkanContext VkCtx, long BufferSize, int Usage, String ID, DescriptorSetLayout layout){
|
||||||
|
var Buffer = new VulkanBuffer(VkCtx, BufferSize, Usage, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
|
||||||
|
Device device = VkCtx.GetDevice();
|
||||||
|
DescriptorSet descriptorSet = VkCtx.GetDescriptorAllocator().AddDescriptorSet(device, ID, layout);
|
||||||
|
descriptorSet.SetBuffer(device, Buffer, Buffer.GetRequestedSize(), layout.GetLayoutInfo().Binding(),layout.GetLayoutInfo().DescriptorType());
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
public static int MemoryTypeFromProperties(VulkanContext vulkanContext, int TypeBits, int ReqMask){
|
public static int MemoryTypeFromProperties(VulkanContext vulkanContext, int TypeBits, int ReqMask){
|
||||||
int result = -1;
|
int result = -1;
|
||||||
VkMemoryType.Buffer MemoryTypes = vulkanContext.GetPhysicalDevice().GetMemoryProperties().memoryTypes();
|
VkMemoryType.Buffer MemoryTypes = vulkanContext.GetPhysicalDevice().GetMemoryProperties().memoryTypes();
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ vkValidated=true
|
||||||
vsync=false
|
vsync=false
|
||||||
#Vsync images
|
#Vsync images
|
||||||
RequestedImages=3
|
RequestedImages=3
|
||||||
DefaultTexturePath=/EngineResources/Texture/DefaultTexture.png
|
DefaultTexturePath=Resources/EngineResources/Texture/DefaultTexture.png
|
||||||
#This is the name of the GPU you want the engine to use
|
#This is the name of the GPU you want the engine to use
|
||||||
PhysicalDeviceName=
|
PhysicalDeviceName=
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue