鱼C论坛

 找回密码
 立即注册
查看: 1661|回复: 2

MinGW OpenGL版本过低

[复制链接]
发表于 2023-10-11 22:24:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我在按照网上的 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 ,以使用到更新的功能,而不是像是网上的教程一样一味下载新的第三方库。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-11 22:24:43 | 显示全部楼层
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的例子:

  1. #include <GL/glew.h>
  2. #include <GLFW/glfw3.h>
  3. #include <iostream>

  4. int main()
  5. {
  6.     // 初始化GLFW库
  7.     if (!glfwInit())
  8.     {
  9.         std::cerr << "Failed to initialize GLFW" << std::endl;
  10.         return -1;
  11.     }

  12.     // 创建窗口
  13.     GLFWwindow* window = glfwCreateWindow(640, 480, "OpenGL", NULL, NULL);
  14.     if (!window)
  15.     {
  16.         std::cerr << "Failed to create GLFW window" << std::endl;
  17.         glfwTerminate();
  18.         return -1;
  19.     }

  20.     // 设置当前上下文
  21.     glfwMakeContextCurrent(window);

  22.     // 初始化GLEW库
  23.     if (glewInit() != GLEW_OK)
  24.     {
  25.         std::cerr << "Failed to initialize GLEW" << std::endl;
  26.         glfwTerminate();
  27.         return -1;
  28.     }

  29.     // 检查OpenGL版本
  30.     std::cout << "OpenGL version: " << glGetString(GL_VERSION) << std::endl;

  31.     // 检查glCreateShader函数是否已经成功加载
  32.     if (!glewIsSupported("GL_ARB_vertex_shader GL_ARB_fragment_shader GL_ARB_shader_objects GL_ARB_shading_language_100"))
  33.     {
  34.         std::cerr << "Failed to load OpenGL functions" << std::endl;
  35.         glfwTerminate();
  36.         return -1;
  37.     }

  38.     // 使用OpenGL函数
  39.     GLuint shader = glCreateShader(GL_VERTEX_SHADER);

  40.     // 清理资源
  41.     glfwTerminate();
  42.     return 0;
  43. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-11 22:24:50 | 显示全部楼层
在使用 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 函数:
  1. #include <windows.h>
  2. #include <GL/gl.h>
  3. typedef void (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
  4. PFNGLCREATESHADERPROC glCreateShader = NULL;
  5. int main() {
  6.     HINSTANCE hInstance = LoadLibrary("opengl32.dll");
  7.     glCreateShader = (PFNGLCREATESHADERPROC)GetProcAddress(hInstance, "glCreateShader");
  8.     if (glCreateShader == NULL) {
  9.         // 加载失败,处理错误
  10.         return 1;
  11.     }
  12.     // 使用 glCreateShader 函数进行后续操作
  13.     // ...
  14.     return 0;
  15. }
复制代码

通过手动加载函数指针,你可以使用所需的 OpenGL 函数,而不必依赖于 MinGW 提供的版本。但是需要注意的是,这种方法需要仔细处理函数指针的加载和错误处理。

希望以上解决方法对你有所帮助,让你能够升级并使用更新的 OpenGL 功能。如果你需要更多帮助,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 05:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表