javascript - 如何让 webglcontextrestored 被解雇
问题描述
我想要使用 WebGL 绘制大量的 HTML canvas
。但是,如果我绘制超过 8 个或 16 个或类似的、依赖于客户的数字,早期的数字就会消失。
基于WebGL wiki,我认为对此做出反应webglcontextlost
并webglcontextrestored
会解决这个问题……但似乎并非如此。
我基本上尝试了这段代码:
canvas.addEventListener('webglcontextlost', e => {
e.preventDefault();
});
canvas.addEventListener('webglcontextrestored', e => {
render();
});
提供完整的小提琴。
我有编码错误还是概念错误?
解决方案
您不能拥有超过 8 或 16 个 WebGL 画布。这只是浏览器的限制,因为 WebGL 使用大量资源。
您的代码会做的最好的事情是让一个失败并重新启动另一个,但我怀疑大多数浏览器都不能很好地处理这种情况。
如果您可以避免使用多个 WebGL 画布,那么您可能实际上并不想要多个 WebGL 画布,因为它们无法共享资源。
还有其他解决方案:
一种是使用不随屏幕滚动的单个画布。将占位符元素放入文档中,然后查看这些元素的位置。如果它们在屏幕上,则在画布的适当位置绘制场景。
一个 three.js 示例。一个 WebGL 示例。还有一个关于这个和其他解决方案的SO问题
另一个可能是虚拟化 WebGL 上下文,所以实际上只有一个上下文。这速度较慢,但画布的各个用户不必合作
推荐阅读
- python - 我需要在我的 python 代码中添加什么来解决抛硬币问题?
- mysql - 统计截止日期的订单数量
- scala - 如何使用 Play Framework 读取测试代码中的资源?
- python - 使用路径函数和来自不同函数的 slug
- flash - 为我的广播电台购买了 Flash 网站
- intellij-idea - 如何在 Clion/Intellij 中扩展运行工具窗口的最大宽度?
- javascript - 在jQuery中计算百分比
- matlab - MATLAB:从字符串中解析数字
- python - wxPython 菜单事件 - 新文件
- c++ - 如何将模板参数用于函数类型?