2011-05-05 57 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