【问题标题】:How to activate OpenGL 3.3 core profile in lvvmpipe software renderer?如何在 lvvmpipe 软件渲染器中激活 OpenGL 3.3 核心配置文件?
【发布时间】:2020-06-26 07:35:13
【问题描述】:

我有一个带有 Mesa3D 和 llvmpipe 软件驱动程序的 Linux 系统。

glxinfo 报告

Extended renderer info (GLX_MESA_query_renderer):
Vendor: VMware, Inc. (0xffffffff)
Device: llvmpipe (LLVM 9.0, 128 bits) (0xffffffff)
Version: 19.2.8
Accelerated: no
Video memory: 65482MB
Unified memory: no
Preferred profile: core (0x1)
Max core profile version: 3.3
Max compat profile version: 3.1
Max GLES1 profile version: 1.1
Max GLES[23] profile version: 3.0

如果我正确阅读了此信息,则核心配置文件必须支持 OpenGL 3.3。不幸的是,任何 OpenGL 程序都只能在 OpenGL 3.1 模式(兼容性配置文件)下启动。例如,

~$ xvfb-run glxgears -info
GL_RENDERER   = llvmpipe (LLVM 9.0, 128 bits)
GL_VERSION    = 3.1 Mesa 19.2.8
GL_VENDOR     = VMware, Inc.
...

有没有办法使用核心 3.3 配置文件启动 OpenGL 程序?

【问题讨论】:

    标签: linux opengl virtual renderer mesa


    【解决方案1】:

    很遗憾,任何 OpenGL 程序都只能在 OpenGL 3.1 模式下启动。

    没有任何 GL 程序会这样做。只有使用遗留上下文创建的旧程序(因此他们甚至不知道或不关心不同配置文件的存在)才会获得此版本。

    (兼容性配置文件)。

    实际上,OpenGL 3.1 兼容性配置文件甚至都不存在。配置文件是在 OpenGL 3.2 中引入的,即使 mesa 对此的解释略有不同。从技术上讲,mesa llvmpipe 根本不支持兼容性配置文件。

    有没有办法使用核心 3.3 配置文件启动 OpenGL 程序?

    没有用处。如果程序使用遗留上下文创建,它要么不知道更新的 GL 函数(因此将无法使用它们),或者它只是被破坏并只是假设获得一些更新的 GL 版本,这没什么根据规范,程序可以依赖。

    在任何情况下,如果程序不是为 OpenGL 核心配置文件编写的,则很可能无法正常运行,因为许多已弃用的旧功能在核心配置文件中根本不可用。

    您的示例glxgears 将简单地产生很多 GL 错误并且只显示在核心配置文件中运行的黑屏,因为它使用显示列表和立即模式渲染命令以及固定功能管道,这些都不是在核心配置文件 OpenGL 中可用。

    尽管它很可能毫无用处,但要使程序使用不需要它的核心配置文件 OpenGL,您可以修改源代码,或者您可以以某种方式干扰其上下文创建操作。 在一些具有讽刺意味的事件中,我自己几天前在我的glx_hook hack 中添加了一些功能,实际上允许modify the context an application is requesting 无需修改源代码。

    【讨论】:

    • 实际上 glxgear 可以很好地与顶级硬件上的核心配置文件一起工作,例如GL_RENDERER = GeForce RTX 2080 SUPER/PCIe/SSE2 GL_VERSION = 4.6.0 NVIDIA 435.21 GL_VENDOR = NVIDIA Corporation
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2015-01-13
    相关资源
    最近更新 更多