调用glXChooseFBConfig时触发X_ChangeProperty的BadValue错误排查
问题分析与修复
错误根源
你遇到的BadValue错误并非来自defaultScreen,而是设置窗口标题的xcb_change_property调用中传入了非法的format参数。
从错误信息的Major opcode of failed request: 18 (X_ChangeProperty)可以确认,错误发生在修改窗口属性的步骤。你当前代码中这一行的format参数传了0:
xcb_change_property( m_pstate->connection, XCB_PROP_MODE_REPLACE, m_pstate->window, XCB_ATOM_WM_NAME, XCB_ATOM_STRING, 0, // 非法参数 appName.length(), appName.c_str());
XCB的xcb_change_property要求format参数只能取8、16、32三个值,对应数据的位宽。对于XCB_ATOM_STRING类型的字符串数据,必须传入8(因为字符串是8位字节),传0直接触发参数范围错误。
修复代码
将xcb_change_property调用中的format参数从0改为8即可解决问题:
xcb_change_property( m_pstate->connection, XCB_PROP_MODE_REPLACE, m_pstate->window, XCB_ATOM_WM_NAME, XCB_ATOM_STRING, 8, // 修正为合法的format值 appName.length(), appName.c_str());
额外说明
你提到的defaultScreen参数是正常的,错误发生在GLX初始化代码之前,和OpenGL部分的逻辑无关。修正上述参数后,窗口标题设置会正常执行,后续的GLX初始化流程也能继续推进。
内容的提问来源于stack exchange,提问作者delta64
相关产品推荐
相关产品推荐

