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() 方法,则不会保存配置数据。