2016-07-23 20 views
0

OpenGL 응용 프로그램을 Linux (데비안 Jesse 코어, GLX, X11 및 Xfree86, Mesa 10.3.2를 통한 GL 3.0 사용)로 이식 중입니다. 나는 완전히 이해하지 못하는 렌더링 문제에 빠져있다. (설명은 다음과 같다.) 나는 어떻게 사용하는지 알고있는 디버깅 방법을 다 써 버렸다. 내 질문은 어떻게 디버깅이 접근합니까? 성능을 검사하는 데 사용할 수있는 도구, 내가 볼 수있는 로그 파일, 설치하고 중단 점을 설정할 수있는 개발 라이브러리 등이 있습니까?GLX 응용 프로그램 디버깅 - 느린 창이 다시 그려지지 않음

증상 :

  • 창을 인스턴스화되면, 윈도우 프레임이 그려하지만 창 내용은 제목 표시 줄에
  • 클릭 드래그 (I 창에서 바탕 화면 배경 참조) 그려지지 주위 창을 이동하는 부진있는 응용 프로그램은 몇 초 걸리지 만, 윈도우가 파괴되기 직전 아주 짧은 순간을 위해, 올바른 화면 출력이되지 않는 매우 작은 것으로 창 크기 조정 창
  • 에 나타납니다 닫기
  • 슬러를 개선하다 ggishness 또는 디스플레이 문제가 발생합니다.
  • top은 최대 2 %의 CPU 사용량을 나타내며 (대부분 0.3 - 0.7 % 사이의 범위를가집니다), 메모리 사용량은 상승 및 하강하지만 안정된 범위를 유지하고 나머지 그래픽 응용 프로그램 약간의 지연을 겪지 만 시스템의 나머지 부분은 상당히 끔찍합니다.
 
top - 01:09:42 up 3:43, 3 users, load average: 0.31, 0.12, 0.12 
Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie 
%Cpu(s): 0.3 us, 0.4 sy, 0.0 ni, 99.2 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st 
KiB Mem: 16411604 total, 1342704 used, 15068900 free, 47860 buffers 
KiB Swap: 2783228 total,  0 used, 2783228 free. 752736 cached Mem 
PID USER  PR NI VIRT RES SHR S %CPU %MEM  TIME+ COMMAND                  
3758 andrew 20 0 145700 25080 16704 R 0.3 0.2 0:02.36 mtexec 

내가 무엇을 시도했다 : 나는 창문에 비슷한 문제로 실행 한

  • 문제가 SwapBuffers 호출에 널 창 핸들을 통과 한 다음 top에서 스냅 샷입니다 . 내 glXSwapBuffers 콜에 대해 중단 점이있는 gdb을 실행했고 지금 똑같은 일이 일어나지 않았 음을 확인했습니다.
  • gdb을 사용하여 창 생성 코드를 추적하면 Display*Window 인스턴스가 null이 아니며 변경되지 않도록해야합니다.
  • ExposeConfigureNotify 이벤트에서 다시 그리기 및 다시 그리기. 다시 그리기 코드를 제거해도 문제가 해결되지는 않습니다.
  • 중요한 경우 GLEW를 사용하지만 컨텍스트 생성에는 사용하지 않습니다. glXCreateContextAttribsARB에 대한 함수 포인터를 glXGetProcAddress을 통해 얻습니다.
+0

응용 프로그램이 실행되는 동안 응용 프로그램의 메모리 사용량이 증가합니까? – SurvivalMachine

+0

지금 당장은 메모리가 상승하고 매우 낮은 단위로 떨어지고 오랜 시간 동안 성장하지 않는 것으로 보입니다. –

+0

이 문제에 대해 몇 가지 진전을 보였습니다. 나는 비디오 모드를 열거하기 위해 사용하고있는 XFree86 코드를 제거했다. 이제 스크린 출력을 얻는다. 나는 또한 X11'Window' 객체의 얕은 복사본이 문제의 일부를 일으켰다는 것을 내 구식 코드에 숨기고있는 다른 문제가 있다고 생각합니다. 참고로,이 예제는 나를 위해 일하고 있습니다 : https://www.opengl.org/discussion_boards/showthread.php/165856-Minimal-GLX-OpenGL3-0-example –

답변

1

이 문제를 디버깅하는 방법에 대한 간단한 질문 : 디스플레이 열거 형이 실제로 X11 디스플레이와 호환되는 GLXFramebufferConfig을 제공하는지 확인하십시오. glXXf86 라이브러리 호출과 혼합하는 경우 glX을 사용해 프로그램을 실행하십시오. 세부 정보를 설명하는 훌륭한 자료는 Programming OpenGL in Linux: GLX and Xlib 가이드입니다.