指令窗格

「指令」窗格會顯示應用程式發出的呼叫,並依照頁框分組及繪製呼叫,或依使用者標記分組。

OpenGL 或 Vulkan 追蹤記錄的初始檢視畫面
圖 1 OpenGL 或 Vulkan 追蹤記錄的初始檢視畫面
查看 OpenGL 追蹤記錄
圖 2. 查看 OpenGL 追蹤記錄
查看 Vulkan 追蹤記錄
圖 3. 查看 Vulkan 追蹤記錄
查看 Vulkan 追蹤記錄
圖 4. 在 Vulkan 追蹤記錄中搜尋指令

運作

在這個窗格中,您可以執行下列作業:

作業 說明
顯示結果 按一下指令或群組,即可更新其他窗格,反映所選指令或群組之後的狀態。
展開或收合指令階層 按一下分組左側的灰色三角形圖示,或是在群組上按兩下即可展開或收合群組。
搜尋 在窗格頂端的搜尋列中輸入字串,然後按下 Return 鍵 (請參閱上圖)。如要尋找下一個出現記錄,請確保已選取該長條,然後再次按下 Return 鍵。

選取「規則運算式」方塊,即可使用規則運算式搜尋模式。 舉例來說,glClear.* 會比對 glClear()glClearColor() 指令。您也可以搜尋指令參數值,例如 glBindBuffer(). 中使用的 2 緩衝區
編輯 在指令上按一下滑鼠右鍵,然後選取「編輯」。在「Edit」對話方塊中,變更一或多個值,然後按一下「OK」。注意:這僅適用於 Vulkan 指令,不適用於 OpenGL 指令。
查看狀態或記憶體資訊 按一下參照狀態參數 (例如紋理 ID) 的指令引數。「State」窗格會顯示額外資訊。按一下記憶體位址或指標,開啟「Memory」窗格。注意:這僅適用於 Vulkan 指令,不適用於 OpenGL 指令。
複製指令 在窗格中選取項目,然後按下 Control+C 鍵 (或 Command+C 鍵) 即可複製含有其引數值的指令。您可以將這些資訊貼入文字檔。
放大縮圖 縮圖會顯示在通話左側,如下圖所示。將遊標懸停在縮圖上即可放大圖片。
字幕

OpenGL ES 指令階層

OpenGL ES 指令會轉譯為 Vulkan,並分析 Vulkan 指令。因此,OpenGL ES 指令會在展開階層中同時顯示 OpenGL ES 和 Vulkan 指令。在上述範例中,您可以在 RenderPass 底下看到多個 glDrawElement 指令。第二個 glDrawElements 指令階層已展開,並顯示「OpenGL ES 指令」和「DrawIndexed」。您可以展開這兩個階層,顯示相關的 OpenGL ES 指令,以及這些指令轉譯時的 Vulkan 指令。

由於 OpenGL ES 與 Vulkan 間並沒有一對一的關係,因此可能會有差異。例如,在第一個 glDraw* 指令出現在 RenderPass 之前的 glClear 指令。如果展開 glClear 階層,將不會有 Vulkan 指令。這是因為在啟動 Vulkan RenderPass 時,系統會延遲及完成這項清除作業。

偵錯標記

視應用程式而定,「Commands」(指令) 窗格可以在一個頁框中提供非常長的指令清單。為提升導覽和易讀性,您可以定義偵錯標記,將呼叫在樹狀結構標題下方的分組。這可能包含分組,例如名為「Setup」或「Render World」。

如果偵錯標記已啟用,按一下「Commands」(指令) 窗格就會顯示這項資訊的連結。OpenGL ES 具備下列 API,可用於將指令分組:

擴充功能 / 版本 推送 郵局協議:POP
KHR_debug glPushDebugGroupKHR() glPopDebugGroupKHR()
EXT_debug_marker String String
OpenGL ES 3.2 String String

Vulkan 提供下列 API,可將指令分組:

擴充功能 / 版本 推送 郵局協議:POP
VK_EXT_debug_marker glPushDebugGroupKHR() glPopDebugGroupKHR()