From 3040800275a5710aef8af0e964b8c607e0bcf65f Mon Sep 17 00:00:00 2001 From: Halbear Date: Fri, 5 Jun 2026 15:04:01 +0100 Subject: [PATCH] it renders but not properly --- .../Texture/DefaultTexture.png | Bin 0 -> 925 bytes resources/Models/Cube/cube.json | 15 ------------ resources/Models/Cube/cube_mat.json | 22 ----------------- .../Metro/MetroCarLeadDefault.png | Bin .../Metro/MetroCarLeadDefaultGreyscale.png | Bin .../Metro/MetroLeadCar.json | 0 .../Sloop/SloopBluePaintedSpruce.png | Bin .../{Models => models}/Sloop/SloopOBJ.mtl | 0 .../{Models => models}/Sloop/SloopOBJ.obj | 0 .../{Models/Cube => models/cube}/cube.idx | Bin resources/models/cube/cube.json | 15 ++++++++++++ .../{Models/Cube => models/cube}/cube.mtl | 0 .../{Models/Cube => models/cube}/cube.obj | 0 resources/models/cube/cube.png | Bin 0 -> 7531 bytes .../{Models/Cube => models/cube}/cube.vtx | Bin resources/models/cube/cube_mat.json | 22 +++++++++++++++++ resources/shaders/scene_vertex.glsl | 4 +-- resources/shaders/scene_vertex.glsl.spv | Bin 1628 -> 1628 bytes .../EngineCore/Display/GLFWImageParser.java | 2 +- .../EngineCore/Logic/EngineConfig.java | 2 +- .../Logic/Rendering/ModelLoader.java | 6 +++-- .../Terrain4J/EngineCore/Main/GameCore.java | 5 +++- .../Vulkan/Rendering/Pipeline/GraphUtils.java | 23 +++++++++++++++--- .../Rendering/VkModel/MaterialsCache.java | 5 +++- .../Vulkan/Rendering/VkModel/MeshData.java | 2 +- .../Vulkan/Rendering/VkModel/ModelData.java | 2 +- .../Vulkan/Rendering/VkModel/ModelsCache.java | 17 ++++++++++--- .../EngineCore/Vulkan/Util/VulkanBuffer.java | 9 ++++++- terrain4j.properties | 2 +- 29 files changed, 96 insertions(+), 57 deletions(-) create mode 100644 resources/EngineResources/Texture/DefaultTexture.png delete mode 100644 resources/Models/Cube/cube.json delete mode 100644 resources/Models/Cube/cube_mat.json rename resources/{Models => models}/Metro/MetroCarLeadDefault.png (100%) rename resources/{Models => models}/Metro/MetroCarLeadDefaultGreyscale.png (100%) rename resources/{Models => models}/Metro/MetroLeadCar.json (100%) rename resources/{Models => models}/Sloop/SloopBluePaintedSpruce.png (100%) rename resources/{Models => models}/Sloop/SloopOBJ.mtl (100%) rename resources/{Models => models}/Sloop/SloopOBJ.obj (100%) rename resources/{Models/Cube => models/cube}/cube.idx (100%) create mode 100644 resources/models/cube/cube.json rename resources/{Models/Cube => models/cube}/cube.mtl (100%) rename resources/{Models/Cube => models/cube}/cube.obj (100%) create mode 100644 resources/models/cube/cube.png rename resources/{Models/Cube => models/cube}/cube.vtx (100%) create mode 100644 resources/models/cube/cube_mat.json diff --git a/resources/EngineResources/Texture/DefaultTexture.png b/resources/EngineResources/Texture/DefaultTexture.png new file mode 100644 index 0000000000000000000000000000000000000000..960677fe8ec44497aa615ac1238656d1627ee326 GIT binary patch literal 925 zcmV;O17iG%P)Px&S4l)cRCt{2TFG(iFbt(KX+mAN4xN4vX+({rhn!f4yKouG;SXf^2_V5m24|vo z$r#*#XAldW=^o=29P#t@<#~Mga6NqhTm*P4;Ejs_Zw0*ZS-bGIETa4#W6}I|p4Btf z$D?>nDXIv#Elb!oIeSjibRZ!&9}ObIQ)@!#Lqrt;_ZW92LPAlTkMlI+`8<9Ookio) z`chP10s5BFwYO~(y#Ps|IlK^(j7J0c9&}a<38w_XZQIm4ufbw`2>;z4y-$l37IY;5 z6)Poy?~@FUKtc<;dq9n1`0baX#S2cY16sV`UFc4Llp#hY;S>)*5=KUK8Y}^&s}XTp z3@9y@yl`p|w35)8)>?|8A-lm`T5C<49H$dt4T#nX&ss5B(cBJmWq7dTy@1vXA&3O5 z^*MSPAI@lpvDqP%k`SQt;~1_T*5;(vX%8nMJPp&%==mTr{q^4kUOXUGvfg7X8rR+n zG_3Rd67=}DjB?9USu%^Tc{>5AdmZ2*!ZOb9u?5n4G8W~z=e1m#2J%jdlijK`;fA=fo+}V>{=vK zyaFK+nI$JI!OW2sDbR`@KfVLD6;-OV`y4 zHOANOrxKtU`z{hnQCm4Sm%<^0mp*_#;}zmEJ|Am#bXWdab7gY<8WO64;QDy%S3)(6 zT^*G1&-9Q&&>mjM$XY`+bn$@07#J_f=&#k7)c+s0#Eg0Z8e;(wSo(S_fv?5ukRzwd z{|BIZo7Z&+sN6vG28(B8n<494eTfX^8l>MEq~9I_c!A_q8W~qN=z979xCro8z#A6< z-U@i*BEVY#Z(Ia;E8vZb0B;4naS`CHfH!^tCk?`8!*==300000NkvXXu0mjf&+DmN literal 0 HcmV?d00001 diff --git a/resources/Models/Cube/cube.json b/resources/Models/Cube/cube.json deleted file mode 100644 index dd27c3b..0000000 --- a/resources/Models/Cube/cube.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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" -} \ No newline at end of file diff --git a/resources/Models/Cube/cube_mat.json b/resources/Models/Cube/cube_mat.json deleted file mode 100644 index 2bcc4b0..0000000 --- a/resources/Models/Cube/cube_mat.json +++ /dev/null @@ -1,22 +0,0 @@ -[ - { - "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 - } - } -] \ No newline at end of file diff --git a/resources/Models/Metro/MetroCarLeadDefault.png b/resources/models/Metro/MetroCarLeadDefault.png similarity index 100% rename from resources/Models/Metro/MetroCarLeadDefault.png rename to resources/models/Metro/MetroCarLeadDefault.png diff --git a/resources/Models/Metro/MetroCarLeadDefaultGreyscale.png b/resources/models/Metro/MetroCarLeadDefaultGreyscale.png similarity index 100% rename from resources/Models/Metro/MetroCarLeadDefaultGreyscale.png rename to resources/models/Metro/MetroCarLeadDefaultGreyscale.png diff --git a/resources/Models/Metro/MetroLeadCar.json b/resources/models/Metro/MetroLeadCar.json similarity index 100% rename from resources/Models/Metro/MetroLeadCar.json rename to resources/models/Metro/MetroLeadCar.json diff --git a/resources/Models/Sloop/SloopBluePaintedSpruce.png b/resources/models/Sloop/SloopBluePaintedSpruce.png similarity index 100% rename from resources/Models/Sloop/SloopBluePaintedSpruce.png rename to resources/models/Sloop/SloopBluePaintedSpruce.png diff --git a/resources/Models/Sloop/SloopOBJ.mtl b/resources/models/Sloop/SloopOBJ.mtl similarity index 100% rename from resources/Models/Sloop/SloopOBJ.mtl rename to resources/models/Sloop/SloopOBJ.mtl diff --git a/resources/Models/Sloop/SloopOBJ.obj b/resources/models/Sloop/SloopOBJ.obj similarity index 100% rename from resources/Models/Sloop/SloopOBJ.obj rename to resources/models/Sloop/SloopOBJ.obj diff --git a/resources/Models/Cube/cube.idx b/resources/models/cube/cube.idx similarity index 100% rename from resources/Models/Cube/cube.idx rename to resources/models/cube/cube.idx diff --git a/resources/models/cube/cube.json b/resources/models/cube/cube.json new file mode 100644 index 0000000..8f29677 --- /dev/null +++ b/resources/models/cube/cube.json @@ -0,0 +1,15 @@ +{ + "ID": "cube", + "Meshes": [ + { + "ID": "cubemtl_0", + "MaterialID": "cube-mat-1", + "OffsetVertex": 0, + "VertexSize": 480, + "OffsetIndex": 0, + "IndexSize": 144 + } + ], + "VertexPath": "resources/models/cube/cube.vtx", + "IndexPath": "resources/models/cube/cube.idx" +} \ No newline at end of file diff --git a/resources/Models/Cube/cube.mtl b/resources/models/cube/cube.mtl similarity index 100% rename from resources/Models/Cube/cube.mtl rename to resources/models/cube/cube.mtl diff --git a/resources/Models/Cube/cube.obj b/resources/models/cube/cube.obj similarity index 100% rename from resources/Models/Cube/cube.obj rename to resources/models/cube/cube.obj diff --git a/resources/models/cube/cube.png b/resources/models/cube/cube.png new file mode 100644 index 0000000000000000000000000000000000000000..b51a5ac3192e01c5252f0391ae97248b90e9864c GIT binary patch literal 7531 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 literal 0 HcmV?d00001 diff --git a/resources/Models/Cube/cube.vtx b/resources/models/cube/cube.vtx similarity index 100% rename from resources/Models/Cube/cube.vtx rename to resources/models/cube/cube.vtx diff --git a/resources/models/cube/cube_mat.json b/resources/models/cube/cube_mat.json new file mode 100644 index 0000000..a47fde1 --- /dev/null +++ b/resources/models/cube/cube_mat.json @@ -0,0 +1,22 @@ +[ + { + "ID": "cube-mat-0", + "TexturePath": "", + "DiffuseColour": { + "X": 0.6, + "Y": 0.6, + "Z": 0.6, + "W": 1.0 + } + }, + { + "ID": "cube-mat-1", + "TexturePath": "resources/models/cube/cube.png", + "DiffuseColour": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + } + } +] \ No newline at end of file diff --git a/resources/shaders/scene_vertex.glsl b/resources/shaders/scene_vertex.glsl index 610c74d..0977075 100644 --- a/resources/shaders/scene_vertex.glsl +++ b/resources/shaders/scene_vertex.glsl @@ -1,7 +1,7 @@ #version 450 layout(location = 0) in vec3 inPos; -layout(location = 1) in vec2 intTextCoords; +layout(location = 1) in vec2 inTextCoords; layout(location = 0) out vec2 outTextCoords; @@ -16,5 +16,5 @@ layout(push_constant) uniform pc{ void main() { gl_Position = projUniform.matrix * push_constants.modelMatrix * vec4(inPos,1); - outTextCoords = intTextCoords; + outTextCoords = inTextCoords; } \ No newline at end of file diff --git a/resources/shaders/scene_vertex.glsl.spv b/resources/shaders/scene_vertex.glsl.spv index eed04e2f586d7a36f96f6513eb8c52555e4e9b1c..d670d628c8b4b34aa1e9e07307ea8d236bd213f6 100644 GIT binary patch delta 24 fcmcb^bBAXG6BBnxYDI~2etuC(F~eqFCVv(HYV`-S delta 24 fcmcb^bBAXG6BBnyNNPoibAEnNO7Ui1CVv(HZYBsQ diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/GLFWImageParser.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/GLFWImageParser.java index 9df44c7..9e98d6c 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/GLFWImageParser.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/GLFWImageParser.java @@ -9,7 +9,7 @@ import static org.lwjgl.stb.STBImage.stbi_load; public class GLFWImageParser { - private ByteBuffer image; + private final ByteBuffer image; private int GLFW_Width, GLFW_Height, ImageChannels; GLFWImageParser(int width, int height, ByteBuffer image, int ImageChannels) { 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 b37e275..493afb0 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineConfig.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/EngineConfig.java @@ -44,7 +44,7 @@ public class EngineConfig { private String PhysicalDeviceName; private int RequestedImages; private String IconPath = "/WindowResources/Icon/"; - private String DefaultTexturePath = "Resources/EngineResources/Texture/DefaultTexture.png"; + private String DefaultTexturePath = "resources/EngineResources/Texture/DefaultTexture.png"; private String IconName = "ProgramIcon.png"; private float FOV = 60f; private float zFarPlane; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/ModelLoader.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/ModelLoader.java index 6da9cab..10adb2d 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/ModelLoader.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/Rendering/ModelLoader.java @@ -22,11 +22,12 @@ public class ModelLoader { // Model Utility class kinda like a model version of var Result = new ArrayList(); try{ String content = new String(Files.readAllBytes(Paths.get(Path))); - var gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create(); + var gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create(); Result.addAll(Arrays.asList(gson.fromJson(content,MaterialData[].class))); }catch(Exception e){ throw new RuntimeException(e); } + Logger.debug("Loaded Material Data: [{}]",Result.toString()); return Result; } public static ModelData LoadModel(String Path){ @@ -34,11 +35,12 @@ public class ModelLoader { // Model Utility class kinda like a model version of ModelData Result; try{ String content = new String(Files.readAllBytes(Paths.get(Path))); - var gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create(); + var gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create(); Result = gson.fromJson(content,ModelData.class); }catch(Exception e){ throw new RuntimeException(e); } + Logger.debug("Loaded Model Data: [{}]",Result.toString()); return Result; } } 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 6f98fed..7b562cc 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Main/GameCore.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Main/GameCore.java @@ -37,7 +37,10 @@ public class GameCore implements GameLogic { ModelData SloopModel = ModelLoader.LoadModel("resources/Models/Cube/cube.json"); models.add(SloopModel); Logger.trace(SloopModel.ID()); - Actor SloopActor = new Actor("CubeEntity",SloopModel.ID(),new Vector3f(0.0f,0.0f,-20.0f)); + Actor SloopActor = new Actor("CubeEntity",SloopModel.ID(),new Vector3f(0.0f,0.0f,-10.0f)); + angles.add(34F); + Velocities.add(new Vector3f(0,0,0)); + CubeActors.add(SloopActor); scene.AddActor(SloopActor); List materials = new ArrayList<>(ModelLoader.LoadMaterials("resources/Models/Cube/cube_mat.json")); diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/GraphUtils.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/GraphUtils.java index 349b8ff..a5d4664 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/GraphUtils.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/Pipeline/GraphUtils.java @@ -3,23 +3,38 @@ package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline; import net.halbear.Terrain4J.EngineCore.Display.GLFWImageParser; import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.Pipeline.Images.ImageSrc; import org.lwjgl.system.MemoryStack; +import org.tinylog.Logger; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.IntBuffer; -import static org.lwjgl.stb.STBImage.stbi_image_free; -import static org.lwjgl.stb.STBImage.stbi_load; +import static org.lwjgl.stb.STBImage.*; public class GraphUtils { private GraphUtils(){ } public static void CleanImageData(ImageSrc imageSrc){ + Logger.debug("Loading Image Data [{}]",imageSrc.data()); stbi_image_free(imageSrc.data()); } public static ImageSrc LoadImage(String Filename) throws IOException{ - GLFWImageParser image = GLFWImageParser.LoadImage(Filename); - return new ImageSrc(image.GetImage(), image.GetWidth(), image.GetHeight(), image.GetChannels()); + Logger.debug("Loading Image [{}]",Filename); + ImageSrc newImage; + ByteBuffer image; + try (MemoryStack MemStack = MemoryStack.stackPush()) { + IntBuffer channels = MemStack.mallocInt(1); + IntBuffer width = MemStack.mallocInt(1); + IntBuffer height = MemStack.mallocInt(1); + image = stbi_load(Filename, width, height, channels, 4); + if (image == null) { + Logger.error("Could not load or find image inputted."); + throw new IOException("Image file [" + Filename + "] not loaded: " + stbi_failure_reason()); + } + newImage = new ImageSrc(image, width.get(0), height.get(0), channels.get(0)); + } + Logger.debug("Loaded Buffer [{}]",image); + return newImage ; } } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MaterialsCache.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MaterialsCache.java index 2ce6ed2..4fec953 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MaterialsCache.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MaterialsCache.java @@ -14,6 +14,7 @@ import org.tinylog.Logger; import org.w3c.dom.Text; import java.nio.ByteBuffer; +import java.util.Arrays; import java.util.List; import static org.lwjgl.vulkan.VK10.*; @@ -49,16 +50,18 @@ public class MaterialsCache { String TexturePath = Material.TexturePath(); boolean ValidTexture = TexturePath != null && !TexturePath.isEmpty(); if(ValidTexture){ + Logger.debug("Loading Texture [{}]",TexturePath); textureCache.AddTexture(VkCtx, TexturePath, TexturePath, VK_FORMAT_R8G8B8A8_SRGB); } VulkanMaterial newMaterial = new VulkanMaterial(Material.ID()); MaterialsMap.put(newMaterial.ID(), newMaterial); Logger.trace(Material.toString()); Material.DiffuseColour().get(Offset, data); + Logger.debug("Set Diffuse Colour -> [{}]",Material.DiffuseColour()); data.putInt(Offset + VulkanUtils.VEC4_SIZE, ValidTexture ? 1 : 0); data.putInt(Offset + VulkanUtils.VEC4_SIZE + VulkanUtils.INT_SIZE, textureCache.GetPosition(TexturePath)); //pad data because the minimum size of data in the shader layout is a multiple of Vec4, - // compensate with 2 more bytes as we only need 6 currently + // compensate with 2 more as we only need 6 currently data.putInt(Offset + VulkanUtils.VEC4_SIZE + VulkanUtils.INT_SIZE * 2,0); data.putInt(Offset + VulkanUtils.VEC4_SIZE + VulkanUtils.INT_SIZE * 3,0); Offset += MATERIAL_SIZE; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MeshData.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MeshData.java index b9d0331..4a4bf85 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MeshData.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/MeshData.java @@ -1,4 +1,4 @@ package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel; -public record MeshData(String ID, String MaterialID, int offsetVertex, int VertexSize, int OffsetIndex, int IndexSize) { +public record MeshData(String ID, String MaterialID, int OffsetVertex, int VertexSize, int OffsetIndex, int IndexSize) { } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelData.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelData.java index ea2b6f0..221ab18 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelData.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelData.java @@ -2,7 +2,7 @@ package net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.VkModel; import java.util.List; -public record ModelData(String ID, List Meshes, String vertexPath, String indexPath) { +public record ModelData(String ID, List Meshes, String VertexPath, String IndexPath) { } diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelsCache.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelsCache.java index 81e36f5..d4f9511 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelsCache.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Rendering/VkModel/ModelsCache.java @@ -8,6 +8,7 @@ import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Queues.Que import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanBuffer; import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils; import org.lwjgl.system.MemoryUtil; +import org.tinylog.Logger; import java.io.BufferedInputStream; import java.io.DataInputStream; @@ -39,9 +40,9 @@ public class ModelsCache { ModelsMap.put(VKModel.GetID(), VKModel); DataInputStream VertexInput = new DataInputStream(new BufferedInputStream( - new FileInputStream(modelData.vertexPath()))); + new FileInputStream(modelData.VertexPath()))); DataInputStream IndicesInput = new DataInputStream(new BufferedInputStream( - new FileInputStream(modelData.indexPath()))); + new FileInputStream(modelData.IndexPath()))); for (MeshData meshData : modelData.Meshes()) { TransferBuffer VerticesBuffers = CreateVerticesBuffer(VkCtx, meshData,VertexInput); @@ -50,6 +51,7 @@ public class ModelsCache { StagingBufferList.add(IndicesBuffers.SrcBuffer()); VerticesBuffers.RecordTransferCommand(Command); IndicesBuffers.RecordTransferCommand(Command); + Logger.debug("Creating new Vulkan Mesh -> ID=[{}] MaterialID=[{}]",meshData.ID(),meshData.MaterialID()); VulkanMesh VkMesh = new VulkanMesh(meshData.ID(), VerticesBuffers.DstBuffer(), IndicesBuffers.DstBuffer(), meshData.IndexSize() / VulkanUtils.INT_SIZE, meshData.MaterialID()); VKModel.GetVkMeshList().add(VkMesh); @@ -66,17 +68,24 @@ public class ModelsCache { } private static TransferBuffer CreateVerticesBuffer(VulkanContext VkCtx, MeshData meshData, DataInputStream VertexStream) throws IOException { - + Logger.debug("Creating Vertices Transfer Buffer, Mesh Data -> ID=[{}] VertexSize=[{}]",meshData.ID(),meshData.VertexSize()); int BufferSize = meshData.VertexSize(); var SrcBuffer = new VulkanBuffer(VkCtx,BufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); var DstBuffer = new VulkanBuffer(VkCtx, BufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); - + if (BufferSize <= 0) { + Logger.error("Computed buffer allocation size cannot be 0. SrcBuffer -> [{}] DstBuffer -> [{}]",SrcBuffer,DstBuffer); + throw new RuntimeException("Computed buffer allocation size cannot be 0. SrcBuffer -> ["+SrcBuffer+"] DstBuffer -> ["+DstBuffer+"]"); + } long MappedMemory = SrcBuffer.MapMemory(VkCtx); FloatBuffer data = MemoryUtil.memFloatBuffer(MappedMemory, (int) SrcBuffer.GetRequestedSize()); int ValuesToRead = meshData.VertexSize()/VulkanUtils.FLOAT_SIZE; + if (ValuesToRead <= 0) { + Logger.error("Cannot allocate vertex buffer: Model mesh has 0 or negative vertices! Vertex Stream -> [{}]",VertexStream); + throw new RuntimeException("Cannot allocate vertex buffer: Model mesh has 0 or negative vertices! Vertex Stream -> [{"+VertexStream+"]"); + } while(ValuesToRead > 0){ data.put(VertexStream.readFloat()); ValuesToRead--; diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanBuffer.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanBuffer.java index 732d30e..e428660 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanBuffer.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Util/VulkanBuffer.java @@ -51,7 +51,14 @@ public class VulkanBuffer { AllocationSize = MemoryAllocation.allocationSize(); Memory = LongPointer.get(0); pointerBuffer = MemoryUtil.memAllocPointer(1); - + if (Buffer == 0) { + Logger.error("Vulkan crash blocked: Native bufferHandle cannot be 0!"); + throw new IllegalArgumentException("Vulkan crash blocked: Native bufferHandle cannot be 0!"); + } + if (Memory == 0) { + Logger.error("Vulkan crash blocked: Native memoryHandle cannot be 0! Device out of memory or allocation failed."); + throw new IllegalArgumentException("Vulkan crash blocked: Native memoryHandle cannot be 0! Device out of memory or allocation failed."); + } vkCheck(vkBindBufferMemory(device.FetchVulkanDevice(),Buffer,Memory,0),"Failed to Bind Vulkan Memory Buffer"); } } diff --git a/terrain4j.properties b/terrain4j.properties index d00120f..1a00f68 100644 --- a/terrain4j.properties +++ b/terrain4j.properties @@ -28,7 +28,7 @@ vkValidated=true vsync=false #Vsync images RequestedImages=3 -DefaultTexturePath=Resources/EngineResources/Texture/DefaultTexture.png +DefaultTexturePath=resources/EngineResources/Texture/DefaultTexture.png #This is the name of the GPU you want the engine to use PhysicalDeviceName=