用于Linux的开源OpenGL剖析器

标题总结了我的问题很好:是否有Linux的开源 OpenGL分析器?

我唯一能find的就是gDEBugger ,但它只有7天的试用期,而且是非常封闭的源代码。 我会免费(如在自由)软件开发,所以付款是不是一种select,虽然我可能会考虑接受免费(如啤酒)的答案,但封闭的应用程序。 奖金点,如果它与开源驱动程序(我的主电脑有一个集成的英特尔graphics卡)的作品。

Solutions Collecting From Web of "用于Linux的开源OpenGL剖析器"

看看BuGLe 。 它的主要目标不是分析,而是有一个过滤器 ,它显示了在每个OpenGL调用中花费的时间。

感谢@ cypheon的回答,我检查了BuGLe。 这是太棒了,但我不得不花一点时间得到有用的分析输出。 我想添加这个作为对这个答案的评论,但我真的需要粘贴完整的代码示例,所以我开始了一个新的答案。

正如他所建议的那样, stats_calltimes过滤器对分析非常有用 – 这并不理想(因为它不显示调用堆栈信息),但是有一点工作,它可以显示每帧每个GL函数的总平坦时间。

你需要编辑~/.bugle/filters~/.bugle/statistics文件。 首先,将这个链添加到filters的末尾:

 chain showcalltimes { filterset stats_calls filterset stats_calltimes filterset showstats { show "average time per call" } } 

现在用命令运行你的程序:

 BUGLE_CHAIN=showcalltimes LD_PRELOAD=libbugle.so <your-program> 

这将打印每帧每个GL功能花费的平均时间。 这本身并不是非常有用,因为像glVertex这样的调用,每帧调用数千次,即使累计时间相当长,也可能显示为0.00ms。 因此,添加一个新的statistics

 "total time per call" = d("calls:*") / d("calls:*") * d("calltimes:*") / d("frames") * 1000 { precision 3 label "* (ms)" } 

我使用了与“每帧调用”统计相同的技巧:乘以除以d("calls:*") ,以便为从未被调用的函数导致除零误差,以避免显示所有无关的功能。

现在,返回到我们添加到filtersshowcalltimes链,并将"average time per call"更改为"average time per call" "total time per call"

 chain showcalltimes { filterset stats_calls filterset stats_calltimes filterset showstats { show "total time per call" #key_accumulate "A" #key_noaccumulate "I" } } 

现在我们将看到在每个函数中花费的总时间的有用统计数据。 如果你想平均这些数据在很多帧,取消上面的key_accumulate行,然后你可以打“A”(或重新映射到你选择的一个键)开始积累。 随着时间的推移,你会看到统计停止在很多帧的平均值。

您还可以将这些统计信息记录到此链的输出文件中:

 chain logcalltimes { filterset stats_calls filterset stats_calltimes filterset log { filename "bugle.log" } filterset logstats { show "total time per call" } } 

这是很难看的,因为它只是把每个帧的个人统计数据一个接一个地排在一起,而我还没有找到一个平均的方法。 所以我最喜欢阅读统计的方法就是打开累加器的showcalltimes链。

我真的会推荐这个小的分析器: http : //silverspaceship.com/src/iprof/ ,它不是绑定分析opengl,但非常好! 也可以使用opengl来显示分析统计信息,这意味着它非常便携。

我会用这个免费软件开发,所以付款是不是一个选项

“免费”并不意味着“开源”。

看看NVPerfKit , NVPerfSDK是否适合你。 我以前使用NVPerfHud来分析DirectX应用程序,如果NVPerfKit提供了一点点的PerfHud的OpenGL功能,它就是你正在寻找的东西。

另外,请查看NVIdia的OpenGL资源页面。

我也很喜欢vogl–请访问https://github.com/ValveSoftware/vogl

它具有分析,捕捉,重放功能 – 但是杀手的功能是捕获帧,您可以通过重放捕获的状态来检查所有缓冲区,着色器变量等等。