我正在将一个OpenGL应用程序移植到Linux(Debian Jesse核心,使用GLX,X11和Xfree86,GL 3.0通过Mesa 10.3.2)。我遇到了一个我不完全理解的渲染问题(描述如下),我已经用尽了调试的方法,我知道如何使用。我的问题是,我该如何调试呢?有没有我可以用来检查性能的工具,我可以查看的日志文件,我可以安装的开发库和设置断点,还有什么?
症状:
top
显示最大使用率仅为2%cpu(大部分时间范围在0.3 - 0.7%之间),内存使用量上升和下降但保持稳定范围,其余的图形应用程序遭遇一点滞后,但系统的其余部分相当活泼。这是来自top
的快照: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
调用。我在gdb
电话上使用断点运行了glXSwapBuffers
,并确保现在没有发生同样的事情。gdb
跟踪窗口创建代码,确保Display*
和Window
实例不为空且未更改。Expose
和ConfigureNotify
个事件。删除重绘代码似乎对此问题没有任何影响。glXCreateContextAttribsARB
得到了一个指向glXGetProcAddress
的函数指针。答案 0 :(得分:1)
关于如何调试此问题的问题的简短回答:检查您的显示枚举是否提供了与您的X11显示实际兼容的GLXFramebufferConfig
。如果您要将glX
与Xf86
库调用混合使用,请尝试使用glX
启动并运行该程序。解释详细信息的好资源是Programming OpenGL in Linux: GLX and Xlib指南。