OpenGL shader如何調試?
01-13
本人使用的是AMD顯卡, 不能用Nsight ,可是Codexl又沒有調試shader的功能 ,請問用AMD顯卡如何調試OpenGL shader?
謝邀。
在什麼工具都沒有的情況下,最後一條路就是靠輸出了。CPU上如此,GPU上也是如此。你把需要看的變數當作顏色畫出來,就能知道每一個變數的值,麻煩點但能調試了。
早期的調試工具,也就是利用這樣分割shader的方式完成斷點、變數查看等功能。不需要任何硬體調試的支持也能跑。
題主可以試試看an OpenGL debugging tool BuGLe, 能夠輸出詳細的Log信息, 包括函數調用, 變數值都可以看得到.
OpenGL的斷點調試工具, 像gldb-gui, gDebugger, 都比較老了(有整整五年沒有更新過). gDebugger不清楚, 反正gldb-gui連OpenGL 4.0都不支持了 ... 一般著色器工作流程是比較模塊化的, 可以逐模塊地輸出結果. 對於PS, 可以用火眼金睛加上無限腦洞"感受"下這個結果是否正常. 對於要求很精細化的變數, 可以寫入FBO或者RT, 然後glGetTexImage或者glGetPixel.對於VS, 請參考Transform Feedback .
說起我最近經常使用的Debug手段 ... 可以說腦洞有點大, 前方高能預警, 非戰鬥人員迅速撤離.
The Color Picker App for macOS
AMD自己有一套調試器啊,老的叫gDebugger,新的叫Perf studio。
所有GPU廠商幾乎都給開發者提供了sdk debuger profiler tools你去官網下載來用就是了....
手寫代碼的能力開始體現了,並發編程、shader都是
謝邀!
有gdebuger和perfhud可以用。
這些工具不行的情況下,一般就將調試信息以顏色形式輸出在屏幕上,自行判斷對錯。在調試器里調用glgetuniform*函數
換dx11?
一般的調試不管是花樣跳來跳去還是斷點加來加去,最後都是以變數值的形式展現在你面前,讓你再去分析找bug,但是shader最終顯示的是顏色,對於人眼來說,對顏色是最敏感的了,還有什麼比直接讓你看到更直接的呢。好啦,什麼叫直接讓你看到呢?如上圖,物體表面藍色代表全影區,綠色代表半影區,紅色代表無影區。這是我在學習PCF演算法時想的debug方法,這樣就很容易分辨哪些區域的片段被直接認為是全影或者全亮而取得了加速。如圖,一些明明應該是全亮的區域也被畫上了綠色,這就是現在shader存在的不足,bug尚未解決......但是很直觀的顯現了。shader的debug靠想像力。
推薦閱讀:
※path tracing 渲染bunny glass材質,為什麼會有奇怪的黑色?
※像玻璃球這種透明且帶有折射現象的物體如何進行實時渲染?
※學計算機圖學時,自己寫的軟渲染器代碼結構是否應模仿OpenGL的狀態機模式?
※為什麼CryENGINE3引擎號稱最強大、最真實的引擎,但在孤島危機2/3當中的畫面仍然有一種光澤度過強的塑料質感?
※Unity中DrawCall和openGL、光柵化等有何內在聯繫,為什麼說DC降低有助於渲染性能優化?