【问题标题】:Linux - default OpenGL versionLinux - 默认 OpenGL 版本
【发布时间】:2021-12-01 13:20:02
【问题描述】:

我在 Ubuntu 18.04 上工作。我没有定义GL_GLEXT_PROTOTYPES。我使用glXGetProcAddress 加载“核心”OpenGL 函数。我的申请链接到/usr/lib/x86_64-linux-gnu/libGL.so。一些遗留的 OpenGL 函数无需定义GL_GLEXT_PROTOTYPES 或调用glXGetProcAddress 即可使用,例如glColor3f。 Linux下默认支持哪个OpenGL版本(功能)?

编辑

我假设硬件支持最新的 OpenGL 版本。此外,我使用来自标准 Ubuntu 位置的兼容性配置文件和 OpenGL 头文件 (gl.h, glext.h):/usr/include/GL。看起来那些头文件已经被mesa-common-dev apt 包安装了。

【问题讨论】:

  • 无论您要求什么(只要您的 GPU 驱动程序支持)。
  • @BDL 我假设硬件支持最新的 OpenGL 版本。创建 OpenGL 上下文,例如 4.6 不会自动提供适当的函数指针。我已经询问了哪些 OpenGL 函数可用,而无需使用 glxGetProcAddress(或任何其他第三方加载器)定义 GL_GLEXT_PROTOTYPES。
  • 所以您只是对可用的函数定义感兴趣?我问这个是因为,例如,当您请求 4.6 核心上下文时,glColor3f 将可用,但调用它会给您一个错误,因为它在核心配置文件中已被弃用。还请添加您从哪里获得gl.h 头文件(可能是mesa?或者可能是libgl 或glproto?)。
  • 你说得对,我应该提供更多信息。是的,我对默认情况下可用的函数定义感兴趣。我使用来自标准 Ubuntu 位置的兼容性配置文件和 OpenGL 头文件 (gl.h, glext.h):/usr/include/GL。看起来这些标头已由mesa-common-dev apt 包安装。我的应用程序仅显式链接到 /usr/lib/x86_64-linux-gnu/libGL.so,但 ldd 显示它也链接到 nvidia 专有驱动程序。

标签: linux ubuntu opengl glx


【解决方案1】:

传统上,Linux 上的libGL.so 由图形驱动程序供应商提供。没有真正的“默认”版本。在这方面您可以找到的最接近标准的是OpenGL® Application Binary Interface for Linux,它指出:

3.4。这些库必须静态导出所有 OpenGL 1.2、GLU 1.3、GLX 1.3 和 ARB_multitexture 入口点。

4.5。所有 OpenGL 1.2 和 ARB_multitexture、GLU 1.3 和 GLX 1.3 入口点和枚举器都必须存在于相应的头文件 gl.h、glu.h 和 glx.h 中,即使相关运行时在运行时仅实现了 OpenGL 1.1图书馆。

所以这基本上是您可以依赖的直接导出的 GL 函数集。通常,各个供应商的 GL 库导出更多,但官方查询事物的方式是扩展机制。

请注意,在 Linux 上,使用 OpenGL 的现代方式是通过 vendor-neutral GL dispatch library 提供 libOpenGL.so 而不是 libGL.so。它似乎导出了它构建时已知的所有核心 OpenGL 函数。但这并不意味着特定的供应商实现将支持所有这些功能。

【讨论】:

    猜你喜欢
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2017-07-11
    • 1970-01-01
    • 2014-09-29
    • 2022-12-14
    • 2019-07-17
    相关资源
    最近更新 更多