cleanup
parent
a9d0fdd90c
commit
2d21dd5b79
|
@ -1,167 +1,34 @@
|
|||
package com.github.hydos.ginger;
|
||||
|
||||
import static java.lang.ClassLoader.getSystemClassLoader;
|
||||
import static java.util.stream.Collectors.toSet;
|
||||
import static org.lwjgl.assimp.Assimp.aiProcess_DropNormals;
|
||||
import static org.lwjgl.assimp.Assimp.aiProcess_FlipUVs;
|
||||
import static org.lwjgl.glfw.GLFW.GLFW_CLIENT_API;
|
||||
import static org.lwjgl.glfw.GLFW.GLFW_NO_API;
|
||||
import static org.lwjgl.glfw.GLFW.glfwCreateWindow;
|
||||
import static org.lwjgl.glfw.GLFW.glfwDestroyWindow;
|
||||
import static org.lwjgl.glfw.GLFW.glfwGetFramebufferSize;
|
||||
import static org.lwjgl.glfw.GLFW.glfwGetTime;
|
||||
import static org.lwjgl.glfw.GLFW.glfwInit;
|
||||
import static org.lwjgl.glfw.GLFW.glfwPollEvents;
|
||||
import static org.lwjgl.glfw.GLFW.glfwSetFramebufferSizeCallback;
|
||||
import static org.lwjgl.glfw.GLFW.glfwTerminate;
|
||||
import static org.lwjgl.glfw.GLFW.glfwWaitEvents;
|
||||
import static org.lwjgl.glfw.GLFW.glfwWindowHint;
|
||||
import static org.lwjgl.glfw.GLFW.glfwWindowShouldClose;
|
||||
import static org.lwjgl.glfw.GLFWVulkan.glfwCreateWindowSurface;
|
||||
import static org.lwjgl.glfw.GLFWVulkan.glfwGetRequiredInstanceExtensions;
|
||||
import static org.lwjgl.stb.STBImage.STBI_rgb_alpha;
|
||||
import static org.lwjgl.stb.STBImage.stbi_image_free;
|
||||
import static org.lwjgl.stb.STBImage.stbi_load;
|
||||
import static org.lwjgl.system.Configuration.DEBUG;
|
||||
import static org.lwjgl.system.MemoryStack.stackGet;
|
||||
import static org.lwjgl.system.MemoryStack.stackPush;
|
||||
import static org.lwjgl.assimp.Assimp.*;
|
||||
import static org.lwjgl.glfw.GLFW.*;
|
||||
import static org.lwjgl.glfw.GLFWVulkan.*;
|
||||
import static org.lwjgl.stb.STBImage.*;
|
||||
import static org.lwjgl.system.MemoryStack.*;
|
||||
import static org.lwjgl.system.MemoryUtil.NULL;
|
||||
import static org.lwjgl.vulkan.EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
|
||||
import static org.lwjgl.vulkan.EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT;
|
||||
import static org.lwjgl.vulkan.EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT;
|
||||
import static org.lwjgl.vulkan.EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT;
|
||||
import static org.lwjgl.vulkan.EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
|
||||
import static org.lwjgl.vulkan.EXTDebugUtils.VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT;
|
||||
import static org.lwjgl.vulkan.EXTDebugUtils.VK_EXT_DEBUG_UTILS_EXTENSION_NAME;
|
||||
import static org.lwjgl.vulkan.EXTDebugUtils.VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
|
||||
import static org.lwjgl.vulkan.EXTDebugUtils.vkCreateDebugUtilsMessengerEXT;
|
||||
import static org.lwjgl.vulkan.EXTDebugUtils.vkDestroyDebugUtilsMessengerEXT;
|
||||
import static org.lwjgl.vulkan.KHRSurface.VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
|
||||
import static org.lwjgl.vulkan.KHRSurface.VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
|
||||
import static org.lwjgl.vulkan.KHRSurface.VK_PRESENT_MODE_FIFO_KHR;
|
||||
import static org.lwjgl.vulkan.KHRSurface.VK_PRESENT_MODE_MAILBOX_KHR;
|
||||
import static org.lwjgl.vulkan.KHRSurface.vkDestroySurfaceKHR;
|
||||
import static org.lwjgl.vulkan.KHRSurface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
|
||||
import static org.lwjgl.vulkan.KHRSurface.vkGetPhysicalDeviceSurfaceFormatsKHR;
|
||||
import static org.lwjgl.vulkan.KHRSurface.vkGetPhysicalDeviceSurfacePresentModesKHR;
|
||||
import static org.lwjgl.vulkan.KHRSurface.vkGetPhysicalDeviceSurfaceSupportKHR;
|
||||
import static org.lwjgl.vulkan.KHRSwapchain.VK_ERROR_OUT_OF_DATE_KHR;
|
||||
import static org.lwjgl.vulkan.KHRSwapchain.VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
|
||||
import static org.lwjgl.vulkan.KHRSwapchain.VK_KHR_SWAPCHAIN_EXTENSION_NAME;
|
||||
import static org.lwjgl.vulkan.KHRSwapchain.VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
|
||||
import static org.lwjgl.vulkan.KHRSwapchain.VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
|
||||
import static org.lwjgl.vulkan.KHRSwapchain.VK_SUBOPTIMAL_KHR;
|
||||
import static org.lwjgl.vulkan.KHRSwapchain.vkAcquireNextImageKHR;
|
||||
import static org.lwjgl.vulkan.KHRSwapchain.vkCreateSwapchainKHR;
|
||||
import static org.lwjgl.vulkan.KHRSwapchain.vkDestroySwapchainKHR;
|
||||
import static org.lwjgl.vulkan.KHRSwapchain.vkGetSwapchainImagesKHR;
|
||||
import static org.lwjgl.vulkan.KHRSwapchain.vkQueuePresentKHR;
|
||||
import static org.lwjgl.vulkan.EXTDebugUtils.*;
|
||||
import static org.lwjgl.vulkan.KHRSurface.*;
|
||||
import static org.lwjgl.vulkan.KHRSwapchain.*;
|
||||
import static org.lwjgl.vulkan.VK10.*;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.IntBuffer;
|
||||
import java.nio.LongBuffer;
|
||||
import java.lang.Math;
|
||||
import java.net.*;
|
||||
import java.nio.*;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.*;
|
||||
import java.util.stream.*;
|
||||
|
||||
import org.joml.Matrix4f;
|
||||
import org.joml.Vector2fc;
|
||||
import org.joml.Vector3f;
|
||||
import org.joml.Vector3fc;
|
||||
import org.joml.*;
|
||||
import org.lwjgl.PointerBuffer;
|
||||
import org.lwjgl.system.MemoryStack;
|
||||
import org.lwjgl.system.Pointer;
|
||||
import org.lwjgl.vulkan.VkAllocationCallbacks;
|
||||
import org.lwjgl.vulkan.VkApplicationInfo;
|
||||
import org.lwjgl.vulkan.VkAttachmentDescription;
|
||||
import org.lwjgl.vulkan.VkAttachmentReference;
|
||||
import org.lwjgl.vulkan.VkBufferCopy;
|
||||
import org.lwjgl.vulkan.VkBufferCreateInfo;
|
||||
import org.lwjgl.vulkan.VkBufferImageCopy;
|
||||
import org.lwjgl.vulkan.VkClearValue;
|
||||
import org.lwjgl.vulkan.VkCommandBuffer;
|
||||
import org.lwjgl.vulkan.VkCommandBufferAllocateInfo;
|
||||
import org.lwjgl.vulkan.VkCommandBufferBeginInfo;
|
||||
import org.lwjgl.vulkan.VkCommandPoolCreateInfo;
|
||||
import org.lwjgl.vulkan.VkDebugUtilsMessengerCallbackDataEXT;
|
||||
import org.lwjgl.vulkan.VkDebugUtilsMessengerCreateInfoEXT;
|
||||
import org.lwjgl.vulkan.VkDescriptorBufferInfo;
|
||||
import org.lwjgl.vulkan.VkDescriptorImageInfo;
|
||||
import org.lwjgl.vulkan.VkDescriptorPoolCreateInfo;
|
||||
import org.lwjgl.vulkan.VkDescriptorPoolSize;
|
||||
import org.lwjgl.vulkan.VkDescriptorSetAllocateInfo;
|
||||
import org.lwjgl.vulkan.VkDescriptorSetLayoutBinding;
|
||||
import org.lwjgl.vulkan.VkDescriptorSetLayoutCreateInfo;
|
||||
import org.lwjgl.vulkan.VkDevice;
|
||||
import org.lwjgl.vulkan.VkDeviceCreateInfo;
|
||||
import org.lwjgl.vulkan.VkDeviceQueueCreateInfo;
|
||||
import org.lwjgl.vulkan.VkExtensionProperties;
|
||||
import org.lwjgl.vulkan.VkExtent2D;
|
||||
import org.lwjgl.vulkan.VkExtent3D;
|
||||
import org.lwjgl.vulkan.VkFenceCreateInfo;
|
||||
import org.lwjgl.vulkan.VkFormatProperties;
|
||||
import org.lwjgl.vulkan.VkFramebufferCreateInfo;
|
||||
import org.lwjgl.vulkan.VkGraphicsPipelineCreateInfo;
|
||||
import org.lwjgl.vulkan.VkImageBlit;
|
||||
import org.lwjgl.vulkan.VkImageCreateInfo;
|
||||
import org.lwjgl.vulkan.VkImageMemoryBarrier;
|
||||
import org.lwjgl.vulkan.VkImageViewCreateInfo;
|
||||
import org.lwjgl.vulkan.VkInstance;
|
||||
import org.lwjgl.vulkan.VkInstanceCreateInfo;
|
||||
import org.lwjgl.vulkan.VkLayerProperties;
|
||||
import org.lwjgl.vulkan.VkMemoryAllocateInfo;
|
||||
import org.lwjgl.vulkan.VkMemoryRequirements;
|
||||
import org.lwjgl.vulkan.VkOffset2D;
|
||||
import org.lwjgl.vulkan.VkPhysicalDevice;
|
||||
import org.lwjgl.vulkan.VkPhysicalDeviceFeatures;
|
||||
import org.lwjgl.vulkan.VkPhysicalDeviceMemoryProperties;
|
||||
import org.lwjgl.vulkan.VkPhysicalDeviceProperties;
|
||||
import org.lwjgl.vulkan.VkPipelineColorBlendAttachmentState;
|
||||
import org.lwjgl.vulkan.VkPipelineColorBlendStateCreateInfo;
|
||||
import org.lwjgl.vulkan.VkPipelineDepthStencilStateCreateInfo;
|
||||
import org.lwjgl.vulkan.VkPipelineInputAssemblyStateCreateInfo;
|
||||
import org.lwjgl.vulkan.VkPipelineLayoutCreateInfo;
|
||||
import org.lwjgl.vulkan.VkPipelineMultisampleStateCreateInfo;
|
||||
import org.lwjgl.vulkan.VkPipelineRasterizationStateCreateInfo;
|
||||
import org.lwjgl.vulkan.VkPipelineShaderStageCreateInfo;
|
||||
import org.lwjgl.vulkan.VkPipelineVertexInputStateCreateInfo;
|
||||
import org.lwjgl.vulkan.VkPipelineViewportStateCreateInfo;
|
||||
import org.lwjgl.vulkan.VkPresentInfoKHR;
|
||||
import org.lwjgl.vulkan.VkQueue;
|
||||
import org.lwjgl.vulkan.VkQueueFamilyProperties;
|
||||
import org.lwjgl.vulkan.VkRect2D;
|
||||
import org.lwjgl.vulkan.VkRenderPassBeginInfo;
|
||||
import org.lwjgl.vulkan.VkRenderPassCreateInfo;
|
||||
import org.lwjgl.vulkan.VkSamplerCreateInfo;
|
||||
import org.lwjgl.vulkan.VkSemaphoreCreateInfo;
|
||||
import org.lwjgl.vulkan.VkShaderModuleCreateInfo;
|
||||
import org.lwjgl.vulkan.VkSubmitInfo;
|
||||
import org.lwjgl.vulkan.VkSubpassDependency;
|
||||
import org.lwjgl.vulkan.VkSubpassDescription;
|
||||
import org.lwjgl.vulkan.VkSurfaceCapabilitiesKHR;
|
||||
import org.lwjgl.vulkan.VkSurfaceFormatKHR;
|
||||
import org.lwjgl.vulkan.VkSwapchainCreateInfoKHR;
|
||||
import org.lwjgl.vulkan.VkVertexInputAttributeDescription;
|
||||
import org.lwjgl.vulkan.VkVertexInputBindingDescription;
|
||||
import org.lwjgl.vulkan.VkViewport;
|
||||
import org.lwjgl.vulkan.VkWriteDescriptorSet;
|
||||
import org.lwjgl.system.*;
|
||||
import org.lwjgl.vulkan.*;
|
||||
|
||||
import com.github.hydos.ginger.engine.vulkan.misc.AlignmentUtils;
|
||||
import com.github.hydos.ginger.engine.vulkan.misc.Frame;
|
||||
import com.github.hydos.ginger.engine.vulkan.misc.ModelLoader;
|
||||
import com.github.hydos.ginger.engine.common.info.RenderAPI;
|
||||
import com.github.hydos.ginger.engine.common.io.Window;
|
||||
import com.github.hydos.ginger.engine.vulkan.misc.*;
|
||||
import com.github.hydos.ginger.engine.vulkan.misc.ModelLoader.Model;
|
||||
import com.github.hydos.ginger.engine.vulkan.misc.ShaderSPIRVUtils;
|
||||
import com.github.hydos.ginger.engine.vulkan.misc.ShaderSPIRVUtils.SPIRV;
|
||||
|
||||
public class VulkanLitecraft {
|
||||
|
@ -396,27 +263,8 @@ public class VulkanLitecraft {
|
|||
}
|
||||
|
||||
private void initWindow() {
|
||||
|
||||
if(!glfwInit()) {
|
||||
throw new RuntimeException("Cannot initialize GLFW");
|
||||
}
|
||||
|
||||
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
|
||||
|
||||
String title = getClass().getEnclosingClass().getSimpleName();
|
||||
|
||||
window = glfwCreateWindow(WIDTH, HEIGHT, title, NULL, NULL);
|
||||
|
||||
if(window == NULL) {
|
||||
throw new RuntimeException("Cannot create window");
|
||||
}
|
||||
|
||||
// In Java, we don't really need a user pointer here, because
|
||||
// we can simply pass an instance method reference to glfwSetFramebufferSizeCallback
|
||||
// However, I will show you how can you pass a user pointer to glfw in Java just for learning purposes:
|
||||
// long userPointer = JNINativeInterface.NewGlobalRef(this);
|
||||
// glfwSetWindowUserPointer(window, userPointer);
|
||||
// Please notice that the reference must be freed manually with JNINativeInterface.nDeleteGlobalRef
|
||||
Window.create(1200, 800, "Vulkan Ginger2", 60, RenderAPI.Vulkan);
|
||||
window = Window.getWindow();
|
||||
glfwSetFramebufferSizeCallback(window, this::framebufferResizeCallback);
|
||||
}
|
||||
|
||||
|
@ -446,9 +294,11 @@ public class VulkanLitecraft {
|
|||
|
||||
private void mainLoop() {
|
||||
|
||||
while(!glfwWindowShouldClose(window)) {
|
||||
while(!Window.closed()) {
|
||||
if(Window.shouldRender()) {
|
||||
drawFrame();
|
||||
}
|
||||
glfwPollEvents();
|
||||
drawFrame();
|
||||
}
|
||||
|
||||
// Wait for the device to complete all operations before release resources
|
||||
|
@ -563,10 +413,6 @@ public class VulkanLitecraft {
|
|||
|
||||
private void createInstance() {
|
||||
|
||||
if(ENABLE_VALIDATION_LAYERS && !checkValidationLayerSupport()) {
|
||||
throw new RuntimeException("Validation requested but not supported");
|
||||
}
|
||||
|
||||
try(MemoryStack stack = stackPush()) {
|
||||
|
||||
// Use calloc to initialize the structs with 0s. Otherwise, the program can crash due to random values
|
||||
|
@ -1247,7 +1093,7 @@ public class VulkanLitecraft {
|
|||
|
||||
try(MemoryStack stack = stackPush()) {
|
||||
|
||||
String filename = Paths.get(new URI(getSystemClassLoader().getResource("textures/chalet.jpg").toExternalForm())).toString();
|
||||
String filename = Paths.get(new URI(ClassLoader.getSystemClassLoader().getResource("textures/chalet.jpg").toExternalForm())).toString();
|
||||
|
||||
IntBuffer pWidth = stack.mallocInt(1);
|
||||
IntBuffer pHeight = stack.mallocInt(1);
|
||||
|
@ -1658,7 +1504,7 @@ public class VulkanLitecraft {
|
|||
|
||||
private void loadModel() {
|
||||
|
||||
File modelFile = new File(getSystemClassLoader().getResource("models/chalet.obj").getFile());
|
||||
File modelFile = new File(ClassLoader.getSystemClassLoader().getResource("models/chalet.obj").getFile());
|
||||
|
||||
Model model = ModelLoader.loadModel(modelFile, aiProcess_FlipUVs | aiProcess_DropNormals);
|
||||
|
||||
|
|
|
@ -1,18 +1,8 @@
|
|||
package com.github.hydos.ginger.engine.vulkan.misc;
|
||||
|
||||
import org.joml.Matrix4f;
|
||||
import org.joml.Vector2f;
|
||||
import org.joml.Vector3f;
|
||||
import org.joml.Vector4f;
|
||||
import java.util.*;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import static java.util.Objects.requireNonNull;
|
||||
import org.joml.*;
|
||||
|
||||
/**
|
||||
* An utility class for dealing with alignments in Uniform Buffer Objects
|
||||
|
|
|
@ -1,67 +0,0 @@
|
|||
package com.github.hydos.ginger.engine.vulkan.misc;
|
||||
|
||||
import org.joml.Vector2fc;
|
||||
import org.joml.Vector3fc;
|
||||
import org.lwjgl.vulkan.VK12;
|
||||
import org.lwjgl.vulkan.VkVertexInputAttributeDescription;
|
||||
import org.lwjgl.vulkan.VkVertexInputBindingDescription;
|
||||
|
||||
public class VKVertex {
|
||||
|
||||
private static final int SIZEOF = (3 + 3 + 2) * Float.BYTES;
|
||||
private static final int OFFSETOF_POS = 0;
|
||||
private static final int OFFSETOF_COLOR = 3 * Float.BYTES;
|
||||
private static final int OFFSETOF_TEXTCOORDS = (3 + 3) * Float.BYTES;
|
||||
|
||||
private Vector3fc pos;
|
||||
private Vector3fc color;
|
||||
private Vector2fc texCoords;
|
||||
|
||||
public VKVertex(Vector3fc pos, Vector3fc color, Vector2fc texCoords) {
|
||||
this.pos = pos;
|
||||
this.color = color;
|
||||
this.texCoords = texCoords;
|
||||
}
|
||||
|
||||
private static VkVertexInputBindingDescription.Buffer getBindingDescription() {
|
||||
|
||||
VkVertexInputBindingDescription.Buffer bindingDescription =
|
||||
VkVertexInputBindingDescription.callocStack(1);
|
||||
|
||||
bindingDescription.binding(0);
|
||||
bindingDescription.stride(VKVertex.SIZEOF);
|
||||
bindingDescription.inputRate(VK12.VK_VERTEX_INPUT_RATE_VERTEX);
|
||||
|
||||
return bindingDescription;
|
||||
}
|
||||
|
||||
private static VkVertexInputAttributeDescription.Buffer getAttributeDescriptions() {
|
||||
|
||||
VkVertexInputAttributeDescription.Buffer attributeDescriptions =
|
||||
VkVertexInputAttributeDescription.callocStack(3);
|
||||
|
||||
// Position
|
||||
VkVertexInputAttributeDescription posDescription = attributeDescriptions.get(0);
|
||||
posDescription.binding(0);
|
||||
posDescription.location(0);
|
||||
posDescription.format(VK12.VK_FORMAT_R32G32B32_SFLOAT);
|
||||
posDescription.offset(OFFSETOF_POS);
|
||||
|
||||
// Color
|
||||
VkVertexInputAttributeDescription colorDescription = attributeDescriptions.get(1);
|
||||
colorDescription.binding(0);
|
||||
colorDescription.location(1);
|
||||
colorDescription.format(VK12.VK_FORMAT_R32G32B32_SFLOAT);
|
||||
colorDescription.offset(OFFSETOF_COLOR);
|
||||
|
||||
// Texture coordinates
|
||||
VkVertexInputAttributeDescription texCoordsDescription = attributeDescriptions.get(2);
|
||||
texCoordsDescription.binding(0);
|
||||
texCoordsDescription.location(2);
|
||||
texCoordsDescription.format(VK12.VK_FORMAT_R32G32_SFLOAT);
|
||||
texCoordsDescription.offset(OFFSETOF_TEXTCOORDS);
|
||||
|
||||
return attributeDescriptions.rewind();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue