所以我已经让我的教授看了这个,他也不知道为什么它不起作用。我目前正在使用我的笔记本电脑,这是有问题的。我也尝试在实验室计算机上运行我的程序,它完全按预期工作。我最近更新了所有的图形内容。以下是我的代码:
#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
我知道这不是一个真正与代码相关的问题,但我真的很感激能帮助我解决这个问题的人。如果我需要提供任何其他信息,我非常乐意提供!
答案 0 :(得分:2)
问题是您从不清除屏幕或致电glfwSwapBuffers
。
当窗口首次出现时,其客户区域无效,这意味着需要重新绘制窗口。 GLFW不会自动清除屏幕,因为它只会被您的图形场景覆盖(因此额外的清晰度将是多余的)。但是既然你没有画任何东西,你就会留下相当于未初始化数据的东西。无论是否有空白屏幕或窗口后面的窗口副本都取决于配置。
要解决此问题,您需要register a window refresh callback通过glfwSetWindowRefreshCallback
进行渲染(在这种情况下,只需致电glClear(GL_COLOR_BUFFER);
)并致电glfwSwapBuffers
。