2016-09-18 72 views
0

當前OpenGL驅動程序使用編譯着色器緩存位於 C:/用戶/名/應用程序數據/漫遊/ AMD | NVIDIA/glcache/...如何清除OpenGL着色緩存

不幸的是,它會導致程序崩潰差不多每當我更改某些着色器時,我目前通過手動刪除着色器高速緩存來修復這些着色器。

問題是,當我發佈新版本的程序時,是否有任何清除緩存的好方法?任何opengl擴展來控制緩存?或者來自操作系統的一些神奇的API?或者至少是找到文件夾的正確方法?

另一個問題:驅動程序使用哪些鍵來識別單個着色器?所以我可以在每次更改着色器時以某種方式更改密鑰。

回答

3

不幸的是,它幾乎每次更改某些着色器時都會導致程序崩潰,我目前通過手動刪除着色器高速緩存來修復這些着色器。

如果發生這種情況,系統和/或驅動程序的安裝會出現嚴重問題。這一定不會發生,如果它確實發生了,那麼OpenGL程序就不應該關注它自己。

另一個問題:驅動程序使用哪些鍵來識別單個着色器?

通常來自着色器源AST的一些哈希值(即只是添加一個空格或重命名一個符號將不會成功)。

問題是,當我發佈新版本的程序時,是否有任何清除緩存的好方法?

不是我所知道的。着色器是OpenGL規範中的「黑匣子」。您發送GLSL源文本,將其編譯並鏈接,就是這樣。諸如着色器緩存或內部表示之類的東西不是由OpenGL指定的。

任何OpenGL擴展控制緩存?

沒有。技術上,供應商可以爲此添加供應商特定的擴展,但沒有。

或從操作系統一些神奇的API?

沒有正式指定的。

,或者至少,找到這個文件夾的正確方法?

同樣一無所知,這是正確的規定。

+0

它發生在我的電腦(amd gpu)和朋友的電腦(nvidia)上,還有一個。因此我認爲它不是OS也不是司機相關的。如果它不是一個常見問題,就像你說的那樣,在我的着色器加載/編譯/鏈接代碼中給我留下了問題,對吧?我做廣泛的檢查任何錯誤,我也測試它與調試上下文和錯誤回調設置,並沒有錯誤。接下來你會提出什麼建議?我應該編輯問題並添加加載代碼? – Tomas

+0

@Tomas:是的,看到你的着色器加載代碼會有所幫助。另外,程序崩潰狀態的回溯將有助於:在調試模式下編譯並使用調試器運行。 Visual Studio提供了一個堆棧跟蹤窗口,在GDB中你可以使用「backtrace」命令。您不會看到驅動程序中發生了什麼,但是您可以看到程序執行哪些步驟導致崩潰。 – datenwolf