【发布时间】:2011-11-09 09:42:34
【问题描述】:
我正在尝试编写一个使用非常大的纹理的应用程序。这个想法是您在实时修改着色器时处理纹理的缩放版本,完成后应用程序会将您的更改应用于原始未缩放(大)纹理。问题是分析显示如下内容:
- img.src = 文件名(500 毫秒)
- texImage2d(...) (1500ms)
- 绑定/渲染(100 毫秒)
- 读取像素(300 毫秒)
- 放入画布(1000 毫秒)
- 将画布保存到文件(300 毫秒)
本质上,这意味着浏览器在保存较大的未缩放纹理时会锁定近四秒钟,而用户无法执行任何操作。是否可以异步执行此操作以使浏览器保持响应?这一切都需要在 javascript 和客户端完成,因为我使用的是本地文件(HTML5 文件/文件系统)。
Web worker 听起来是个好主意,但他们无法访问 DOM,因此我无法使用浏览器的图像加载和保存功能,而且他们无法访问 WebGL 上下文,因此无法调用 texImage2d ,最耗时。
由于图像的大小和数量,我无法在页面最初加载时将它们全部作为纹理加载到内存中。
有什么办法可以让这对用户更敏感吗?我希望他们能够在前一个图像渲染的同时继续处理下一个图像。
【问题讨论】:
标签: javascript asynchronous webgl