1

在尝试启动并运行类似“Hello World”的基本 XServer 应用程序后,我发现无论我尝试什么,我都会遇到相同的错误,即:

X Error of Failed request: BadMAtch( invalid parameter attributes )
Major opcode of failed request: 78 ( X_CreateColormap )

起初,我以为是我的驱动,所以我将它们更新为 290.10 (nVidia)。

我的(相关)设置包括以下内容:

nVidia GTX 550 Ti
Sabayon Linux
Kernel 3.2

但是,经过一些冲浪后,似乎可能是因为我有双显示器(一个连接到 hdmi-mini 端口,另一个连接到 vga/dvi),或者我启用了 Xinerama,或两者兼而有之。

我试图通过在我的代码中创建两个对象来补偿这两个监视器GLXContext,正如预期的那样,它没有做任何事情(很好:我刚开始学习这个 API)。我这样做是因为 GLXContext 似乎与监视器输入/输出有关。

在那之后没有用,我试过glXGetConfig了,也没有用。因此,我开始环顾四周,并在一个论坛(几年前写的)上找到了一篇关于有人在禁用 Xinerama 时遇到问题的帖子,而这正是导致问题的原因。奇怪的是,这是在 2009 年发布的,所以人们会认为 nVidia 现在已经解决了这个问题。

我不知道该怎么做,我相信我有点搞砸了,除非我能解决这个问题。

任何人都可以在这里查看我的代码(pastebin),以及我在 SuperUser 上的帖子

我真的可以在这方面使用一些帮助。

tl;博士

setWindowAtt.colormap = colorMap;
setWindowAtt.event_mask = ExposureMask | KeyPressMask;

win = XCreateWindow( dp, root, 0, 0, 600, 600, 0, visualInfo->depth, InputOutput,   visualInfo->visual, CWColormap | CWEventMask, &setWindowAtt );

XMapWindow( dp, win );

XStoreName( dp, win, VI_UN_DEF_WIN_NAME );

glxContext = glXCreateContext( dp, visualInfo, NULL, GL_TRUE ); //error

glXMakeCurrent( dp, win, glxContext ); 
4

1 回答 1

2

线索就在你面前:

Major opcode of failed request: 78 ( X_CreateColormap )

这意味着XCreateColormap失败。如果它想告诉你一个 GLX 命令失败了,它会说一些关于 GLX 的东西。

阅读其余代码后:您从中获得的视觉效果glXChooseVisual可能是 TrueColor 类视觉效果,并且 - 正如手册所述XCreateColormap- TrueColor 视觉效果必须使用 AllocNone 分配,如果不这样做,则会抛出 BadMatch。

于 2012-08-29T01:13:08.953 回答