Вызов XCreateColormap создает ошибку сегментации - PullRequest
0 голосов
/ 28 февраля 2012

По какой-то причине мой звонок на XCreateColormap в XLib вызывает ошибку сегментации. Самое смешное, что большая часть кода, который я использовал, практически идентична коду, который я видел в сети, который показывает, как создать окно и контекст OpenGL, используя XLib и GLX.

С точки зрения деталей, у меня есть структура под названием OVI_UnixDisplayData, которая в основном действует как контейнер для всех соответствующих данных X Window / GLX, используемых для создания окна и назначения ему контекста. У меня изначально есть функция, которая предназначена для создания контекста, а затем возвращает указатель на эту структуру данных. Эта структура называется просто dat (для данных).

Вхождение SegFault

dat->fbConfigs = glXChooseFBConfig( dat->display, DefaultScreen( dat->display ), visualAttr, &dat->framebuffCount );

if ( !dat->fbConfigs || dat->framebuffCount < 1 )
{
    puts( OVI_ERR_GLX_FRAME_BUF_CFG );
    exit( 1 );
}

printf( OVI_STAT_GLX_FRAME_BUFF_CFG_COUNT, dat->framebuffCount );

dat->visualinfo = glXGetVisualFromFBConfig( dat->display, dat->fbConfigs[ dat->fbCountId ] );

printf( OVI_STAT_GLX_FRAME_BUFF_VIS_ID, dat->visualinfo->visualid );

puts( OVI_STAT_X_COLORMAP_CREATE );

dat->setwinatt->colormap = XCreateColormap(
            dat->display,
            RootWindow( dat->display, dat->visualinfo->screen ),
            dat->visualinfo->visual, AllocNone );

Я проверил свои собственные версии GLX, которые возвращаются как 1.4, так что это не может быть проблемой. Кроме того, в моем отладчике я знаю, что dat->visualinfo->visual->ext_data содержит значение 0x0, поэтому я не удивлюсь, если это как-то связано с этим. Проблема в том, что я не знаю, как (если вообще), и я не знаю, какую функцию вызывать, чтобы правильно инициализировался, так как ее поведение похоже на поведение C -подобная реализация связанного списка.

Может кто-нибудь пролить свет на это? Мне нужна информация, и хотя поиск в Google дал мне некоторые результаты о других людях, испытывающих ошибки сегмента из-за этого вызова функции, ни у одного из них не было причины даже похожий на мой за это происходит.

Если это что-то значит, я использую GLX 1.4 и OpenGL 4.2

1 Ответ

1 голос
/ 29 февраля 2012

Ошибка сегментации произошла из-за того, что я выделил XSetWindowAttributes в качестве указателя на адрес. Проблема была решена, когда я решил разместить ее в стеке.

Считайте, что эта проблема решена.

...