From 188d55fab37b7630290bb5d031b72dde970447fb Mon Sep 17 00:00:00 2001 From: Desmond Date: Mon, 16 Sep 2019 22:32:27 -0500 Subject: [PATCH] WINDOWS --- .classpath | 41 +++++----- .../halotroop/litecraft/LiteCraftMain.java | 71 ++-------------- .../github/halotroop/litecraft/Window.java | 82 +++++++++++++++++++ 3 files changed, 110 insertions(+), 84 deletions(-) create mode 100644 src/com/github/halotroop/litecraft/Window.java diff --git a/.classpath b/.classpath index 53b0912..affc77a 100644 --- a/.classpath +++ b/.classpath @@ -1,21 +1,20 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/github/halotroop/litecraft/LiteCraftMain.java b/src/com/github/halotroop/litecraft/LiteCraftMain.java index 9f16d4a..d791913 100644 --- a/src/com/github/halotroop/litecraft/LiteCraftMain.java +++ b/src/com/github/halotroop/litecraft/LiteCraftMain.java @@ -8,78 +8,23 @@ import java.nio.*; public class LiteCraftMain { - private long window; - + Window win; public void run() { System.out.println("Hello LWJGL " + Version.getVersion() + "!"); - init(); + win = new Window(); loop(); // Free the window callbacks and destroy the window - Callbacks.glfwFreeCallbacks(window); - GLFW.glfwDestroyWindow(window); + Callbacks.glfwFreeCallbacks(win.getWindow()); + GLFW.glfwDestroyWindow(win.getWindow()); // Terminate GLFW and free the error callback GLFW.glfwTerminate(); GLFW.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 ( !GLFW.glfwInit() ) - throw new IllegalStateException("Unable to initialize GLFW"); - - // Configure GLFW - GLFW.glfwDefaultWindowHints(); // optional, the current window hints are already the default - GLFW.glfwWindowHint(GLFW.GLFW_VISIBLE, GLFW.GLFW_FALSE); // the window will stay hidden after creation - GLFW.glfwWindowHint(GLFW.GLFW_RESIZABLE, GLFW.GLFW_TRUE); // the window will be resizable - - // Create the window - window = GLFW.glfwCreateWindow(300, 300, "Hello World!", 0, 0); - if ( window == 0 ) - 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. - GLFW.glfwSetKeyCallback(window, (window, key, scancode, action, mods) -> { - if ( key == GLFW.GLFW_KEY_ESCAPE && action == GLFW.GLFW_RELEASE ) - GLFW.glfwSetWindowShouldClose(window, true); // We will detect this in the rendering loop - }); - - // Get the thread stack and push a new frame - try ( MemoryStack stack = MemoryStack.stackPush() ) { - IntBuffer pWidth = stack.mallocInt(1); // int* - IntBuffer pHeight = stack.mallocInt(1); // int* - - // Get the window size passed to glfwCreateWindow - GLFW.glfwGetWindowSize(window, pWidth, pHeight); - - // Get the resolution of the primary monitor - GLFWVidMode vidmode = GLFW.glfwGetVideoMode(GLFW.glfwGetPrimaryMonitor()); - - // Center the window - GLFW.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 - GLFW.glfwMakeContextCurrent(window); - // Enable v-sync - GLFW.glfwSwapInterval(1); - - // Make the window visible - GLFW.glfwShowWindow(window); - } - + private void loop() { // This line is critical for LWJGL's interoperation with GLFW's @@ -90,14 +35,14 @@ public class LiteCraftMain GL.createCapabilities(); // Set the clear color - GL11.glClearColor(1.0f, 0.0f, 0.0f, 0.0f); + GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Run the rendering loop until the user has attempted to close // the window or has pressed the ESCAPE key. - while ( !GLFW.glfwWindowShouldClose(window) ) { + while ( !GLFW.glfwWindowShouldClose(win.getWindow()) ) { GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); // clear the framebuffer - GLFW.glfwSwapBuffers(window); // swap the color buffers + GLFW.glfwSwapBuffers(win.getWindow()); // swap the color buffers // Poll for window events. The key callback above will only be // invoked during this call. diff --git a/src/com/github/halotroop/litecraft/Window.java b/src/com/github/halotroop/litecraft/Window.java new file mode 100644 index 0000000..3190462 --- /dev/null +++ b/src/com/github/halotroop/litecraft/Window.java @@ -0,0 +1,82 @@ +package com.github.halotroop.litecraft; + +import java.nio.IntBuffer; + +import org.lwjgl.Version; +import org.lwjgl.glfw.Callbacks; +import org.lwjgl.glfw.GLFW; +import org.lwjgl.glfw.GLFWErrorCallback; +import org.lwjgl.glfw.GLFWVidMode; +import org.lwjgl.opengl.GL; +import org.lwjgl.opengl.GL11; +import org.lwjgl.system.MemoryStack; + +public class Window { + + private long window; + + public long getWindow() { + return window; + } + + public void setWindow(long window) { + this.window = window; + } + + public Window() + { + // 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 ( !GLFW.glfwInit() ) + throw new IllegalStateException("Unable to initialize GLFW"); + + // Configure GLFW + GLFW.glfwDefaultWindowHints(); // optional, the current window hints are already the default + GLFW.glfwWindowHint(GLFW.GLFW_VISIBLE, GLFW.GLFW_FALSE); // the window will stay hidden after creation + GLFW.glfwWindowHint(GLFW.GLFW_RESIZABLE, GLFW.GLFW_TRUE); // the window will be resizable + + // Create the window + + window = GLFW.glfwCreateWindow(1600, 900, "Hello World!", 0, 0); + if ( window == 0 ) + 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. + GLFW.glfwSetKeyCallback(window, (window, key, scancode, action, mods) -> { + if ( key == GLFW.GLFW_KEY_ESCAPE && action == GLFW.GLFW_RELEASE ) + GLFW.glfwSetWindowShouldClose(window, true); // We will detect this in the rendering loop + }); + + // Get the thread stack and push a new frame + try ( MemoryStack stack = MemoryStack.stackPush() ) { + IntBuffer pWidth = stack.mallocInt(1); // int* + IntBuffer pHeight = stack.mallocInt(1); // int* + + // Get the window size passed to glfwCreateWindow + GLFW.glfwGetWindowSize(window, pWidth, pHeight); + + // Get the resolution of the primary monitor + GLFWVidMode vidmode = GLFW.glfwGetVideoMode(GLFW.glfwGetPrimaryMonitor()); + + // Center the window + GLFW.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 + GLFW.glfwMakeContextCurrent(window); + // Enable v-sync + GLFW.glfwSwapInterval(1); + + // Make the window visible + GLFW.glfwShowWindow(window); + } + + + }