2011-05-05 60 views
4

在C++/OpenGL中是否有简单易用的功能?我能找到的只有gDEBugger。通过文档查看,我无法找到一种方法去做我想做的事。让我解释一下......如何在C++和OpenGL中剖析我自己的函数?

正如我在其他问题中所说的,我有一个防御塔的游戏。目前他们只有3个,但这个数字是可配置的。我对所有的塔都有单独的绘图功能(这个功能可能调用其他功能,无关紧要),我想分析这个单一功能(对于三个塔,然后再次增加数量和轮廓)。然后,我想实施塔的显示列表,进行相同的分析,并查看在此特定情况下使用显示列表是否有任何好处。

你对这样的任务推荐什么性能分析工具?如果它很重要,我使用Visual Studio 10在Windows上编写OpenGL。或者可以使用gDEBugger完成这项工作吗?任何指针?

P.S:我知道在OpenGL 3.1上删除了显示列表,但上面只是一个例子。

回答

3

NVidia有一个,AMD也有一个。并为Intel

对于粗粒度监测可以测量所花费的缓冲交换或glFlush()/glFinish()后从一开始就执行帧到时间:

while(running) 
{ 
    start_time = GetTimeInMS(); 

    RenderFrame(); 
    SwapGLBuffers(); 

    end_time = GetTimeInMS(); 

    cout << "Frame time (ms): " << (end_time - start_time) << end; 
} 
+0

为了完整性,所以确实[想象技术](HTTP ://www.imgtec.com/powervr/insider/pvrtrace.asp)(用于大多数嵌入式设备) – 2011-05-05 23:55:59

+0

只能从开始到缓冲区交换之后才能完成吗?我不想测量'RenderFrame',而是测量该函数中的特定渲染。 – 2011-05-06 08:23:12

+1

@Nazgulled:OpenGL调用通常由驱动程序排队,只有某些情况下GPU和CPU之间的同步。例如从在FBO中呈现的纹理读取。调用glFinish()会强制执行此类同步,但它只会告诉您所有绘图命令以及任何影响这些绘图的先前调用都已完成。 – datenwolf 2011-05-06 12:54:15