По какой-то причине мой звонок на 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