MinGW OpenGL版本过低
我在按照网上的 OpenGL 教程编代码的时候,遇到了这样的问题: glCreateShader 函数不存在。结果我发现这是我的 MinGW 提供的 OpenGL 版本过低导致的,我获取了 OpenGL 的版本,发现:
Warning: The created OpenGL context does not fully meet the settings that were requested
Requested: version = 1.1 ; depth bits = 32 ; stencil bits = 0 ; AA level = 0 ; core = false ; debug = false ; sRGB = false
Created: version = 4.6 ; depth bits = 24 ; stencil bits = 8 ; AA level = 0 ; core = false ; debug = false ; sRGB = false
4.6.0 - Build 31.0.101.3959
这说明我的设备最高支持 4.6 的 OpenGL ,但是 MinGW 提供的版本只有 1.1 。
我尝试升级 MinGW 版本,但是在最新版的 MinGW 中,也不提供 glCreateShader 类似的函数。
我希望能够升级我的 OpenGL ,以使用到更新的功能,而不是像是网上的教程一样一味下载新的第三方库。 MinGW的OpenGL版本过低,可以尝试使用GLEW或GLAD等第三方库来解决。这些库可以在运行时动态加载OpenGL函数,从而使得我们能够使用最新的OpenGL功能。
以下是使用GLEW的步骤:
1. 下载GLEW库,可以从官网上下载:http://glew.sourceforge.net/
2. 解压下载的GLEW库,将其中的glew.h和glew.c文件拷贝到你的项目中。
3. 在你的代码中包含glew.h头文件,并在你的代码中调用glewInit()函数,该函数会初始化GLEW库并加载OpenGL函数。
4. 在调用OpenGL函数之前,需要检查函数是否已经成功加载,可以使用glewIsSupported()函数来检查。
下面是一个使用GLEW的例子:
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
int main()
{
// 初始化GLFW库
if (!glfwInit())
{
std::cerr << "Failed to initialize GLFW" << std::endl;
return -1;
}
// 创建窗口
GLFWwindow* window = glfwCreateWindow(640, 480, "OpenGL", NULL, NULL);
if (!window)
{
std::cerr << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
// 设置当前上下文
glfwMakeContextCurrent(window);
// 初始化GLEW库
if (glewInit() != GLEW_OK)
{
std::cerr << "Failed to initialize GLEW" << std::endl;
glfwTerminate();
return -1;
}
// 检查OpenGL版本
std::cout << "OpenGL version: " << glGetString(GL_VERSION) << std::endl;
// 检查glCreateShader函数是否已经成功加载
if (!glewIsSupported("GL_ARB_vertex_shader GL_ARB_fragment_shader GL_ARB_shader_objects GL_ARB_shading_language_100"))
{
std::cerr << "Failed to load OpenGL functions" << std::endl;
glfwTerminate();
return -1;
}
// 使用OpenGL函数
GLuint shader = glCreateShader(GL_VERTEX_SHADER);
// 清理资源
glfwTerminate();
return 0;
}
在使用 MinGW 进行 OpenGL 开发时,可能会遇到这样的问题。MinGW 的默认 OpenGL 版本较低,因此需要进行一些额外的配置和步骤来升级 OpenGL 版本。以下是一些可能的解决方法:
1. 使用 GLEW 或 GLAD:下载并配置 GLEW(OpenGL Extension Wrangler)或 GLAD(OpenGL Loader-Generator),它们是开源库,用于管理 OpenGL 函数指针的加载。通过使用其中一个库,你可以使用最新版本的 OpenGL 函数,无论 MinGW 提供的 OpenGL 版本如何。
2. 手动加载 OpenGL 函数指针:如果你不想使用额外的库,可以手动加载所需的 OpenGL 函数指针。这需要使用平台特定的函数,如 Windows 中的 wglGetProcAddress。你可以查找每个函数的地址并将其分配给函数指针变量,以便在代码中使用。
下面是一个示例代码片段,演示如何手动加载 glCreateShader 函数:
#include <windows.h>
#include <GL/gl.h>
typedef void (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
PFNGLCREATESHADERPROC glCreateShader = NULL;
int main() {
HINSTANCE hInstance = LoadLibrary("opengl32.dll");
glCreateShader = (PFNGLCREATESHADERPROC)GetProcAddress(hInstance, "glCreateShader");
if (glCreateShader == NULL) {
// 加载失败,处理错误
return 1;
}
// 使用 glCreateShader 函数进行后续操作
// ...
return 0;
}
通过手动加载函数指针,你可以使用所需的 OpenGL 函数,而不必依赖于 MinGW 提供的版本。但是需要注意的是,这种方法需要仔细处理函数指针的加载和错误处理。
希望以上解决方法对你有所帮助,让你能够升级并使用更新的 OpenGL 功能。如果你需要更多帮助,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页:
[1]