Sam*_*n B 2 c++ opengl glew glfw visual-studio
在对代码运行几次测试后,我确定 GLFW 和 GLEW 都已成功初始化,但当我尝试创建一个GLFWwindow*与 GLFW 函数一起使用的对象时,该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;
}
Run Code Online (Sandbox Code Playgroud)
这可能是因为您为上下文创建指定了 3.3 版本,而您的 opengl 版本低于 3.3。
OpenGL: GLFW_CONTEXT_VERSION_MAJOR 和 GLFW_CONTEXT_VERSION_MINOR 不是硬约束,但如果创建的上下文的 OpenGL 版本低于请求的版本,则创建将失败。
如果您使用的是具有 2 个 GPU 的笔记本电脑,则可能会发生这种情况。他们这样做是出于功耗的原因,大多数应用程序将使用标准 GPU 运行,例如,对于游戏,它将使用高性能 GPU。
例如,我的笔记本电脑有一个内置的 Intel(R) HD Graphics 3000(3.1 opengl 版本)GPU 和一个 NVIDIA geforce gt 630M(4.4 opengl 版本)GPU。
如果您右键单击应用程序快捷方式并选择“使用图形处理器运行”,您可以查看您的笔记本电脑是否具有此功能: - “高性能 (NVIDIA) 处理器” - “集成显卡(默认)”
问题是编辑器(eclipse/ms Visual Studio 等)(您在其中运行代码)将使用默认版本,并且通常具有比其他 GPU 低得多的 opengl 版本。
您可以通过始终使用高性能 GPU 运行编辑器程序来解决此问题。
如果您没有使用笔记本电脑或只有一个 GPU,请尝试更新您的驱动程序。
| 归档时间: |
|
| 查看次数: |
3608 次 |
| 最近记录: |