glfwSwapBuffers медленно - PullRequest
       64

glfwSwapBuffers медленно

1 голос
/ 09 апреля 2019

Я перенес свое приложение LWJGL из LWJGL 2 в LWJGL 3, и вызов glfwSwapBuffers() очень медленный (до 20 мс на вызов), даже если в игровом цикле не было ни одного вызова рендеринга.У меня уже была эта проблема, когда я пытался использовать Display.update() с LWJGL 2, этот метод тоже был медленным.Я измерил время выполнения с JETM .Моя операционная система - Mac OS X 10.13.3 с графическим адаптером Intel HD Graphics 500

Соответствующий код

 public static void main(String[] args) {
        new MainLoop_I();
    }

    private static final int START_WIDTH = 500;
    private static final int START_HEIGHT = 300;

    private long window;
    private GLFWErrorCallback errorCallback;


    private static GLCapabilities capabilities;

    public MainLoop_I() {        
        init();

        // configure time execution measurement library (JETM)
        BasicEtmConfigurator.configure();
        final EtmMonitor monitor = EtmManager.getEtmMonitor();
        monitor.start();

        loop();

        // print out results of JETM
        monitor.render(new SimpleTextRenderer());
        monitor.stop();

        glfwFreeCallbacks(window);
        glfwDestroyWindow(window);

        glfwTerminate();
        glfwSetErrorCallback(null).free();

        System.exit(0);
    }

    private void init() {
        glfwSetErrorCallback(errorCallback = GLFWErrorCallback.createPrint(System.err));
        System.out.println(glfwGetVersionString());
        if ( !glfwInit() ) throw new IllegalStateException("Unable to initialize GLFW");

        glfwDefaultWindowHints();
        glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE);
        glfwWindowHint(GLFW_DEPTH_BITS, 24);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
        glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
        glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

        window = glfwCreateWindow(START_WIDTH, START_HEIGHT, "Game", NULL, NULL);
        if ( window == NULL ) throw new RuntimeException("Failed to create the GLFW window");



        glfwMakeContextCurrent(window);
        glfwShowWindow(window);
        glfwFocusWindow(window);

        capabilities = GL.createCapabilities();
    }

    private void loop() {
        long lastFrameTime = System.currentTimeMillis();


        glClearColor(0, 0, 0, 1);

        while(! glfwWindowShouldClose(window)) {
            glfwPollEvents();

            long thisFrameTime = System.currentTimeMillis();
            float deltaSeconds = (thisFrameTime - lastFrameTime) / 1000f;
            lastFrameTime = thisFrameTime;


            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


            EtmPoint point = EtmManager.getEtmMonitor().createPoint("MainLoop_I:loop");
            glfwSwapBuffers(window);
            point.collect();

        }
    }

Какие могут быть возможные причины этого очень долгого исполнениявремя

...