Add WindowManager class, get window drawing to screen and create all capabilities. this is the rest of the previous commit because im dumb
This commit is contained in:
parent
402e4e4bb7
commit
5c9ef20e6b
3 changed files with 182 additions and 1 deletions
8
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
8
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="AutoCloseableResource" enabled="true" level="WARNING" enabled_by_default="true">
|
||||||
|
<option name="METHOD_MATCHER_CONFIG" value="java.util.Formatter,format,java.io.Writer,append,com.google.common.base.Preconditions,checkNotNull,org.hibernate.Session,close,java.io.PrintWriter,printf,java.io.PrintStream,printf,org.lwjgl.glfw.GLFW,glfwSetFramebufferSizeCallback" />
|
||||||
|
</inspection_tool>
|
||||||
|
</profile>
|
||||||
|
</component>
|
|
@ -1,9 +1,17 @@
|
||||||
package com.okseby.Main;
|
package com.okseby.core;
|
||||||
|
|
||||||
import org.lwjgl.Version;
|
import org.lwjgl.Version;
|
||||||
|
|
||||||
public class Launcher {
|
public class Launcher {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
System.out.println("LWJGL Version: " + Version.getVersion());
|
System.out.println("LWJGL Version: " + Version.getVersion());
|
||||||
|
|
||||||
|
WindowManager window = new WindowManager("Warabi Engine", 1600, 900, false);
|
||||||
|
window.init();
|
||||||
|
|
||||||
|
while (!window.windowShouldClose())
|
||||||
|
window.update();
|
||||||
|
|
||||||
|
window.cleanup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
165
src/main/java/com/okseby/core/WindowManager.java
Normal file
165
src/main/java/com/okseby/core/WindowManager.java
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
package com.okseby.core;
|
||||||
|
|
||||||
|
import org.joml.Matrix4f;
|
||||||
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
import org.lwjgl.glfw.GLFWErrorCallback;
|
||||||
|
import org.lwjgl.glfw.GLFWVidMode;
|
||||||
|
import org.lwjgl.opengl.GL;
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
import org.lwjgl.system.MemoryUtil;
|
||||||
|
|
||||||
|
public class WindowManager {
|
||||||
|
public static final float FOV = (float) Math.toRadians(60);
|
||||||
|
public static final float Z_NEAR = 0.01f;
|
||||||
|
public static final float Z_FAR = 1000f;
|
||||||
|
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
private int width, height;
|
||||||
|
private long window;
|
||||||
|
|
||||||
|
private boolean resizeable, vSync;
|
||||||
|
|
||||||
|
private final Matrix4f projectionMatrix;
|
||||||
|
|
||||||
|
public WindowManager(String title, int width, int height, boolean vSync) {
|
||||||
|
this.title = title;
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
this.vSync = vSync;
|
||||||
|
|
||||||
|
projectionMatrix = new Matrix4f();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init() {
|
||||||
|
GLFWErrorCallback.createPrint(System.err).set();
|
||||||
|
|
||||||
|
if (!GLFW.glfwInit())
|
||||||
|
throw new IllegalStateException("Unable to initialize GLFW!");
|
||||||
|
|
||||||
|
GLFW.glfwDefaultWindowHints();
|
||||||
|
GLFW.glfwWindowHint(GLFW.GLFW_VISIBLE, GL11.GL_FALSE);
|
||||||
|
GLFW.glfwWindowHint(GLFW.GLFW_RESIZABLE, GL11.GL_TRUE);
|
||||||
|
GLFW.glfwWindowHint(GLFW.GLFW_CONTEXT_VERSION_MAJOR, 3);
|
||||||
|
GLFW.glfwWindowHint(GLFW.GLFW_CONTEXT_VERSION_MINOR, 2);
|
||||||
|
GLFW.glfwWindowHint(GLFW.GLFW_OPENGL_PROFILE, GLFW.GLFW_OPENGL_CORE_PROFILE);
|
||||||
|
GLFW.glfwWindowHint(GLFW.GLFW_OPENGL_FORWARD_COMPAT, GL11.GL_TRUE);
|
||||||
|
|
||||||
|
boolean maximized = false;
|
||||||
|
if (width == 0 || height == 0) {
|
||||||
|
width = 100;
|
||||||
|
height = 100;
|
||||||
|
|
||||||
|
GLFW.glfwWindowHint(GLFW.GLFW_MAXIMIZED, GLFW.GLFW_TRUE);
|
||||||
|
maximized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
window = GLFW.glfwCreateWindow(width, height, title, MemoryUtil.NULL, MemoryUtil.NULL);
|
||||||
|
if (window == MemoryUtil.NULL)
|
||||||
|
throw new RuntimeException("Failed to create GLFW window!");
|
||||||
|
|
||||||
|
GLFW.glfwSetFramebufferSizeCallback(window, (window, width, height) -> {
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
this.setResizeable(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
GLFW.glfwSetKeyCallback(window, (window, key, scancode, action, mods) -> {
|
||||||
|
if (key == GLFW.GLFW_KEY_ESCAPE || action == GLFW.GLFW_RELEASE)
|
||||||
|
GLFW.glfwSetWindowShouldClose(window, true);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (maximized)
|
||||||
|
GLFW.glfwMaximizeWindow(window);
|
||||||
|
else {
|
||||||
|
GLFWVidMode vidMode = GLFW.glfwGetVideoMode(GLFW.glfwGetPrimaryMonitor());
|
||||||
|
GLFW.glfwSetWindowPos(window, (vidMode.width() - width) / 2, (vidMode.height() - height) / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
GLFW.glfwMakeContextCurrent(window);
|
||||||
|
|
||||||
|
if (isvSync())
|
||||||
|
GLFW.glfwSwapInterval(1);
|
||||||
|
|
||||||
|
GLFW.glfwShowWindow(window);
|
||||||
|
|
||||||
|
GL.createCapabilities();
|
||||||
|
|
||||||
|
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
GL11.glEnable(GL11.GL_DEPTH_TEST);
|
||||||
|
GL11.glEnable(GL11.GL_STENCIL_TEST);
|
||||||
|
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||||
|
GL11.glCullFace(GL11.GL_BACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update() {
|
||||||
|
GLFW.glfwSwapBuffers(window);
|
||||||
|
GLFW.glfwPollEvents();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void cleanup() {
|
||||||
|
GLFW.glfwDestroyWindow(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClearColor(float r, float g, float b, float a) {
|
||||||
|
GL11.glClearColor(r, g, b, a);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isKeyPressed(int keycode) {
|
||||||
|
return GLFW.glfwGetKey(window, keycode) == GLFW.GLFW_PRESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean windowShouldClose() {
|
||||||
|
return GLFW.glfwWindowShouldClose(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
GLFW.glfwSetWindowTitle(window, title);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isResizeable() {
|
||||||
|
return resizeable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isvSync() {
|
||||||
|
return vSync;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setvSync(boolean vSync) {
|
||||||
|
this.vSync = vSync;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setResizeable(boolean resizeable) {
|
||||||
|
this.resizeable = resizeable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getWidth() {
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getHeight() {
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getWindow() {
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Matrix4f getProjectionMatrix() {
|
||||||
|
return projectionMatrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Matrix4f updateProjectionMatrix() {
|
||||||
|
float aspectRatio = (float) width / height;
|
||||||
|
return projectionMatrix.setPerspective(FOV, aspectRatio, Z_NEAR, Z_FAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Matrix4f updateProjectionMatrix(Matrix4f matrix) {
|
||||||
|
float aspectRatio = (float) width / height;
|
||||||
|
return matrix.setPerspective(FOV, aspectRatio, Z_NEAR, Z_FAR);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue