无法启动OpenGL窗口

时间:2018-09-16 02:37:41

标签: c++ opengl

据我所知,我已经正确安装了所有库,但是由于某些原因,glfwWindowCreate返回了NULL。我目前使用的是Dell XPS 15,所以我想知道这是否与我可能在集成显卡上运行这一事实有关,因为它对旋转1050ti的要求不高。一般来说,我是OpenGL的新手,所以不确定我的代码编写是否正确,因此也将其发布在这里:

glewExperimental = true;
if (!glewInit())
{
    fprintf(stderr, "Failed to initialize GLEW!\n");
    return -1;
}

glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

GLFWwindow* window;
window = glfwCreateWindow(1920, 1080, "Test Window", NULL, NULL);
if (window == NULL)
{
    fprintf(stderr, "Failed to initialize the window.");
    std::cin.ignore();
    glfwTerminate();
    return -1;
}
glfwMakeContextCurrent(window);
glewExperimental = true;
if (glewInit() != GLEW_OK)
{
    fprintf(stderr, "Failed to initialize GLEW!");
    return -1;
}
std::cin.ignore();
std::cin.ignore();

我刚刚将NVIDIA驱动程序更新为最新更新,所以(可能)不是我希望的。不幸的是,我似乎无法打开窗口。

2 个答案:

答案 0 :(得分:1)

您未初始化GLFW libraray。在使用GLFW之前,必须先通过glfwInit对其进行初始化。

GLEW libraray必须在创建有效的OpenGL上下文并成为最新的OpenGL上下文之后进行初始化。参见Initializing GLEW

以某种方式更改您的代码,以解决您的问题:

if ( glfwInit() != GLFW_TRUE ) // intialize GLFW
{
    // error handling 
}

glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

GLFWwindow* window;
window = glfwCreateWindow(1920, 1080, "Test Window", NULL, NULL);
if (window == NULL)
{
    // error handling
}
glfwMakeContextCurrent(window);

// now the OpenGL context is valid and current

glewExperimental = true;
if (glewInit() != GLEW_OK) // initialize GLEW
{
    // error handling
}

答案 1 :(得分:0)

如果在Windows上,启用Optimus的驱动程序将查找 exported 变量。那就是应用程序必须将其导出以供其他模块访问。例如:

extern "C" {
 _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
}

值1表示使用高性能图形。 0或没有任何出口将意味着使用低调。

现在,如果您使用的是MacOs或Linux,或者问题可能出在其他地方。.MAc不喜欢Core配置文件...在Linux上,您可能会忘记禁用内核模式设置和默认的开源驱动程序。