lwjgl3 window 调整最终事件的大小?
lwjgl3 window resize final event?
我知道您可以使用以下方法跟踪 window 调整大小操作:
glfwSetWindowSizeCallback(window, wsCallback = new GLFWWindowSizeCallback() {
@Override
public void invoke(long window, int w, int h) {
LOG.info("window resized");
if (w > 0 && h > 0) {
width = w;
height = h;
}
}
});
但是,这样调用方法可能会被调用数百次,我只希望最终事件将新大小存储在配置中。我如何在不使用某种延迟机制(例如在进一步调用时刷新的一秒计时器)的情况下执行此操作?
GLFW 回调的设置方式是在每次调用 glfwPollEvents()
时刷新它们。如果您只想在最终更新时设置配置变量,这本身是不可行的。我会有一个 void dispose()
方法,你可以在其中调用它:
public void dispose() {
try (MemoryStack stack = stackPush()) {
IntBuffer width = stack.ints(1);
IntBuffer height = stack.ints(1);
glfwGetWindowSize(windowID, width, height);
configuration.width = width.get();
configuration.height = height.get();
}
}
这允许您在想要关闭时设置一次配置数据window。此技术的缺点是如果应用程序崩溃或未调用 dispose()
方法,则不会保存配置数据。
我知道您可以使用以下方法跟踪 window 调整大小操作:
glfwSetWindowSizeCallback(window, wsCallback = new GLFWWindowSizeCallback() {
@Override
public void invoke(long window, int w, int h) {
LOG.info("window resized");
if (w > 0 && h > 0) {
width = w;
height = h;
}
}
});
但是,这样调用方法可能会被调用数百次,我只希望最终事件将新大小存储在配置中。我如何在不使用某种延迟机制(例如在进一步调用时刷新的一秒计时器)的情况下执行此操作?
GLFW 回调的设置方式是在每次调用 glfwPollEvents()
时刷新它们。如果您只想在最终更新时设置配置变量,这本身是不可行的。我会有一个 void dispose()
方法,你可以在其中调用它:
public void dispose() {
try (MemoryStack stack = stackPush()) {
IntBuffer width = stack.ints(1);
IntBuffer height = stack.ints(1);
glfwGetWindowSize(windowID, width, height);
configuration.width = width.get();
configuration.height = height.get();
}
}
这允许您在想要关闭时设置一次配置数据window。此技术的缺点是如果应用程序崩溃或未调用 dispose()
方法,则不会保存配置数据。