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();
}
}