当VISUAL_ID和screen-> root_visual不相等时,glXCreateWindow不起作用

时间:2012-06-16 23:04:22

标签: c++ c x11 glx xcb

我正在研究与此类似的代码:

http://xcb.freedesktop.org/opengl/

当我使用默认的帧缓冲配置时,它工作正常,但是当我尝试查询某个配置时,它失败了。我确定只要VISUAL_ID(示例代码中的visualID)和screen->root_visual值不同,就会失败。

以下是错误消息:

X Error of failed request:  BadWindow (invalid Window parameter)
  Major opcode of failed request:  135 (GLX)
  Minor opcode of failed request:  31 (X_GLXCreateWindow)
  Resource id in failed request:  0x1600003
  Serial number of failed request:  32
  Current serial number in output stream:  34

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

最有可能的事件是xcb_create_window()调用失败(使用xcb_create_window_checked()xcb_request_check()来验证)。它失败,因为COPY_FROM_PARENT被指定为深度,它与所需的视觉深度不匹配。

您应该查询正在使用的视觉深度,并将其传递给xcb_create_window()

更新如果您创建的深度与其父级不同,则必须指定边框像素,可能还要指定背景像素和色彩映射,请参阅例如this question