如何清除opengl着色器缓存

时间:2016-09-18 13:37:47

标签: c++ winapi opengl caching shader

当前的opengl驱动程序使用位于的编译着色器缓存 C:/用户/名/应用程序数据/漫游/ AMD | NVIDIA / glcache /...

不幸的是,几乎每次我更改一些着色器时都会导致程序崩溃,我目前通过手动删除着色器缓存修复了这些着色器。

问题是,当我发布新版本的程序时,是否有任何清除缓存的好方法?任何opengl扩展来控制缓存?还是来自操作系统的一些神奇的api?或者,至少找到文件夹的正确方法?

另一个问题:驱动程序使用哪些键来识别单个着色器?这样我每次更改着色器时都能以某种方式更改密钥。

1 个答案:

答案 0 :(得分:3)

  

不幸的是,几乎每次我更改一些着色器时都会导致程序崩溃,我目前通过手动删除着色器缓存修复了这些着色器。

如果发生这种情况,您的系统和/或驱动程序的安装会严重破坏。这绝不会发生,如果确实如此,那么OpenGL程序就不应该关注它。

  

另一个问题:驱动程序使用哪些键来识别单个着色器?

通常从着色器源AST派生的一些哈希(即只添加一个空格或重命名一个符号不会起作用)。

  

问题是,当我发布新版本的程序时,是否有任何清除缓存的好方法?

不是我知道的。着色器是OpenGL规范中的“黑盒子”。你发送GLSL源文本,它被编译和链接,就是这样。 OpenGL没有指定着色器缓存或内部表示等内容。

  

任何opengl扩展来控制缓存?

不。技术上,供应商可以为此添加特定于供应商的扩展,但没有一个。

  

或来自操作系统的一些神奇的api?

没有正式指明。

  

或者,至少找到文件夹的正确方法?

同样没有正确指定这一点。