По какой-то причине мой вызов 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.
gdb tutorials
, чтобы узнать, как использовать самый распространенный отладчик в системах UNIX/Linux. - person Some programmer dude   schedule 28.02.2012