我目前正在网站上列出项目。每个项目都有一个缩略图,我使用PixiJS在所有项目上添加一个着色器效果。问题是列表上有16个以上的项目,因此出现以下错误:
警告:活动WebGL上下文过多。最早的上下文将丢失。
是否有增加此限制的方法?我无法在WebGL上制作整个页面,而且用法是如此有限(没有交互作用,没有特效),以至于我认为更多的WebGL上下文不会使页面变得迟钝或类似。
不是不可能增加限制。 (那么您可以编写自己的浏览器)。
要列出项目,您可以使用本问答中的解决方案
Multiple WebGL models on the same page
在this article for WebGL和this article for three.js中有详细说明]
这里有3个解决方案。
(最快),使用覆盖整个页面的单个WebGL画布。使用占位符元素标记要绘制对象的位置。遍历这些元素,并使用视口和剪刀设置在这些位置绘制
使用单个离屏WebGL画布。在页面上放置2D画布。将每个项目绘制到屏幕外的画布上,并使用drawImage将其绘制到正确的2D画布上。该解决方案稍微灵活一些,因为2D canvas元素可以更自由地设置样式,但比以前的解决方案要慢[]]
使用您可以自己或use a library实现的虚拟webgl上下文。不推荐(最慢),但这是一个解决方案。
注意:不建议使用多个上下文。可以在WebGL上下文之间共享纹理,顶点和着色器。这意味着,如果您在2个或更多上下文中使用同一图像,则必须为每个上下文将其加载到内存一次。类似地,对于每个上下文,必须为每个上下文编译和链接着色器。换句话说,使用多个上下文会占用更多内存并显着增加启动时间。