Internet explorer IE11和Edge慢速链接程序

Internet explorer IE11和Edge慢速链接程序,internet-explorer,glsl,webgl,microsoft-edge,Internet Explorer,Glsl,Webgl,Microsoft Edge,在IE11和Edge下,我开始遇到与WebGLRenderingContext.linkProgram相关的奇怪性能问题。尽管我瞄准的其他平台(Chrome、Firefox、Opera、Chrome Android、Firefox Android和iOS Safari)都能在几毫秒内成功链接到我的所有着色器,但IE11和Edge最多会挂起主线程4秒钟!这在nVidia GTX笔记本电脑和仅限i7的笔记本电脑上都会发生 我有点不知所措,不知是什么原因导致了这种情况——着色器都很大(包括每个片段着色

在IE11和Edge下,我开始遇到与
WebGLRenderingContext.linkProgram
相关的奇怪性能问题。尽管我瞄准的其他平台(Chrome、Firefox、Opera、Chrome Android、Firefox Android和iOS Safari)都能在几毫秒内成功链接到我的所有着色器,但IE11和Edge最多会挂起主线程4秒钟!这在nVidia GTX笔记本电脑和仅限i7的笔记本电脑上都会发生

我有点不知所措,不知是什么原因导致了这种情况——着色器都很大(包括每个片段着色器顶部的一个大型公共库),但其中只有一个真正阻塞

更新:

使用以下功能似乎是造成悲伤的原因:

float getshadow系数(){
if(shadowType==SHADOW\u SINGLE)
返回shadowDepthSingle();
if(shadowType==SHADOW\u LERP4)
返回shadowDepthLerp4();
if(shadowType==SHADOW\u PCF)
返回shadowDepthPCF();
if(shadowType==SHADOW\u PCF\u LERP)
返回shadowdepthpflerp();
if(shadowType==SHADOW\u VSM)
返回shadowDepthVSM();
返回1.0;
}
对。这是一个由制服驱动的超级着色器,而不是
#ifdef
。正是为了避免这种缓慢的启动


对于这个速度非常慢的编译,我目前唯一可能的解释是IE和Edge正在将这些调用扩展到所有着色器组合中。这似乎有可能吗?

是的,很遗憾,这是可能的。DirectX可能需要几分钟来编译启用完全优化的复杂着色器。你应该考虑(注意:我假设WebGL的边缘使用DirectX在幕后与Windows上的Chrome和Firefox做同样的操作)谢谢。我提出了一个错误。是的,IE和Edge在幕后使用DirectX。奇怪的是,chrome和firefox也一样,这一问题并不明显,但它们都依赖于相同的实现。IIRC正是因为这个问题,他们关闭了DirectX上ANGLE的优化。