所以我让我的教授已经看过这个,他不知道为什么它不起作用。我目前正在使用笔记本电脑工作,但笔记本电脑出现了问题。我还尝试在实验室计算机上运行我的程序,它完全按预期运行。我最近更新了我所有的图形资料。下面是我的代码:
#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/