1

OpenGl / glfw を使用すると、奇妙な vsync の問題が発生します: vsync を有効にすると、デスクトップ全体が遅く感じます: ウィンドウを移動できますが、動きが遅く、ブラウザを使用できますが、すべてが遅く感じます。

vsync をオフにすると、デスクトップは問題なく動作します。アプリケーションの実行中にウィンドウをドラッグしたり、他のウィンドウを移動したり、他のプログラムを使用したりでき、すべて正常に動作します。

これは、デフォルトの Unity を使用する Ubuntu 12.10 デスクトップ上にあります。私は NVidia GPU を持っており、専用のドライバーを使用しています。

これが私が使用しているサンプルコードです。これは本当に基本的なものです(何も描画しません):

#include <stdio.h>
#include <GL/glew.h>
#include <GL/glfw.h>

int main() {
    glewExperimental = GL_TRUE;
    glewInit();

    glfwInit();
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
    glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwOpenWindowHint(GLFW_WINDOW_NO_RESIZE, GL_TRUE);
    glfwOpenWindow(800, 600, 0, 0, 0, 0 ,0, 0, GLFW_WINDOW);

    unsigned int framecounter = 0;
    double start = glfwGetTime();

    glfwSwapInterval(1); //0 to disable vsync, 1 to enable it

    while (glfwGetWindowParam(GLFW_OPENED)) {
        glfwSwapBuffers();
        framecounter++;

        double now = glfwGetTime();
        if (now - start > 1) {
            float fps = framecounter / (now - start);
            printf("FPS: %f\n", fps);

            framecounter = 0;
            start = glfwGetTime();
        }
    }

    glfwTerminate();
}

コンパイル:

cc `pkg-config --cflags glew gl libglfw` -g -Wall -O3 -std=gnu99    helloworld.c  `pkg-config --libs glew gl libglfw`  -o helloworld

1にglfwSwapInterval設定するとデスクトップの動作が遅くなり、0 に設定するとすべて正常に動作します。

vsync をオンにしたいので、この問題の原因を知っている人はいますか?

4

1 に答える 1

0

これは私のコードの問題ではありませんが、私のコンピューターのvsyncの問題です。他のゲームを試してみて、vsyncをオンにすると同じ問題が発生し、速度が低下するかどうかを確認しました。

于 2013-03-06T22:21:58.400 に答える