0

出于某种原因,我XCreateColormap在 XLib 中的调用给了我一个分段错误。有趣的是,我使用的大部分代码与我在网上看到的代码几乎相同,该代码展示了如何使用 XLib 和 GLX 创建窗口和 OpenGL 上下文。

在细节方面,我有一个名为 的结构OVI_UnixDisplayData,它基本上充当所有相关 X Window/GLX 数据的容器,用于创建窗口并为其分配上下文。我最初有一个函数,旨在创建一个上下文,然后返回一个指向该数据结构的指针。该结构被称为just 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 实现-列表。

有人可以对此有所了解吗?我需要信息,虽然谷歌搜索给了我一些关于其他人遇到此函数调用的段错误的结果,但他们中没有一个人有与我类似的原因发生这种情况。

如果这意味着什么,我正在运行 GLX 1.4 和 OpenGL 4.2

4

1 回答 1

1

XSetWindowAttributes分段错误发生在我已分配为指向地址的指针这一事实。当我选择在堆栈上分配它时,这个问题得到了解决。

考虑解决这个问题。

于 2012-02-28T22:50:40.297 回答