fluid-sim/src/main/java/electrosphere/render/GLFWContext.java
2023-07-04 13:20:52 -04:00

93 lines
3.2 KiB
Java
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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