Java tutorial
/* * This file is part of StepByStep. * Copyright (C) 2017 Rodrigo Casamayor. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package es.rocammo.engine; import es.rocammo.sbs.Params; import org.lwjgl.glfw.GLFWKeyCallback; import org.lwjgl.glfw.GLFWVidMode; import org.lwjgl.opengl.GL; import static org.lwjgl.glfw.GLFW.*; import static org.lwjgl.opengl.GL11.*; public class Window { private String title = Params.TITLE; private int width = Params.WIDTH; private int height = Params.HEIGHT; private long windowHandle; private GLFWKeyCallback keyCallback; private boolean vSync = Params.VSYNC; public Window() { // Initialize GLFW. if (!glfwInit()) { throw new IllegalStateException("Unable to initialize GLFW"); } glfwDefaultWindowHints(); glfwWindowHint(GLFW_VISIBLE, GL_FALSE); glfwWindowHint(GLFW_RESIZABLE, GL_TRUE); // Create the window windowHandle = glfwCreateWindow(width, height, title, 0, 0); // Setup a key callback. It will be called every time a key is pressed, repeated or released. glfwSetKeyCallback(windowHandle, keyCallback = new GLFWKeyCallback() { @Override public void invoke(long window, int key, int scancode, int action, int mods) { if (key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE) { glfwSetWindowShouldClose(window, true); } } }); // Get the resolution of the primary monitor GLFWVidMode vidMode = glfwGetVideoMode(glfwGetPrimaryMonitor()); // Center the window glfwSetWindowPos(windowHandle, (vidMode.width() - width) / 2, (vidMode.height() - height) / 2); // Make the OpenGL context current glfwMakeContextCurrent(windowHandle); // Enable v-sync if (isvSync()) glfwSwapInterval(1); // Make the window visible glfwShowWindow(windowHandle); GL.createCapabilities(); // Set the clear color glClearColor(0.027f, 0.212f, 0.259f, 1.0f); } public void bind() { glfwPollEvents(); } public void clear() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } public void unbind() { glfwSwapBuffers(windowHandle); } public int getWidth() { return width; } public int getHeight() { return height; } public boolean isvSync() { return vSync; } public boolean isKeyPressed(int keyCode) { return glfwGetKey(windowHandle, keyCode) == GLFW_PRESS; } public boolean windowShouldClose() { return glfwWindowShouldClose(windowHandle); } }