2011-07-23 25 views
5

是否有某種調試模式,OpenGL可以在將信息輸出到控制檯的位置運行?我有一個應用程序在許多機器上工作良好,但它在真正重要的一臺機器上失敗了。我沒有直接訪問那臺機器,所以我想弄清楚它是如何失敗的。目前我在控制檯中看不到任何輸出。請注意,該應用程序最初是一個沒有控制檯的Windows應用程序,我通過項目屬性將它切換到控制檯。此外,如果它很重要一些對象不顯示,另一個卡住,不動畫 - 這對我沒有任何意義。OpenGL調試或詳細信息到控制檯

回答

7

不是,不是真的。如果你真的需要一些詳細的輸出,你必須爲OpenGL編寫一個鉤子並記錄它所做的所有調用(這是gDEBugger所做的工具),但這需要相當多的工作(你可以使用類似GLIntercept這樣的東西。 )根據個人經驗:最簡單的方法可能是訪問有問題的機器,然後在那裏運行gDEBugger ...或者獲得一個等效的機器,以便您可以使用附加的圖形調試器重現錯誤。

或者,您可以嘗試使用ARB_debug_output擴展,這在理論上應該爲您提供更多的輸出。實際上,在每個OpenGL API調用之後,您得到的只是一個glGetError調用,這對您的用例來說可能已經足夠了(也就是說,您只需執行一些打破GL狀態的操作)。爲了使用調試輸出擴展,您必須修改您的應用程序創建一個調試上下文。

+1

ARB_debug_output的實用程序取決於OpenGL實現。 NVIDIA基本上做了'glGetError'版本,但AMD的版本更有幫助。它不會簡單地回到你的「GL_INVALID_OPERATION」;它通常會告訴你有用的信息,比如引起它的功能等等。我已經看到它專門識別核心上下文中不推薦使用的函數調用。着色器編譯和鏈接錯誤將在發生故障時轉儲相應的日誌。等等。 –

+0

'ARG_debug_ouput'是版本'4.3'以後的核心規範的一部分。 –