forked from StarOpenSource/Engine
Sort methods in GLFW and OpenGL window classes
This commit is contained in:
parent
ec3ecc0113
commit
2899ba2e8a
2 changed files with 119 additions and 100 deletions
|
@ -57,6 +57,7 @@ public abstract class GlfwWindow extends Window {
|
||||||
*/
|
*/
|
||||||
private long identifierLong;
|
private long identifierLong;
|
||||||
|
|
||||||
|
// ------------------------------------------------ [ Window initialization ] ------------------------------------------------ //
|
||||||
/**
|
/**
|
||||||
* Creates a new window.
|
* Creates a new window.
|
||||||
*
|
*
|
||||||
|
@ -100,104 +101,6 @@ public abstract class GlfwWindow extends Window {
|
||||||
*/
|
*/
|
||||||
protected abstract void initializeGlfwWindow() throws Throwable;
|
protected abstract void initializeGlfwWindow() throws Throwable;
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates the window state.
|
|
||||||
*
|
|
||||||
* @since v1-alpha2
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void updateState() {
|
|
||||||
// Ensure running on the main thread
|
|
||||||
if (!Miscellaneous.onMainThread())
|
|
||||||
throw new NotOnMainThreadException();
|
|
||||||
|
|
||||||
// Own context
|
|
||||||
ownContext();
|
|
||||||
|
|
||||||
// Set swap interval based on isDisallowTearing setting
|
|
||||||
glfwSwapInterval(Miscellaneous.getIntegerizedBoolean(GraphicsSubsystemConfiguration.getInstance().isDisallowTearing()));
|
|
||||||
|
|
||||||
// Integer arrays, used for 'size' and 'position'
|
|
||||||
int[] width = new int[0];
|
|
||||||
int[] height = new int[0];
|
|
||||||
|
|
||||||
// Set window size
|
|
||||||
glfwGetWindowSize(identifierLong, width, height);
|
|
||||||
super.setSize(new Vec2i(width[0], height[0]));
|
|
||||||
|
|
||||||
// Set window position
|
|
||||||
glfwGetWindowPos(identifierLong, width, height);
|
|
||||||
super.setPosition(new Vec2i(width[0], height[0]));
|
|
||||||
|
|
||||||
// Set window mode
|
|
||||||
if (Miscellaneous.getBooleanizedInteger(glfwGetWindowAttrib(identifierLong, GLFW_ICONIFIED)))
|
|
||||||
super.setWindowMode(WindowMode.MINIMIZED);
|
|
||||||
else if (Miscellaneous.getBooleanizedInteger(glfwGetWindowAttrib(identifierLong, GLFW_MAXIMIZED)))
|
|
||||||
super.setWindowMode(WindowMode.MAXIMIZED);
|
|
||||||
else if (Miscellaneous.getBooleanizedInteger(glfwGetWindowAttrib(identifierLong, GLFW_VISIBLE)))
|
|
||||||
super.setWindowMode(WindowMode.WINDOWED);
|
|
||||||
else if (Miscellaneous.getBooleanizedInteger(glfwGetWindowAttrib(identifierLong, GLFW_VISIBLE)))
|
|
||||||
super.setWindowMode(WindowMode.HIDDEN);
|
|
||||||
|
|
||||||
// Set booleans
|
|
||||||
super.setResizable(Miscellaneous.getBooleanizedInteger(glfwGetWindowAttrib(identifierLong, GLFW_RESIZABLE)));
|
|
||||||
super.setOnTop(Miscellaneous.getBooleanizedInteger(glfwGetWindowAttrib(identifierLong, GLFW_FLOATING)));
|
|
||||||
super.setTransparent(Miscellaneous.getBooleanizedInteger(glfwGetWindowAttrib(identifierLong, GLFW_TRANSPARENT_FRAMEBUFFER)));
|
|
||||||
|
|
||||||
// Make Graphics API update it's state
|
|
||||||
updateGlfwState();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates the state of the GLFW window.
|
|
||||||
*
|
|
||||||
* @throws Throwable throwable
|
|
||||||
* @since v1-alpha2
|
|
||||||
*/
|
|
||||||
protected abstract void updateGlfwState();
|
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
|
||||||
@Override
|
|
||||||
public void render() throws NotOnMainThreadException {
|
|
||||||
// Ensure running on the main thread
|
|
||||||
if (!Miscellaneous.onMainThread())
|
|
||||||
throw new NotOnMainThreadException();
|
|
||||||
|
|
||||||
glfwSwapBuffers(identifierLong);
|
|
||||||
glfwPollEvents();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
|
||||||
@Override
|
|
||||||
public boolean isClosureRequested() {
|
|
||||||
return glfwWindowShouldClose(identifierLong);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
|
||||||
@Override
|
|
||||||
public boolean isFocused() {
|
|
||||||
return Tristate.toBoolean(Miscellaneous.getTristatedInteger(glfwGetWindowAttrib(identifierLong, GLFW_FOCUSED)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
|
||||||
public void focus() {
|
|
||||||
glfwFocusWindow(identifierLong);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
|
||||||
public void requestAttention() {
|
|
||||||
glfwRequestWindowAttention(identifierLong);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates the OpenGL context.
|
|
||||||
*
|
|
||||||
* @since v1-alpha2
|
|
||||||
*/
|
|
||||||
public void ownContext() {
|
|
||||||
glfwMakeContextCurrent(identifierLong);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* (Re-)Creates the GLFW window.
|
* (Re-)Creates the GLFW window.
|
||||||
*
|
*
|
||||||
|
@ -236,12 +139,16 @@ public abstract class GlfwWindow extends Window {
|
||||||
identifierLong = identifier;
|
identifierLong = identifier;
|
||||||
setIdentifier(String.valueOf(identifier));
|
setIdentifier(String.valueOf(identifier));
|
||||||
|
|
||||||
|
// Own context
|
||||||
|
ownContext();
|
||||||
|
|
||||||
|
// Set swap interval based on isDisallowTearing setting
|
||||||
|
glfwSwapInterval(Miscellaneous.getIntegerizedBoolean(GraphicsSubsystemConfiguration.getInstance().isDisallowTearing()));
|
||||||
|
|
||||||
// Update the window state
|
// Update the window state
|
||||||
setTitle(getTitle());
|
|
||||||
setSize(getSize());
|
setSize(getSize());
|
||||||
setMinimumSize(getMinimumSize());
|
setMinimumSize(getMinimumSize());
|
||||||
setMaximumSize(getMaximumSize());
|
setMaximumSize(getMaximumSize());
|
||||||
setPosition(getPosition());
|
|
||||||
setWindowMode(getWindowMode());
|
setWindowMode(getWindowMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,6 +159,116 @@ public abstract class GlfwWindow extends Window {
|
||||||
*/
|
*/
|
||||||
public abstract void setWindowHints();
|
public abstract void setWindowHints();
|
||||||
|
|
||||||
|
// ------------------------------------------------ [ State updates ] ------------------------------------------------ //
|
||||||
|
/**
|
||||||
|
* Updates the window state.
|
||||||
|
*
|
||||||
|
* @since v1-alpha2
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void updateState() {
|
||||||
|
// Ensure running on the main thread
|
||||||
|
if (!Miscellaneous.onMainThread())
|
||||||
|
throw new NotOnMainThreadException();
|
||||||
|
|
||||||
|
// Own context
|
||||||
|
ownContext();
|
||||||
|
|
||||||
|
// Set swap interval based on isDisallowTearing setting
|
||||||
|
glfwSwapInterval(Miscellaneous.getIntegerizedBoolean(GraphicsSubsystemConfiguration.getInstance().isDisallowTearing()));
|
||||||
|
|
||||||
|
/*
|
||||||
|
// Initialize IntBuffers, used for 'size' and 'position'
|
||||||
|
IntBuffer width = MemoryUtil.memAllocInt(1);
|
||||||
|
IntBuffer height = MemoryUtil.memAllocInt(1);
|
||||||
|
|
||||||
|
// Update window size
|
||||||
|
glfwGetFramebufferSize(identifierLong, width, height);
|
||||||
|
super.setSize(new Vec2i(width.get(0), height.get(0)));
|
||||||
|
|
||||||
|
// Clear IntBuffers
|
||||||
|
width.clear();
|
||||||
|
height.clear();
|
||||||
|
|
||||||
|
// Update window position
|
||||||
|
glfwGetWindowPos(identifierLong, width, height);
|
||||||
|
super.setPosition(new Vec2i(width.get(0), height.get(0)));
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Update window mode
|
||||||
|
if (Miscellaneous.getBooleanizedInteger(glfwGetWindowAttrib(identifierLong, GLFW_ICONIFIED)))
|
||||||
|
super.setWindowMode(WindowMode.MINIMIZED);
|
||||||
|
else if (Miscellaneous.getBooleanizedInteger(glfwGetWindowAttrib(identifierLong, GLFW_MAXIMIZED)))
|
||||||
|
super.setWindowMode(WindowMode.MAXIMIZED);
|
||||||
|
else if (Miscellaneous.getBooleanizedInteger(glfwGetWindowAttrib(identifierLong, GLFW_VISIBLE)))
|
||||||
|
super.setWindowMode(WindowMode.WINDOWED);
|
||||||
|
else if (Miscellaneous.getBooleanizedInteger(glfwGetWindowAttrib(identifierLong, GLFW_VISIBLE)))
|
||||||
|
super.setWindowMode(WindowMode.HIDDEN);
|
||||||
|
|
||||||
|
// Update booleans
|
||||||
|
super.setResizable(Miscellaneous.getBooleanizedInteger(glfwGetWindowAttrib(identifierLong, GLFW_RESIZABLE)));
|
||||||
|
super.setOnTop(Miscellaneous.getBooleanizedInteger(glfwGetWindowAttrib(identifierLong, GLFW_FLOATING)));
|
||||||
|
super.setTransparent(Miscellaneous.getBooleanizedInteger(glfwGetWindowAttrib(identifierLong, GLFW_TRANSPARENT_FRAMEBUFFER)));
|
||||||
|
|
||||||
|
// Make Graphics API update it's state
|
||||||
|
updateGlfwState();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the state of the GLFW window.
|
||||||
|
*
|
||||||
|
* @throws Throwable throwable
|
||||||
|
* @since v1-alpha2
|
||||||
|
*/
|
||||||
|
protected abstract void updateGlfwState();
|
||||||
|
|
||||||
|
// ------------------------------------------------ [ Rendering ] ------------------------------------------------ //
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@Override
|
||||||
|
public void render() throws NotOnMainThreadException {
|
||||||
|
// Ensure running on the main thread
|
||||||
|
if (!Miscellaneous.onMainThread())
|
||||||
|
throw new NotOnMainThreadException();
|
||||||
|
|
||||||
|
glfwSwapBuffers(identifierLong);
|
||||||
|
glfwPollEvents();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------ [ GLFW handling ] ------------------------------------------------ //
|
||||||
|
/**
|
||||||
|
* Updates the OpenGL context.
|
||||||
|
*
|
||||||
|
* @since v1-alpha2
|
||||||
|
*/
|
||||||
|
public void ownContext() {
|
||||||
|
glfwMakeContextCurrent(identifierLong);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------ [ Information/Action methods ] ------------------------------------------------ //
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@Override
|
||||||
|
public boolean isClosureRequested() {
|
||||||
|
return glfwWindowShouldClose(identifierLong);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@Override
|
||||||
|
public boolean isFocused() {
|
||||||
|
return Tristate.toBoolean(Miscellaneous.getTristatedInteger(glfwGetWindowAttrib(identifierLong, GLFW_FOCUSED)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
public void focus() {
|
||||||
|
glfwFocusWindow(identifierLong);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
public void requestAttention() {
|
||||||
|
glfwRequestWindowAttention(identifierLong);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------ [ Setter overrides ] ------------------------------------------------ //
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public void setName(@NotNull String name) {
|
public void setName(@NotNull String name) {
|
||||||
|
|
|
@ -38,6 +38,7 @@ import static org.lwjgl.glfw.GLFW.*;
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({ "unused" })
|
@SuppressWarnings({ "unused" })
|
||||||
public class OpenGlWindow extends GlfwWindow {
|
public class OpenGlWindow extends GlfwWindow {
|
||||||
|
// ------------------------------------------------ [ Window initialization ] ------------------------------------------------ //
|
||||||
/**
|
/**
|
||||||
* Creates a new window.
|
* Creates a new window.
|
||||||
*
|
*
|
||||||
|
@ -83,6 +84,7 @@ public class OpenGlWindow extends GlfwWindow {
|
||||||
glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_EGL_CONTEXT_API);
|
glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_EGL_CONTEXT_API);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------ [ Information/Action methods ] ------------------------------------------------ //
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue