По какой-то причине мой вызов XCreateColormap
в XLib дает мне ошибку сегментации. Самое забавное, что большая часть кода, который я использовал, почти идентична коду, который я видел в сети, который показывает, как создать окно и контекст OpenGL с помощью XLib и GLX.Звонок в XCreateColormap создает ошибку сегментации
Что касается деталей, у меня есть структура, называемая 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, так что не может быть проблемой. Ontop этого, в моем отладчике, я знаю, что dat->visualinfo->visual->ext_data
содержит значение 0x0, поэтому я не удивлюсь, если это что-то с этим связано. Проблема в том, что я не знаю, как (если вообще), и я не знаю, какую функцию вызывать, чтобы правильно ее получить , поскольку его поведение, похоже, больше похоже на C-подобную реализацию связанный список.
Может кто-то пролить свет на это? Мне нужна информация, и, хотя поиск в Google дал мне некоторые результаты для других людей, испытывающих seg-faults от этого вызова функции, ни у одного из них не было причин, даже похожих на мои для этого.
Если это означает, что что-нибудь, я бегу GLX 1.4 и OpenGL 4.2
Вы пытались запустить его в отладчике? Затем вы увидите, где он сработает, и вы сможете исследовать переменные. Сделайте поиск Google для 'gdb tutorials', чтобы узнать, как использовать наиболее распространенный отладчик в системах UNIX/Linux. –
Просьба представить [SSCCE] (http://sscce.org/). –
@JoachimPileborg да, если вы прочтете все, что знаете, я уже запустил свой отладчик. – zeboidlund