如何在lvvmpipe软件渲染器中激活OpenGL 3.3核心配置文件?

问题描述 投票:0回答:1

我有一个带有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个回答
0
投票

不幸的是,任何OpenGL程序都只能在OpenGL 3.1模式下启动。

不是any GL程序将执行此操作。只有使用旧版上下文创建功能的旧程序(因此它们甚至不知道或不在乎不同配置文件的存在)都将获得此版本。

((兼容性配置文件)。

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

有没有一种方法可以用核心3.3配置文件启动OpenGL程序?

不是一种有用的方式。如果程序使用旧式上下文创建,则它要么不知道更新的GL函数(因此将无法使用它们),要么就被破坏了,只是假设获得了一些更新的GL版本,那算不了什么根据规范,程序可以依赖。

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

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

尽管它很可能毫无用处,但要使程序使用不要求它的核心配置文件OpenGL,您可以修改源代码,或者以某种方式干扰其上下文创建操作。具有讽刺意味的是,几天前我本人为我的glx_hook hack增加了一些功能,实际上它允许glx_hook无需修改源代码。

© www.soinside.com 2019 - 2024. All rights reserved.