当前的opengl驱动程序使用位于的编译着色器缓存 C:/用户/名/应用程序数据/漫游/ AMD | NVIDIA / glcache /...
不幸的是,几乎每次我更改一些着色器时都会导致程序崩溃,我目前通过手动删除着色器缓存修复了这些着色器。
问题是,当我发布新版本的程序时,是否有任何清除缓存的好方法?任何opengl扩展来控制缓存?还是来自操作系统的一些神奇的api?或者,至少找到文件夹的正确方法?
另一个问题:驱动程序使用哪些键来识别单个着色器?这样我每次更改着色器时都能以某种方式更改密钥。
答案 0 :(得分:3)
不幸的是,几乎每次我更改一些着色器时都会导致程序崩溃,我目前通过手动删除着色器缓存修复了这些着色器。
如果发生这种情况,您的系统和/或驱动程序的安装会严重破坏。这绝不会发生,如果确实如此,那么OpenGL程序就不应该关注它。
另一个问题:驱动程序使用哪些键来识别单个着色器?
通常从着色器源AST派生的一些哈希(即只添加一个空格或重命名一个符号不会起作用)。
问题是,当我发布新版本的程序时,是否有任何清除缓存的好方法?
不是我知道的。着色器是OpenGL规范中的“黑盒子”。你发送GLSL源文本,它被编译和链接,就是这样。 OpenGL没有指定着色器缓存或内部表示等内容。
任何opengl扩展来控制缓存?
不。技术上,供应商可以为此添加特定于供应商的扩展,但没有一个。
或来自操作系统的一些神奇的api?
没有正式指明。
或者,至少找到文件夹的正确方法?
同样没有正确指定这一点。