我没有找到任何明确的答案,所以决定在这里问。是否真的没有办法保存和加载编译的webgl着色器?每次有人加载页面时编译着色器似乎都是浪费,当你需要做的就是编译着色器一次,将它保存到文件,然后加载已编译的着色器对象,就像HLSL一样(我知道它不是GLSL,但我对OpenGL来说还是一个新手。)
因此,如果可能,我如何在webgl中保存和加载已编译的着色器?
答案 0 :(得分:2)
真的没有办法,而且这是一件好事。它会带来安全问题(向GPU提供任意字节码)以及更新驱动程序时预编译着色器可能缺少新优化或只是中断。
当你需要做的就是编译着色器一次,将其保存到文件中,然后加载已编译的着色器对象,就像HLSL
一样
OpenGL(及其衍生产品)不支持以与DirectX相同的方式加载预编译着色器:
程序二进制格式不打算传输。期望不同的硬件供应商接受相同的二进制格式是不合理。期望来自同一供应商的不同硬件接受相同的二进制格式是不合理。 https://www.opengl.org/wiki/Shader_Compilation#Binary_limitations
在OpenGL中似乎没有像SPIR-V那样的中间格式,所以你需要在目标平台上编译着色器,为用户改变他们的显卡/使用混合图形解决方案,存储限制引入了许多其他问题在客户端上(使用localstorage 5 MB)以及滥用它来指纹硬件的可能性。