2012-12-18 2 views
1

SDL 및 OpenGL을 기반으로하는 프로그램에서 Linux의 수직 동기화를 비활성화하려고합니다. 나는 드라이버로 Gallium 0.4를 사용하여 기존 통합 ATI 카드를 실행 중입니다.glXSwapIntervalSGI segfault

내 코드에서 glXSwapInterval(0)을 호출하여 vsync를 비활성화하려고 시도하지만 프로그램을 올바르게 컴파일해도 이렇게하면 실행할 때 segfault가 발생합니다.

GDB는 나에게 오히려 도움이되지 않는 메시지를 제공합니다 :

Program received signal SIGSEGV, Segmentation fault. 
0x00000000 in ??() 
에 갈 수있는 어떤

사람에 관해서는 어떤 생각을 가지고 있습니까?

답변

4

glXSwapIntervalEXT 및 glXSwapIntervalSGI는 확장 기능입니다. 일반적으로 glXGetProcAddress를 통해 확장 기능의 주소에 액세스합니다. 일부 libGL.so는 직접 내보낼 수 있습니다.

가장 쉬운 해결책 : GLEW (모든 주요 Linux 배포판의 패키지 저장소에 있음)와 같은 OpenGL 확장 프로그램 로더 라이브러리를 가져옵니다. #include <GL/gl.h>의 모든 발생을 #include <GL/glew.h>#include <GL/glx.h>으로 바꾸고 #include <GL/glxew.h>으로 바꾸고 libGLEW.so를 링크 된 라이브러리 목록에 추가하고 OpenGL 컨텍스트를 만들고 바인딩 한 직후 glewInit()으로 전화하십시오. 그런 다음 확장 기능이 실제로 사용 가능한지 테스트하십시오!

+0

감사합니다. 이미'gl/glxew.h'를 사용하고있었습니다.'glewInit' 전에'glXSwapInterval'을 호출하려고했습니다! 전화를 옮긴 후에 모든 것이 잘 작동합니다. (가능한 한 빨리 답변을 수락하겠습니다 ...) – user1483596