2014-05-19 2 views
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 

답변

5

하나가 잘못 같습니다

내가 찾은 문서 ( http://www.opengl.org/sdk/docs/man2/xhtml/glXChooseFBConfig.xml)에서
glAttrs += GLX_RGBA; 
glAttrs += 1; 

GLX_RGBA은 아니다 glXChooseFBConfig()의 유효한 속성 중 하나로 표시됩니다.

+0

그게 전부입니다. 고맙습니다! 왜 내가 그걸 가지고 있었는지, 왜 그것이 ATI에서 작동하는지 모르겠습니다. 그 오류를 잡아 주셔서 감사합니다. –

+0

비슷한 문제가있었습니다. 잘못된 값으로 인해 내 속성이 바뀌 었습니다. 그것을 고정시키고 badda-bing, 그것은 효과가 있었다! – metal