【发布时间】:2021-04-08 10:19:14
【问题描述】:
我使用glXCreateContext 来创建上下文,但该函数已被弃用,并且总是导致 OpenGL 版本 3.0,我需要至少 4 个版本。现在,如果我理解正确,GLXContext glXCreateContextAttribsARB(Display* dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int* attrib_list); 替换了 @987654324 @。 “新”功能允许在 attrib_list 中明确指定主要版本、次要版本、配置文件等,例如:
int context_attribs[] =
{
GLX_CONTEXT_MAJOR_VERSION_ARB, 4,
GLX_CONTEXT_MINOR_VERSION_ARB, 5,
GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB,
GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_COMPABILITY_PROFILE_BIT_ARB,
None
};
然后使用函数:
glXCreateContextAttribsARB(dpy, config, NULL, true, context_attribs);
这就是我在我的程序中所做的。窗口已创建,dpy 是指向 Display 的有效指针。 config我是这样定义的:
// GLXFBConfig config; created at the beginning of the program
int attrib_list[] =
{
GLX_RENDER_TYPE, GLX_RGBA_BIT,
GLX_RED_SIZE, 8,
GLX_GREEN_SIZE, 8,
GLX_BLUE_SIZE, 8,
GLX_DEPTH_SIZE, 24,
GLX_DOUBLEBUFFER, True,
None
};
int nAttribs;
config = glXChooseFBConfig(dpy, 0, attrib_list, &nAttribs);
检查glxinfo,我有正确的视觉效果; vi 已设置为 0x120,我可以通过 glxinfo | grep 0x120 确认。它完全满足了上述要求。
到目前为止,一切都很好。但是在运行应用程序时(编译工作正常),我收到以下错误:
X Error of failed request: GLXBadFBConfig
Major opcode of failed request: 152 (GLX)
Minor opcode of failed request: 34 ()
Serial number of failed request: 31
Current serial number in output stream: 31
现在,这就是错误的原因:
如果
不支持提供请求的 API 主要和次要版本、前向兼容标志和调试上下文标志的兼容 OpenGL 上下文,则会生成 GLXBadFBConfig。
所以,问题很简单。我不知道如何解决它。它本质上的意思是找不到与我在attrib_list[] 中指定的属性和context_attribs 中的属性相对应的OpenGL 上下文。通过glxinfo | grep Max,我确认我的最高 OpenGL 版本是 4.5。我想听听您对我现在应该做什么的建议。我已经玩了一段时间context_attribs 中的属性,但没有得到任何结果。也许问题真的出在另一个地方。也许我对 GLX 函数的概念总体上是有缺陷的,如果有,请指出!
【问题讨论】:
-
“我确认我的最高 OpenGL 版本是 4.5” 确保这是针对您请求的兼容性上下文,而不仅仅是针对核心上下文。直到最近,Mesa 才在 Core 上下文中支持大于 3.0 的 GL 版本。另外,编辑minimal reproducible example。