我正在尝试编写一个使用非常大的纹理的应用程序。想法是,在实时修改着色器时,您可以在缩小的纹理版本上工作,完成后,应用程序将应用您的更改到原始未缩放(大)纹理。问题在于分析显示类似以下内容:
- img.src = filename (500ms) - texImage2d(...) (1500ms) - 绑定/渲染 (100ms) - readPixels (300ms) - 放入画布 (1000ms) - 将画布保存到文件 (300ms)
这意味着在保存更大的未缩放纹理时,浏览器几乎要卡住4秒钟,用户无法做任何事情。是否可能以异步方式执行此操作,使浏览器保持响应?它需要完全在JavaScript和客户端中完成,因为我正在使用本地文件(HTML5文件/文件系统)。
Web Workers听起来像是个好主意,但它们无法访问DOM,因此我无法使用浏览器的图像加载和保存功能,它们也无法访问WebGL上下文,因此无法调用花费最长时间的texImage2d。
由于图像的大小和数量,我不能在页面最初加载时将它们全部加载到内存中作为纹理。
有什么方法可以使此操作对用户更加响应灵敏?我希望他们能够在上一个图像渲染时继续处理下一个图像。
- img.src = filename (500ms) - texImage2d(...) (1500ms) - 绑定/渲染 (100ms) - readPixels (300ms) - 放入画布 (1000ms) - 将画布保存到文件 (300ms)
这意味着在保存更大的未缩放纹理时,浏览器几乎要卡住4秒钟,用户无法做任何事情。是否可能以异步方式执行此操作,使浏览器保持响应?它需要完全在JavaScript和客户端中完成,因为我正在使用本地文件(HTML5文件/文件系统)。
Web Workers听起来像是个好主意,但它们无法访问DOM,因此我无法使用浏览器的图像加载和保存功能,它们也无法访问WebGL上下文,因此无法调用花费最长时间的texImage2d。
由于图像的大小和数量,我不能在页面最初加载时将它们全部加载到内存中作为纹理。
有什么方法可以使此操作对用户更加响应灵敏?我希望他们能够在上一个图像渲染时继续处理下一个图像。