简单的GLFW冻结(想像疯了似的,不停止)

时间:2013-09-25 21:48:20

标签: c++ opengl glfw

我创建了一个非常简单的GLFW窗口实现。我的实现看起来像这样

// Include standard headers
#include <stdio.h>
#include <stdlib.h>

// Include glfw for window handling
#include <GLFW/glfw3.h>

int SCREEN_WIDTH = 1280;
int SCREEN_HEIGHT = 720;

GLFWwindow* window;

int main() {

    if(!glfwInit()) {
        fprintf( stderr, "Failed to initialize GLFW!\n" );
        return -1;
    }

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);


    window = glfwCreateWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Title", NULL, NULL);
    if( !window )
    {
        fprintf( stderr, "Failed to create window!\n" );
        glfwTerminate();
        return -1;
    }

    glClearColor(0.0f, 0.0f, 1.0f, 0.0f);

    do {
        glfwSwapBuffers(window);

    } while(!glfwGetKey(window, GLFW_KEY_ESCAPE));

    glfwTerminate();
    return 0;
}

编译很好,但是当我运行应用程序时它只是“冻结”,没有显示正确的清晰颜色或任何东西。它只是像疯了一样(在Windows 7中“思考” - 光标图标旋转并且永不停止)。 我想知道它为什么像这样冻结,有没有人有想法?

修改
找到解决我问题的方法。我是从GLFW2示例中学习的,但是使用最新版本(GLFW3)要求我重做一些代码;我没有意识到的事情是glSwapBuffers(窗口)调用本身不会调用glfwPollEvents(),这给我带来了问题。

1 个答案:

答案 0 :(得分:1)

  1. 您没有清除缓冲区,因此无法显示清晰的颜色。

  2. 你没有添加任何类型的延迟,所以你将空缓冲区交换出来(“疯狂地思考”)。