在OpenGL中打开一个窗口:不会制作空白屏幕(取而代之的是无限复制)

时间:2016-03-09 18:21:45

标签: c++ opengl

所以我已经让我的教授看了这个,他也不知道为什么它不起作用。我目前正在使用我的笔记本电脑,这是有问题的。我也尝试在实验室计算机上运行我的程序,它完全按预期工作。我最近更新了所有的图形内容。以下是我的代码:

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <glm/glm.hpp>
#include <glm/gtx/transform.hpp>
#include <FreeImage.h>

int main()
{
    if (glfwInit() == GL_FALSE)
        return -1;

    GLFWwindow* GLFWwindowPtr = glfwCreateWindow(800, 600, "Name Name DSA1 Engine", NULL, NULL);

    if (GLFWwindowPtr != nullptr)
        glfwMakeContextCurrent(GLFWwindowPtr);
    else
    {
        glfwTerminate();
        return -1;
    }

    if (glewInit() != GLEW_OK)
    {
        glfwTerminate();
        return -1;
    }

    while (!glfwWindowShouldClose(GLFWwindowPtr))
    {
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

我要做的就是用openGL在屏幕上显示一个空白窗口。这一切都运行良好和花花公子,但当一个窗口被绘制到我的屏幕时,它复制它背后的任何东西,而不是一个空白的白色屏幕。关于这一点最令人困惑的是,我的教授在他的笔记本电脑上有相同的代码并且工作正常,当我在实验室机器上运行它时,它对我有用。

我最初认为它是我的图形驱动程序中的东西,所以我更新了这些但它仍然无法正常工作。我提供了一些系统规格,以防万一可能有所帮助。

制造商MSI_NB

型号GT70 2OC / 2OD

系统内存总量32.0 GB RAM

系统类型64位操作系统

处理器核心数4

显示适配器类型NVIDIA GeForce GTX 770M

总可用图形内存1824 MB

专用图形内存192 MB

专用系统内存0 MB

共享系统内存1632 MB

显示适配器驱动程序版本10.18.13.6200

主显示器分辨率1920x1080

DirectX版本DirectX 10

我知道这不是一个真正与代码相关的问题,但我真的很感激能帮助我解决这个问题的人。如果我需要提供任何其他信息,我非常乐意提供!

1 个答案:

答案 0 :(得分:2)

问题是您从不清除屏幕或致电glfwSwapBuffers

当窗口首次出现时,其客户区域无效,这意味着需要重新绘制窗口。 GLFW不会自动清除屏幕,因为它只会被您的图形场景覆盖(因此额外的清晰度将是多余的)。但是既然你没有画任何东西,你就会留下相当于未初始化数据的东西。无论是否有空白屏幕或窗口后面的窗口副本都取决于配置。

要解决此问题,您需要register a window refresh callback通过glfwSetWindowRefreshCallback进行渲染(在这种情况下,只需致电glClear(GL_COLOR_BUFFER);)并致电glfwSwapBuffers