From 888c438b55a54706766d6455debdf2fb4b2b0378 Mon Sep 17 00:00:00 2001 From: Florian RICHER Date: Thu, 10 Oct 2024 20:57:31 +0200 Subject: [PATCH] First work --- pom.xml | 67 +++++++++--- .../java/fr/mrdev023/vulkan_java/App.java | 100 +++++++++++++++++- 2 files changed, 151 insertions(+), 16 deletions(-) diff --git a/pom.xml b/pom.xml index 54d4c2d..c3f2b43 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ UTF-8 22 + 3.2.3 @@ -25,21 +26,6 @@ pom import - - org.lwjgl - lwjgl - 3.2.3 - - - org.lwjgl - lwjgl-glfw - 3.2.3 - - - org.lwjgl - lwjgl-vulkan - 3.2.3 - @@ -55,6 +41,57 @@ junit-jupiter-params test + + org.lwjgl + lwjgl + ${lwjgl.version} + + + org.lwjgl + lwjgl + ${lwjgl.version} + natives-windows + + + org.lwjgl + lwjgl + ${lwjgl.version} + natives-macos + + + org.lwjgl + lwjgl + ${lwjgl.version} + natives-linux + + + org.lwjgl + lwjgl-glfw + ${lwjgl.version} + + + org.lwjgl + lwjgl-glfw + ${lwjgl.version} + natives-windows + + + org.lwjgl + lwjgl-glfw + ${lwjgl.version} + natives-macos + + + org.lwjgl + lwjgl-glfw + ${lwjgl.version} + natives-linux + + + org.lwjgl + lwjgl-vulkan + ${lwjgl.version} + diff --git a/src/main/java/fr/mrdev023/vulkan_java/App.java b/src/main/java/fr/mrdev023/vulkan_java/App.java index 973e61d..6785f53 100644 --- a/src/main/java/fr/mrdev023/vulkan_java/App.java +++ b/src/main/java/fr/mrdev023/vulkan_java/App.java @@ -1,10 +1,108 @@ package fr.mrdev023.vulkan_java; +import org.lwjgl.*; +import org.lwjgl.glfw.*; +import org.lwjgl.system.*; + +import java.nio.*; + +import static org.lwjgl.glfw.Callbacks.*; +import static org.lwjgl.glfw.GLFW.*; +import static org.lwjgl.system.MemoryStack.*; +import static org.lwjgl.system.MemoryUtil.*; + /** * Hello world! */ public class App { + // The window handle + private long window; + + public void run() { + System.out.println("Hello LWJGL " + Version.getVersion() + "!"); + + init(); + loop(); + + // Free the window callbacks and destroy the window + glfwFreeCallbacks(window); + glfwDestroyWindow(window); + + // Terminate GLFW and free the error callback + glfwTerminate(); + glfwSetErrorCallback(null).free(); + } + + private void init() { + // Setup an error callback. The default implementation + // will print the error message in System.err. + GLFWErrorCallback.createPrint(System.err).set(); + + // Initialize GLFW. Most GLFW functions will not work before doing this. + if ( !glfwInit() ) + throw new IllegalStateException("Unable to initialize GLFW"); + + // Configure GLFW + glfwDefaultWindowHints(); // optional, the current window hints are already the default + glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); // the window will stay hidden after creation + glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // the window will be resizable + + // Create the window + window = glfwCreateWindow(300, 300, "Hello World!", NULL, NULL); + if ( window == NULL ) + throw new RuntimeException("Failed to create the GLFW window"); + + // Setup a key callback. It will be called every time a key is pressed, repeated or released. + glfwSetKeyCallback(window, (window, key, scancode, action, mods) -> { + if ( key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE ) + glfwSetWindowShouldClose(window, true); // We will detect this in the rendering loop + }); + + // Get the thread stack and push a new frame + try ( MemoryStack stack = stackPush() ) { + IntBuffer pWidth = stack.mallocInt(1); // int* + IntBuffer pHeight = stack.mallocInt(1); // int* + + // Get the window size passed to glfwCreateWindow + glfwGetWindowSize(window, pWidth, pHeight); + + // Get the resolution of the primary monitor + GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor()); + + // Center the window + glfwSetWindowPos( + window, + (vidmode.width() - pWidth.get(0)) / 2, + (vidmode.height() - pHeight.get(0)) / 2 + ); + } // the stack frame is popped automatically + + // Make the OpenGL context current + glfwMakeContextCurrent(window); + // Enable v-sync + glfwSwapInterval(1); + + // Make the window visible + glfwShowWindow(window); + } + + private void loop() { + + + // Run the rendering loop until the user has attempted to close + // the window or has pressed the ESCAPE key. + while ( !glfwWindowShouldClose(window) ) { + // Replace by clear framebuffer on vulkan + + glfwSwapBuffers(window); // swap the color buffers + + // Poll for window events. The key callback above will only be + // invoked during this call. + glfwPollEvents(); + } + } + public static void main(String[] args) { - System.out.println("Hello World!"); + new App().run(); } }