在需要的地方有条件地包括 GLES2

Conditionally include GLES2 where needed

我正在尝试使用 glCreateShaderglGetShaderivglDeleteProgram 等函数,但是当我导入 GL/gl.h 或 [=14= 时它们不存在] 在 Linux 系统上。

这可能是因为它是 2008 年的笔记本电脑,具有集成显卡报告功能:

2.1 Mesa 20.1.10

和离散卡:

3.0 Mesa 20.1.10

当我导入 GLES2/gl2.h 时,一切正常,包含已解决。

现在我目前至少有一个月无法使用台式计算机或图形标准足够高的计算机 - 我假设这些更好的系统具有着色器标准 GL/gl.h 文件中包含的功能。

如何编写条件导入以仅在需要时要求 GLES?我不想必须向 Makefile 添加变量,我希望能够自动检测这些符号在编译时仅作为 GLES 组件可用的系统有 #ifdef 个序列。

您必须使用像 glew or glad 这样的 OpenGL 加载器。 OpenGL (ES) 是一种规范。加载程序使您可以访问图形驱动程序提供的 API 功能。

参见OpenGL Loading Library - glad

const SDL_GLContext context = SDL_GL_CreateContext(window);
if (context == nullptr) {
    std::cout << "SDL could not create context";
    return 1;
}

if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
    std::cout << "Failed to initialize OpenGL context" << std::endl;
    return -1;
}

参见Initialize GLEW

const SDL_GLContext context = SDL_GL_CreateContext(window);
if (context == nullptr) {
    std::cout << "SDL could not create context";
    return 1;
}

if {glewInit() != GLEW_OK}
{
    std::cout << "Failed to initialize GLEW" << std::endl;
    return -1;
}