2016-02-27 1392 views
1

对代码运行几次测试后,我确定GLFW和GLEW都成功初始化,但当我尝试创建要用于GLFW函数的GLFWwindow*对象时,glfwCreateWindow()函数返回nullptr。为什么是这个,我该如何解决它?这里是我的代码:无法在C++中创建GLFWwindow - glfwCreateWindow返回nullptr?

#include <iostream> 
#define GLEW_STATIC 
#include <GL/glew.h> 
#include <GLFW/glfw3.h> 

const GLuint windowWidth = 500, windowHeight = 500; 

int main() 
{ 
    glfwInit(); 

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 

    GLFWwindow* window = glfwCreateWindow(windowWidth, windowHeight, "Learn OpenGL", nullptr, nullptr); 
    if (window == nullptr) { 
     std::cout << "Failed to create GLFW window!" << std::endl; 
     char myvar1; std::cin >> myvar1; 
     glfwTerminate(); 
     return -1; 
    } 
    glfwMakeContextCurrent(window); 
    glewExperimental = GL_TRUE; 
    if (glewInit() != GL_TRUE) { 
     std::cout << "Failed to initialize GLEW" << std::endl; 
     char myvar2; std::cin >> myvar2; 
     return -1; 
    } 

    glViewport(0, 0, windowWidth, windowHeight); 
    while (!glfwWindowShouldClose(window)) { 
     glfwPollEvents(); 
     glfwSwapBuffers(window); 
    } 

    glfwTerminate(); 

    return 0; 
} 
+0

文档说“Windows:如果Microsoft GDI软件OpenGL实现是唯一可用,则窗口创建将失败。”你使用什么视频卡,你有最新的驱动程序,并且你正在运行远程桌面还是在控制台会话中? –

+0

使用1.9GHz赛扬的板载显卡。我会尝试更新驱动程序。 –

+0

使用OpenGL Extensions Viewer来确认您的GPU实际支持3.3。我遇到了同样的问题,事实证明,Parallels的GPU仿真只能达到3.2,但这正是我尝试在虚拟机上做图形所得到的结果。 –

回答

2

这可能是因为你的上下文创建指定3.3版本和你的OpenGL版本低于3.3。

OpenGL:GLFW_CONTEXT_VERSION_MAJOR和GLFW_CONTEXT_VERSION_MINOR不是硬约束,但如果创建的上下文的OpenGL版本小于请求的版本,则创建将失败。

这可能,如果你使用的是有2个GPU的笔记本电脑发生。他们这样做是出于功耗的原因,大多数应用程序将使用标准GPU运行,而对于游戏,例如它将使用高性能的应用程序。

例如我的笔记本电脑具有内置Intel(R)HD图形3000(3.1版本的OpenGL)GPU和一个的Nvidia GeForce GT 630M(4.4版本的OpenGL)GPU。

如果您右键单击应用程序快捷方式并选择“与图形处理器一起运行”,则可以看到您的笔记本电脑是否具有此功能: - “高性能(NVIDIA)处理器” - “集成显卡(默认)”

的问题是,在编辑器(日食/ MS Visual Studio中,等。)(在其中运行你的代码)将使用默认之一,通常有一个比你其他的GPU更低版本的OpenGL。

您可以随时与您的高性能GPU上运行的编辑程序解决此问题。

如果你不使用笔记本电脑或只能有一个,然后GPU尝试更新的驱动程序。