Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何清除opengl着色器缓存_C++_Winapi_Opengl_Caching_Shader - Fatal编程技术网

C++ 如何清除opengl着色器缓存

C++ 如何清除opengl着色器缓存,c++,winapi,opengl,caching,shader,C++,Winapi,Opengl,Caching,Shader,当前的opengl驱动程序使用位于 c:/users/name/appdata/roaming/amd | nvidia/glcache/ 不幸的是,几乎每次我更改某些着色器时,它都会导致程序崩溃,目前我通过手动删除着色器缓存来修复这些着色器 问题是,当我发布新版本的程序时,有没有什么好方法可以清除缓存?是否有opengl扩展来控制缓存?还是来自操作系统的神奇api?或者,至少是找到文件夹的正确方法 另一个问题:驱动程序使用什么键来标识单个着色器?因此,每次更改着色器时,我都可以以某种方式更改关

当前的opengl驱动程序使用位于 c:/users/name/appdata/roaming/amd | nvidia/glcache/

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

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

另一个问题:驱动程序使用什么键来标识单个着色器?因此,每次更改着色器时,我都可以以某种方式更改关键点

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

如果发生这种情况,您的系统和/或驱动程序安装会出现严重故障。这种情况决不能发生,如果发生了,那么OpenGL程序就不应该关心它自己

另一个问题:驱动程序使用什么键来标识单个着色器

通常,从着色器源AST派生的一些散列(即,仅添加空白或重命名符号不会起作用)

问题是,当我发布新版本的程序时,有没有什么好方法可以清除缓存

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

是否有opengl扩展来控制缓存

没有。从技术上讲,供应商可以为此添加特定于供应商的扩展,但没有一家供应商这样做

还是来自操作系统的神奇api

官方没有对此做出任何规定

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

关于这一点,也没有适当的规定

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

如果发生这种情况,您的系统和/或驱动程序安装会出现严重故障。这种情况决不能发生,如果发生了,那么OpenGL程序就不应该关心它自己

另一个问题:驱动程序使用什么键来标识单个着色器

通常,从着色器源AST派生的一些散列(即,仅添加空白或重命名符号不会起作用)

问题是,当我发布新版本的程序时,有没有什么好方法可以清除缓存

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

是否有opengl扩展来控制缓存

没有。从技术上讲,供应商可以为此添加特定于供应商的扩展,但没有一家供应商这样做

还是来自操作系统的神奇api

官方没有对此做出任何规定

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


关于这一点,也没有适当的规定。

它发生在我的电脑(amd gpu)和我朋友的电脑(nvidia)上,还有一台。因此,我假设它与操作系统或驱动程序无关。如您所述,如果这不是一个常见的问题,那么我在着色器加载/编译/链接代码时就会遇到问题,对吗?我会广泛地检查是否有任何错误,并使用调试上下文和错误回调集进行测试,没有错误。你接下来有什么建议?我应该编辑问题并添加加载代码吗?@Tomas:是的,查看着色器加载代码会有所帮助。此外,程序崩溃状态的回溯也会有所帮助:在调试模式下编译并使用调试器运行。VisualStudio提供了一个堆栈跟踪窗口,在GDB中可以使用“backtrace”命令。你不会看到驱动程序中发生了什么,但你可以看到你的程序采取了哪些步骤导致了崩溃。它发生在我的电脑(amd gpu)和我朋友的电脑(nvidia)上,还有一个。因此,我假设它与操作系统或驱动程序无关。如您所述,如果这不是一个常见的问题,那么我在着色器加载/编译/链接代码时就会遇到问题,对吗?我会广泛地检查是否有任何错误,并使用调试上下文和错误回调集进行测试,没有错误。你接下来有什么建议?我应该编辑问题并添加加载代码吗?@Tomas:是的,查看着色器加载代码会有所帮助。此外,程序崩溃状态的回溯也会有所帮助:在调试模式下编译并使用调试器运行。VisualStudio提供了一个堆栈跟踪窗口,在GDB中可以使用“backtrace”命令。您不会看到驱动程序中发生了什么,但您可以看到程序采取了哪些步骤导致了崩溃。