0
我移植的OpenGL应用程序到Linux(Debian的杰西核心,通过梅萨10.3.2使用GLX,X11和XFree86,GL 3.0)。我被困在一个渲染问题上,我不完全理解(下面的描述),并且我已经用尽了我知道如何使用的调试方法。我的问题是,我如何处理调试呢?有没有我可以用来检查性能的工具,我可以查看的日志文件,我可以安装和设置断点的开发库,还有其他的东西?调试GLX应用程序 - 呆滞窗口不重绘
症状:
- 一旦窗口被实例化,窗框绘制,但窗口的内容中没有画出(我看到在窗口的桌面背景)
- 标题栏上单击并拖动移动窗口缓慢
- 关闭应用程序需要几秒钟,但在窗口被破坏之前的一瞬间,正确的屏幕输出出现在窗口中
- 调整窗口的大小非常小改善污泥ggishness或显示问题
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
我已经试过:
- 我已经在Windows上运行类似的问题,问题出在哪里路过一个空窗口句柄
SwapBuffers
通话。我在我的glXSwapBuffers
调用中运行了gdb
并确定了断点,并确保现在不会发生同样的情况。 - 通过使用
gdb
确保该Display*
和Window
情况下不为空,而不是被改变的窗口创建代码跟踪。 - 重绘和
Expose
和ConfigureNotify
事件未重绘。删除重绘代码似乎对问题没有任何影响。 - 万一它很重要,我使用GLEW,但不适用于上下文创建。我得到一个函数指针
glXCreateContextAttribsARB
通过glXGetProcAddress
。
应用程序的内存使用量在运行时是否增长? – SurvivalMachine
我现在正在观看它,记忆以非常低的增量上升和下降,而且似乎不会长时间增长。 –
我在这个问题上取得了一些进展。我删除了我用来枚举视频模式的XFree86代码,现在我得到了屏幕输出。我也相信另一个问题是潜伏在我的旧代码中,一个X11'Window'对象的浅拷贝导致了一些问题。作为参考,这个例子正在为我工作:https://www.opengl.org/discussion_boards/showthread。php/165856-Minimal-GLX-OpenGL3-0-example –