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