diff --git a/java/GLWindow.java b/java/GLWindow.java new file mode 100644 index 0000000..00e6feb --- /dev/null +++ b/java/GLWindow.java @@ -0,0 +1,61 @@ +import entities.config.GLConfigVariable; +import org.lwjgl.glfw.GLFWErrorCallback; +import org.lwjgl.opengl.GL; + +import static org.lwjgl.glfw.Callbacks.glfwFreeCallbacks; +import static org.lwjgl.glfw.GLFW.*; +import static org.lwjgl.opengl.GL11.*; +import static org.lwjgl.system.MemoryUtil.NULL; + +public class GLWindow { + + private long window; + + public long getWindow() { + return this.window; + } + + public void init() { + initWindow(); + initRender(); + } + + public void swapWindow() { + glfwSwapBuffers(window); + glfwPollEvents(); + } + + public void destroyWindow() { + glfwFreeCallbacks(window); + glfwDestroyWindow(window); + glfwTerminate(); + glfwSetErrorCallback(null).free(); + } + + public boolean windowShouldClose() { + return glfwWindowShouldClose(window); + } + + private void initWindow() { + GLFWErrorCallback.createPrint(System.err).set(); + + if (!glfwInit()) throw new IllegalStateException("Unable to initialize GLFW"); + glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); + + window = glfwCreateWindow(GLConfigVariable.WIDTH, GLConfigVariable.HEIGHT, GLConfigVariable.TITLE_NAME, GLConfigVariable.IS_FULL_SCREEN ? glfwGetPrimaryMonitor() : NULL, NULL); + if (window == NULL) throw new RuntimeException("Failed to create the window."); + + glfwMakeContextCurrent(window); + glfwSwapInterval(1); + glfwShowWindow(window); + } + + private void initRender() { + GL.createCapabilities(); + glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + + glEnable(GL_TEXTURE_2D); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + } +}