0

我正在将 OpenGL 应用程序移植到 Linux(Debian Jesse 核心,使用 GLX、X11 和 Xfree86,通过 Mesa 10.3.2 使用 GL 3.0)。我陷入了一个我不完全理解的渲染问题(描述如下),并且我已经用尽了我知道如何使用的调试方法。我的问题是,我该如何调试呢?是否有我可以用来检查性能的工具、我可以查看的日志文件、我可以安装和设置断点的开发库等等?

症状:

  • 实例化窗口后,将绘制窗口框架但未绘制窗口内容(我在窗口中看到桌面背景)
  • 在标题栏上单击拖动以移动窗口是缓慢的
  • 关闭应用程序需要几秒钟,但在窗口被销毁之前的很短的瞬间,正确的屏幕输出出现在窗口中
  • 将窗口调整为非常小不会改善缓慢或显示问题
  • top显示最大 cpu 使用率仅为 2%(大部分时间在 0.3 - 0.7% 之间),内存使用率上升和下降但保持在稳定范围内,我的其他图形应用程序稍有延迟,但其余的该系统相当活泼。这是来自的快照top
top - 01:09:42 up 3:43, 3 个用户,平均负载:0.31, 0.12, 0.12
任务:总共 1 个,运行 1 个,睡眠 0 个,停止 0 个,僵尸 0 个
%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 个,已使用 1342704 个,可用 15068900 个,47860 个缓冲区
KiB 交换:总共 2783228 个,使用 0 个,免费 2783228 个。752736 缓存内存
PID 用户 PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令                                                                      
3758 安德鲁 20 0 145700 25080 16704 R 0.3 0.2 0:02.36 mtexec

我试过的:

  • 我在 Windows 上遇到了类似的问题,问题是将空窗口句柄传递给SwapBuffers调用。我在通话gdb中设置了断点,glXSwapBuffers并确保现在没有发生同样的事情。
  • gdb使用确保Display*Window实例不为空且未更改来跟踪窗口创建代码。
  • 重绘和不重绘ExposeConfigureNotify事件。删除重绘代码似乎对问题没有任何影响。
  • 万一这很重要,我正在使用 GLEW,但不是用于创建上下文。我得到一个指向glXCreateContextAttribsARBvia的函数指针glXGetProcAddress
4

1 回答 1

1

关于如何调试此问题的简短回答:检查您的显示枚举是否提供了GLXFramebufferConfig与您的 X11 显示实际兼容的。如果您正在glXXf86库调用混合,请尝试仅使用glX来启动和运行程序。一个很好的解释细节的资源是Linux 中的 Programming OpenGL:GLX 和 Xlib指南。

于 2016-07-23T23:02:26.443 回答