Java LWJGL. Зависает система. Linux

При перемещение окна приложения зависает система. Система Linux ubuntu 22.04 LTS amd ryzen 5 3500 gtx 1650 16 gb озу

class HelloWorld {

    // обработка окна
    private long window;

    public void run() {
        System.out.println("Hello LWJGL " + Version.getVersion() + "!");

        init();
        loop();

        // Открыть окно обратным вызовом и уничтожить окно
        glfwFreeCallbacks(window);
        glfwDestroyWindow(window);

        // Завершить GLFW и высвободить ошибку обратного вызова
        glfwTerminate();
        glfwSetErrorCallback(null).free();
    }

    private void init() {
        // Настройка ошибок обратного вызова. Реализация по умолчанию
        // сообщение об ошибке в System.err.
        GLFWErrorCallback.createPrint(System.err).set();

        // Инициализировать GLFW. Большинство функций GLFW не будут работать, до того как это будет сделано.
        if ( !glfwInit() )
            throw new IllegalStateException("Unable to initialize GLFW");

        // Конфигурируем GLFW
        glfwDefaultWindowHints(); // необязательно, текущие подсказки окна уже по умолчанию
        glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); // окно останется скрытым после создания
        glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // размеру окна будет изменяемым

        // Создать окно
        window = glfwCreateWindow(300, 300, "Hello World!", NULL, NULL);
        if ( window == NULL )
            throw new RuntimeException("Failed to create the GLFW window");

        // Настроить клавишу обратного вызова. Он будет вызываться каждый раз, когда клавиша нажимается повторно или отпускается.
        glfwSetKeyCallback(window, (window, key, scancode, action, mods) -> {
            if ( key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE )
                glfwSetWindowShouldClose(window, true); // Мы обнаружим это в цикле рендеринга
        });

        // Получить стек потока и передать новый кадр
        try ( MemoryStack stack = stackPush() ) {
            IntBuffer pWidth = stack.mallocInt(1); // int*
            IntBuffer pHeight = stack.mallocInt(1); // int*

            // Получить размер окна, переданного glfwCreateWindow
            glfwGetWindowSize(window, pWidth, pHeight);

            // Получить разрешение основного монитора
            GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());

            // Центрировать окно
            glfwSetWindowPos(
                    window,
                    (vidmode.width() - pWidth.get(0)) / 2,
                    (vidmode.height() - pHeight.get(0)) / 2
            );
        } // кадр стека автоматически открывается

        // Сделать контекст OpenGL текущим
        glfwMakeContextCurrent(window);
        // Включить v-sync
        glfwSwapInterval(1);

        // Сделать окно видимым
        glfwShowWindow(window);
    }

    private void loop() {
        // Эта строка имеет решающее значение для взаимодействия LWJGL с
        // контекстом OpenGL GLFW или с любым контекстом, который управляется извне.
        // LWJGL обнаруживает текущий контекст, в текущем потоке,
        // создает экземпляр GLCapabilities и делает привязки OpenGL
        // доступными для использования.
        GL.createCapabilities();

        // Установите прозрачный цвет
        glClearColor(1.0f, 0.0f, 0.0f, 0.0f);

        // Запустите цикл рендеринга, до тех пор пока пользователь не попытается закрыть
        // окно или нажал клавишу ESCAPE.
        while ( !glfwWindowShouldClose(window) ) {
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // очистить framebuffer

            glfwSwapBuffers(window); // поменять цвет буферов

            // Опрос событий окна. Клавиша обратного вызова выше, будет вызываться
            // только во время этого вызова.
            glfwPollEvents();
        }
    }

    public static void main(String[] args) {
        new HelloWorld().run();
    }

}

Ответы (0 шт):