c++ - 在 OpenGL : Will not make Blank Screen (Makes infinite copies instead) 中打开一个窗口

标签 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

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

最佳答案

问题是您永远不会清除屏幕或调用 glfwSwapBuffers

当窗口第一次出现时,它的客户区是无效的,这意味着它需要重绘。 GLFW 不会自动清除屏幕,因为它只会被您的图形场景覆盖(因此额外的清除将是多余的)。但是因为你没有画任何东西,你留下了等同于未初始化的数据。您是否得到一个空白屏幕或它后面的窗口拷贝取决于配置。

要解决此问题,您需要通过register a window refresh callback执行渲染(在本例中,只需调用 glClear(GL_COLOR_BUFFER);)并调用 glfwSwapBuffers.

关于c++ - 在 OpenGL : Will not make Blank Screen (Makes infinite copies instead) 中打开一个窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35899562/

相关文章:

macos - 如何使用 gluOrtho2D(像素空间)在 Mac OSX(Snow Leopard)上启动 OpenGL 上下文

c++ - 现在 Visual C++ 动态运行时库是 Windows 操作系统的一部分吗?

c++ - OpenGL 土壤错误

c++ - opengl中渲染对象的移动

c++ - 替换 vector 中的子 vector

java - 为什么 LWJGL 仅在 Windows 上在先前和当前游戏状态之间闪烁?

c++ - 使用深度缓冲区对 2D Sprite 进行分层

c++ - Qt Layout/Widget 交互 - Layouts within Layouts

c++ - 存储点的四叉树移动

c++ - 为 Windows Mobile 5 编译 Qt 应用程序