93 lines
3.2 KiB
Java
93 lines
3.2 KiB
Java
package electrosphere.render;
|
||
|
||
import java.nio.IntBuffer;
|
||
|
||
import org.lwjgl.BufferUtils;
|
||
import org.lwjgl.glfw.GLFW;
|
||
import org.lwjgl.opengl.GL;
|
||
import org.lwjgl.opengl.GL44;
|
||
import org.lwjgl.system.MemoryStack;
|
||
import org.lwjgl.system.MemoryUtil;
|
||
|
||
public class GLFWContext {
|
||
|
||
static long window;
|
||
|
||
public static void init(){
|
||
//Initializes opengl
|
||
GLFW.glfwInit();
|
||
//Gives hints to glfw to control how opengl will be used
|
||
GLFW.glfwWindowHint(GLFW.GLFW_CONTEXT_VERSION_MAJOR, 4);
|
||
GLFW.glfwWindowHint(GLFW.GLFW_CONTEXT_VERSION_MINOR, 4);
|
||
GLFW.glfwWindowHint(GLFW.GLFW_OPENGL_PROFILE, GLFW.GLFW_OPENGL_CORE_PROFILE);
|
||
//Creates the window reference object
|
||
window = GLFW.glfwCreateWindow(1920, 1080, "ORPG", GLFW.glfwGetPrimaryMonitor(), MemoryUtil.NULL);
|
||
// Errors for failure to create window (IE: No GUI mode on linux ?)
|
||
if (window == MemoryUtil.NULL) {
|
||
GLFW.glfwTerminate();
|
||
}
|
||
//set resize callback
|
||
// GLFW.glfwSetWindowSizeCallback(window, new GLFWWindowSizeCallbackI(){
|
||
// @Override
|
||
// public void invoke(long window, int width, int height){
|
||
// Globals.WINDOW_HEIGHT = height;
|
||
// Globals.WINDOW_WIDTH = width;
|
||
// }
|
||
// });
|
||
//Makes the window that was just created the current OS-level window context
|
||
GLFW.glfwMakeContextCurrent(window);
|
||
//Maximize it
|
||
GLFW.glfwMaximizeWindow(window);
|
||
//grab actual framebuffer
|
||
IntBuffer xBuffer = BufferUtils.createIntBuffer(1);
|
||
IntBuffer yBuffer = BufferUtils.createIntBuffer(1);
|
||
GLFW.glfwGetFramebufferSize(window, xBuffer, yBuffer);
|
||
MemoryUtil.memFree(xBuffer);
|
||
MemoryUtil.memFree(yBuffer);
|
||
|
||
int bufferWidth = xBuffer.get();
|
||
int bufferHeight = yBuffer.get();
|
||
|
||
//
|
||
// Attack controls callbacks
|
||
//
|
||
//set key callback
|
||
// GLFWContext.glfwSetKeyCallback(window, Globals.controlCallback);
|
||
|
||
//set mouse callback
|
||
// GLFWContext.glfwSetMouseButtonCallback(Globals.window, Globals.mouseCallback);
|
||
|
||
//get title bar dimensions
|
||
// setTitleBarDimensions();
|
||
|
||
//Creates the OpenGL capabilities for the program.
|
||
GL.createCapabilities();
|
||
|
||
//This enables Z-buffering so that farther-back polygons are not drawn over nearer ones
|
||
GL44.glEnable(GL44.GL_CULL_FACE);
|
||
GL44.glDepthFunc(GL44.GL_LEQUAL);
|
||
GL44.glEnable(GL44.GL_DEPTH_TEST);
|
||
|
||
// Support for transparency
|
||
GL44.glEnable(GL44.GL_BLEND);
|
||
GL44.glBlendFunc(GL44.GL_SRC_ALPHA, GL44.GL_ONE_MINUS_SRC_ALPHA);
|
||
|
||
//this disables vsync to make game run faster
|
||
//https://stackoverflow.com/questions/55598376/glfwswapbuffers-is-slow
|
||
GLFW.glfwSwapInterval(0);
|
||
}
|
||
|
||
public static void redraw(){
|
||
//clear screen
|
||
GL44.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
|
||
GL44.glClear(GL44.GL_COLOR_BUFFER_BIT | GL44.
|
||
GL_DEPTH_BUFFER_BIT);
|
||
//draw here
|
||
Mesh.draw();
|
||
//ending stuff
|
||
GLFW.glfwSwapBuffers(window);
|
||
GLFW.glfwPollEvents();
|
||
}
|
||
|
||
}
|