lwjgl3窗口调整最终事件的大小?

时间:2017-06-14 14:12:35

标签: java opengl lwjgl window-resize

我知道您可以使用以下方式跟踪窗口调整大小操作:

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

但是,这种方式可能会调用invoke方法数百次,我只希望最终事件在配置中存储新的大小。如何在不使用某种延迟机制的情况下执行此操作,例如在进一步调用调用时刷新的一秒计时器?

1 个答案:

答案 0 :(得分:1)

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

这允许您在要关闭窗口时设置一次配置数据。回退到这种技术的方法是,如果应用程序崩溃或未调用dispose()方法,则不会保存配置数据。