圖形事件清單
使用 Visual Studio 圖形診斷中的 [圖形事件清單],來探索在呈現遊戲或應用程式的畫面格時所記錄的 Direct3D 事件。
這是 [圖形事件清單] 視窗:
注意事項 |
---|
從 Visual Studio 2013 Update 3 開始,圖形診斷工具視窗皆裝載在 Visual Studio Shell 的獨立複本中。這個自訂殼層稱為「圖形分析」,它會消除不必要的功能表和選項,除此以外,圖形事件清單和工作流程都和之前一樣。如需此變更的詳細資訊,請參閱 圖形診斷概觀。 |
使用事件清單
當您選取事件清單中的事件時,該事件會反映在其他圖形診斷工具所顯示的資訊中;透過搭配這些其他工具使用事件清單,您可以更詳細地檢查呈現問題以判斷原因。 若要深入了解如何搭配其他圖形診斷工具使用事件清單以解決呈現問題,請參閱圖形診斷範例。
有效率地使用事件清單的功能,對於避開可能包含數千個事件的複雜畫面格十分重要。 若要有效率地使用事件清單,請選擇最適合您的檢視,並使用搜尋來篩選事件清單、進入連結以深入了解與事件相關聯的 Direct3D 物件,以及使用方向按鈕快速在繪製呼叫之間移動。
事件清單檢視
事件清單支援兩個不同的檢視,而這兩個檢視透過不同的方式來組織圖形事件,以支援您的工作流程和喜好設定。 第一個檢視是「繪製呼叫檢視」(draw calls view),其透過階層方式組織事件以及與事件相關聯的狀態。 第二個檢視是「時間軸檢視」(timeline view),其依時間順序組織事件,且格式為一般清單。
繪製呼叫 檢視
以階層形式顯示所擷取的事件和其狀態。 階層最上層是由事件 (例如繪製呼叫、清除、存在以及處理檢視的繪製呼叫、清除、存在) 所構成。 在事件清單中,您可以展開繪製呼叫,以顯示繪製呼叫時的目前裝置狀態,而且可以進一步展開每種狀態類型,以顯示設定其值的事件。 您也可以在此層級中,查看先前的畫面格中是否有設定特定狀態,或是否在最後一次繪製呼叫之後多次設定特定狀態。時間軸 檢視
依時間順序顯示每個擷取的事件。 這種組織事件清單的方式與舊版 Visual Studio 相同。
變更事件清單檢視模式
- 在 [圖形事件清單] 視窗的事件清單上方,找到 [檢視] 下拉式清單,並選擇 [時間軸] 檢視或 [繪製呼叫] 檢視。
篩選事件
您可以使用 [搜尋] 方塊 (位在 [圖形事件清單] 視窗右上角) 篩選事件清單,使清單只包括名稱包含特定關鍵字的事件。 如上圖所示,您可以指定單一關鍵字 (如 Vertex),或使用以分號分隔清單指定多個關鍵字,例如 Draw;Primitive,其符合名稱中有 Draw 或 Primitive 的事件。 搜尋會受到空格影響;例如,VSSet 和 VS Set 是不同的搜尋,因此,請務必小心地建立搜尋。
在繪製呼叫之間移動
因為檢查 Draw 呼叫相當重要,所以您可以使用 [移至下一個繪製呼叫] 和 [移至上一個繪製呼叫] 按鈕 (位在 [圖形事件清單] 視窗左上角),尋找繪製呼叫並快速在其間移動。
圖形物件連結
若要了解特定圖形事件,您可能需要目前裝置狀態,或事件所參考之 Direct3D 物件的相關其他資訊。 許多事件都提供您可進入以取得其他詳細資料的資訊連結。
事件類型和事件標記
事件清單中所顯示的事件會組織成四種分類:一般事件、繪製事件、使用者定義事件群組,以及使用者定義事件標記。 除了一般事件之外,每個事件都會與指出事件所屬分類的圖示一起顯示。
圖示 |
事件描述 |
---|---|
(無圖示) |
|
|
|
|
|
|
使用者定義事件
使用者定義事件是您應用程式特有的。 您可以使用它們,將應用程式中發生的重大事件與 [圖形事件清單] 中的事件相互關聯。 例如,您可以建立使用者定義事件群組,以將相關事件 (如呈現使用者介面的事件) 組織成群組或階層,讓您可以更輕鬆地瀏覽事件清單,也可以在繪製特定類型的物件時建立標記,讓您可以更輕鬆地在事件清單中找到其圖形事件。
若要在應用程式中建立群組和標記,請使用 Direct3D 所提供,以供其他 Direct3D 偵錯工具使用的相同 API。 下表總結您可用於在不同版本的 Direct3D 中建立群組和標記的 API。
API 描述 |
ID3D11DeviceContext2 (英文) (Direct3D 11.2) |
ID3DUserDefinedAnnotation (英文) (Direct3D 11.1) |
D3DPerf_ API 系列 (Direct3D 11.0 (含) 以前版本) |
---|---|---|---|
開始事件群組 |
BeginEventInt |
BeginEvent |
D3DPerf_BeginEvent |
結束事件群組 |
EndEventInt |
EndEvent |
D3DPerf_EndEvent |
建立事件標記 |
SetMarkerInt |
SetMarker |
D3DPerf_SetMarker |
您可以使用 Direct3D 版本所支援的這些 API 之一 (例如,如果您的目標設為 Direct3D 11.1 API,則可以使用 SetMarker 或 D3DPerf_SetMarker 建立事件標記,而非 SetMarkerInt,因為它只適用於 Direct3D 11.2),還可以在相同的應用程式中,混合使用支援不同版本的 Direct3D 的 API。