保存/加载已编译的webgl着色器

时间:2016-03-15 18:00:28

标签: webgl

我没有找到任何明确的答案,所以决定在这里问。是否真的没有办法保存和加载编译的webgl着色器?每次有人加载页面时编译着色器似乎都是浪费,当你需要做的就是编译着色器一次,将它保存到文件,然后加载已编译的着色器对象,就像HLSL一样(我知道它不是GLSL,但我对OpenGL来说还是一个新手。)

因此,如果可能,我如何在webgl中保存和加载已编译的着色器?

1 个答案:

答案 0 :(得分:2)

真的没有办法,而且这是一件好事。它会带来安全问题(向GPU提供任意字节码)以及更新驱动程序时预编译着色器可能缺少新优化或只是中断。

  

当你需要做的就是编译着色器一次,将其保存到文件中,然后加载已编译的着色器对象,就像HLSL

一样

OpenGL(及其衍生产品)不支持以与DirectX相同的方式加载预编译着色器:

  

程序二进制格式打算传输。期望不同的硬件供应商接受相同的二进制格式是合理。期望来自同一供应商的不同硬件接受相同的二进制格式是合理。   https://www.opengl.org/wiki/Shader_Compilation#Binary_limitations

在OpenGL中似乎没有像SPIR-V那样的中间格式,所以你需要在目标平台上编译着色器,为用户改变他们的显卡/使用混合图形解决方案,存储限制引入了许多其他问题在客户端上(使用localstorage 5 MB)以及滥用它来指纹硬件的可能性。