Xinerama вызывает проблемы с моим кодом? - PullRequest
0 голосов
/ 26 февраля 2012

После попытки запустить базовое XServer-приложение, похожее на Hello World, я обнаружил, что, что бы я ни пытался, я продолжаю сталкиваться с одной и той же ошибкой:

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 здесь .

Я мог бы действительно помочь с этим.

Т.Л., др

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 ); 

1 Ответ

1 голос
/ 29 августа 2012

Прямо перед вами подсказка:

Major opcode of failed request: 78 ( X_CreateColormap )

Это означает, что XCreateColormap не удалось.Если бы он хотел сказать вам, что команда GLX потерпела неудачу, он вместо этого сказал бы что-то о GLX.

После прочтения остальной части вашего кода: изображение, которое вы получаете от glXChooseVisual, вероятно, является TrueColor-класс Visual, и, как говорится в руководстве для XCreateColormap, визуалы TrueColor должны быть выделены с помощью AllocNone, и если вы этого не сделаете, будет выдано BadMatch.

...