c - 使用 glfw 和 vsync 时桌面感觉迟钝

标签 c linux opengl ubuntu glfw

我在使用 OpenGl/glfw 时遇到了一个奇怪的垂直同步问题:当我启用垂直同步时,我的整个桌面感觉很迟钝:我可以移动我的窗口,但速度很慢,我可以使用我的浏览器,但一切都感觉很慢。

当我关闭垂直同步时,我的桌面感觉很好:我可以拖动窗口、移动其他窗口、在我的应用程序运行时使用其他程序,一切正常。

这是在 Ubuntu 12.10 桌面上,使用默认的 Unity。我有一个 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

glfwSwapInterval 设置为 1 时,我的桌面感觉很迟钝,设置为 0 后一切正常。

有谁知道可能导致此问题的原因,因为我想打开垂直同步?

最佳答案

这不是我代码的问题,而是我电脑上 vsync 的问题。我尝试了其他游戏,看看打开 vsync 是否会导致同样的问题,它是否也会导致速度变慢。

关于c - 使用 glfw 和 vsync 时桌面感觉迟钝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15043324/

相关文章:

linux - bash 脚本中的正则表达式(for 循环)

C++从文本文件检查操作系统

c++ - 离屏渲染到帧缓冲区

linux - “glSwapInterval”未在此范围内声明

c - 为什么我的 openGL 纹理只覆盖了我的四边形的一半?包含来源

c - 使用函数定义命令行参数

c - 这段代码是否是整数溢出

linux - 设置USB串口号

c - Google Test C 中的调试、系统函数(fopen、fclose、fread、fwrite、...)和 for 循环

c - 指向函数实用程序的指针