1
다음은 내가 놀고있는 Vala 프로그램을위한 코드입니다. Ubuntu 12.04 ATI 시스템에서는 잘 작동하지만, 동일한 OS를 실행하는 Nvidia (8400M GS) 시스템으로 전환하면 0 fbConfigs가되고 glXChooseFBConfig에서 null이 반환됩니다.왜 glXChooseFBConfig가 항상 nvidia와 함께 NULL입니까?
왜 이런 일이 일어날 수 있습니까? 이게 FB 구성 및 GLX와 OpenGL 컨텍스트를 만들기위한 VisualInfo를 얻는 가장 좋은 방법인가요? 아니면 내가해야 할 다른 방법이 있습니까?
코드
int errorBase;
int eventBase;
int[] glAttrs;
int[] attrs;
FBConfig* fbConfig;
x_server = xServer;
if (screen == int.MIN)
{
screen = x_server.default_screen().screen_number_of_screen();
}
message("Creating Linux context.");
if (glXQueryExtension(x_server, out errorBase, out eventBase) == false)
{
error("GLX extension is not supported.");
}
if (x_server.render_query_extension(out errorBase, out eventBase) ==
false)
{
error("X11 Render extension is not available.");
}
// Get the visual information for this window
// so OpenGL has what it needs.
glAttrs = new int[0];
glAttrs += GLX_X_RENDERABLE;
glAttrs += 1;
glAttrs += GLX_DRAWABLE_TYPE;
glAttrs += GLX_WINDOW_BIT;
glAttrs += GLX_RENDER_TYPE;
glAttrs += GLX_RGBA_BIT;
glAttrs += GLX_X_VISUAL_TYPE;
glAttrs += GLX_TRUE_COLOR;
glAttrs += GLX_DOUBLEBUFFER;
glAttrs += 1;
glAttrs += GLX_RGBA;
glAttrs += 1;
glAttrs += GLX_RED_SIZE;
glAttrs += 8;
glAttrs += GLX_GREEN_SIZE;
glAttrs += 8;
glAttrs += GLX_BLUE_SIZE;
glAttrs += 8;
glAttrs += GLX_ALPHA_SIZE;
glAttrs += 8;
glAttrs += GLX_DEPTH_SIZE;
glAttrs += 24;
glAttrs += GLX_STENCIL_SIZE;
glAttrs += 8;
glAttrs += (int)None;
fbConfig = glXChooseFBConfig(x_server, screen,
glAttrs, out numConfigs);
message("Retreived %d FB configs.", numConfigs);
return_if_fail(fbConfig != null);
visual_info = glXGetVisualFromFBConfig(x_server, fbConfig[0]);
return_if_fail(visual_info != null);
GLX 정보는 목록의 속성
204 GLX Visuals
visual x bf lv rg d st colorbuffer sr ax dp st accumbuffer ms cav
id dep cl sp sz l ci b ro r g b a F gb bf th cl r g b a ns b eat
----------------------------------------------------------------------------
0x021 24 tc 0 32 0 r y . 8 8 8 0 . s 4 24 8 16 16 16 16 0 0 None
0x022 24 dc 0 32 0 r y . 8 8 8 0 . s 4 24 8 16 16 16 16 0 0 None
0x024 24 tc 0 32 0 r y . 8 8 8 8 . s 4 24 8 16 16 16 16 0 0 None
0x025 24 tc 0 32 0 r . . 8 8 8 0 . s 4 24 8 16 16 16 16 0 0 None
0x026 24 tc 0 32 0 r . . 8 8 8 8 . s 4 24 8 16 16 16 16 0 0 None
0x027 24 tc 0 32 0 r y . 8 8 8 0 . s 4 24 0 16 16 16 16 0 0 None
0x028 24 tc 0 32 0 r y . 8 8 8 8 . s 4 24 0 16 16 16 16 0 0 None
0x029 24 tc 0 32 0 r . . 8 8 8 0 . s 4 24 0 16 16 16 16 0 0 None
0x02a 24 tc 0 32 0 r . . 8 8 8 8 . s 4 24 0 16 16 16 16 0 0 None
그게 전부입니다. 고맙습니다! 왜 내가 그걸 가지고 있었는지, 왜 그것이 ATI에서 작동하는지 모르겠습니다. 그 오류를 잡아 주셔서 감사합니다. –
비슷한 문제가있었습니다. 잘못된 값으로 인해 내 속성이 바뀌 었습니다. 그것을 고정시키고 badda-bing, 그것은 효과가 있었다! – metal