鱼C论坛

 找回密码
 立即注册
查看: 1192|回复: 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 ,以使用到更新的功能,而不是像是网上的教程一样一味下载新的第三方库。
想知道小甲鱼最近在做啥?请访问 -> 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的例子:
#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;
}
想知道小甲鱼最近在做啥?请访问 -> 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 函数:
#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 功能。如果你需要更多帮助,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 07:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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