首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

图形编辑器开发:是否要像 Figma 一样上 wasm

因为图形处理会有相当多无法利用到 WebGL GPU 加速的 CPU 密集的计算。比如对一条复杂贝塞尔曲线进行三角化,对多个图形进行复杂图形的布尔运算。...在 wasm 被浏览器支持之前,Figma 使用 wasm 的前身 asm.js 去转成 JavaScript,使其可以在浏览器上运行。...或者可能需要用到一些JavaScript 没有的 C++ 图形。我发现国内一些图形编辑器厂商貌似挺喜欢用 Skia(Canvas 2D 的底层调用,开源)的,wasm 倒挺合适。...只是做个简单的图形编辑器,性能要求不高,能用就行,比如白板工具、表格,就没必要用 wasm 了,甚至 WebGL 都可以不用,直接 Canvas 2D 走起。...最后需要强调的一点是,Figma 强大的原因在于 WebGL 的硬件加速,wasm 更多的是锦上添花的作用。你得好好确认你的图形编辑器的瓶颈在哪里。

34930
您找到你想要的搜索结果了吗?
是的
没有找到

从Rust到远方:ASM.js星系

这篇文章会解释什么是ASM.js,怎样编译博客解析器到ASM.js以及如何在浏览器中和Javascript一起使用ASM.js. 使用ASM.js的目标是当作WebAssembly不可用的备用方案。...但是,有个特殊的魔法声明use asm;,会指示虚拟机用ASM.js引擎来优化这个程序。 ASM.js通过算术运算引入了类型作为标记系统。...这个模块是一个需要3个参数的函数: stdlib,一个带有引用到标准API的对象 foreign,一个带有用户定义功能的对象(比如通过WebSocket发送一些东西) heap,一个表示内存的数组(因为内存是手动管理的...我们不会直接编译Rust代码到ASM.js,而是先编译为WebAssembly,然后再编译为ASM.js。 #Rust ? ASM.js ? 这个篇章会非常的短,应该说是最简单的一篇。...#ASM.js ?

1.5K20

asm.js 和 Emscripten 入门教程

另外,浏览器还会调用 WebGL 通过 GPU 执行 asm.js,即 asm.js 的执行引擎与普通的 JavaScript 脚本不同。这些都是 asm.js 运行较快的原因。...据称,asm.js 在浏览器里的运行速度,大约是原生代码的50%左右。 下面就依次介绍 asm.js 的两大语法特点。 1.2 静态类型的变量 asm.js 只提供两种数据类型。...支持 asm.js 的引擎一看到x = a | 0,就知道x是整数,然后采用 asm.js 的机制处理。如果引擎不支持 asm.js 也没关系,这段代码照样可以运行,最后得到的还是同样的结果。...1.3 垃圾回收机制 asm.js 没有垃圾回收机制,所有内存操作都由程序员自己控制。asm.js 通过 TypedArray 直接读写内存。 下面就是直接读写内存的例子。...但是,这并不意味着 asm.js 肯定会被淘汰,因为它有两个优点:首先,它是文本,人类可读,比较直观;其次,所有浏览器都支持 asm.js,不会有兼容性问题。

2K50

漫极客 CTO 李焱:大前端之路 - 如何用Web技术一统三端(Web、Desktop、Mobile)开发

WebGL 支持3D ,在此基础上有ar.js 的开发, 可以比较高效的写出 3D 程序。刚刚说过,WebRTC 可以调取摄像头,摄像头结合3D就能做出AR和VR效果。...https://www.awwwards.com/22-experimental-webgl-demo-examples.html 它主要用的技术, 一是WebGL,通过 GPU 加速,能快速渲染 3D...图形; 二是 asm.js 和 WebAssembly,通过 Emscripten 编译器,把普通的 C++ 代码编译成 JS 的子集 asm.js,性能能够达到 C++ 原生代码本地速度的 50%...第二个是谷歌刚刚开源不久的 deeplearn.js。两个都可以直接在浏览器里训练深度神经网络。...AR/VR 去年VR特别火,我们也做过 360 度全景视频等,主要用到了 WebGLWebGL 是比较复杂的,我们是基于别人封装的Three.js做的,一句话,很好很强大。

1.4K110

WebAssembly完全入门——了解wasm的前世今身

asm.js出现 所以为了解决这个问题,WebAssembly的前身,asm.js诞生了。...asm.js是一个Javascript的严格子集,合理合法的asm.js代码一定是合理合法的JavaScript代码,但是反之就不成立。...WebAssembly的优势 WebAssembly和asm.js性能对比 下面的图是Unity WebGL使用和不使用WebAssembly的起步时间对比的一个BenchMark,给大家当作一个参考...- Unity WebGL的戳这里 - Unreal引擎的戳这里 WebAssembly要取代JavaScript? 答案是否定的,请看下图。 大家可以看到这是一个协作关系。...- 对性能有很高要求的App/Module/游戏 - 在Web中使用C/C++/Rust/Go的 举个简单的例子。如果你要实现的Web版本的Ins或者Facebook, 你想要提高效率。

1.7K50

如何在浏览器上跑深度学习模型?并且一行JS代码都不用写

带 RPC 的WebGL:我们可以将深度学习模型编译为 WebGL,通过 Emscripten 将其作为一个共享导出,包含 JavaScript 主机代码和 WebGL 设备代码。...然后,我们可以通过 RPC 将这个共享部署到 TVM JavaScript 运行时间系统(runtime system)中,并在浏览器上运行。...带静态WebGL:我们可以将深度学习模型编译为 WebGL,将其与 TVM JavaScript 运行时间系统相连接,并导出整个包。然后我们就可以不需要任何依赖,直接在浏览器的网页中运行模型。...那么,TVM 的 WebGL 有何独特之处呢?最大的区别就在于 TVM 的 WebGL 中操作内核是自动编译的,而不是人工编译的。...这可能是由于 Emscripten 生成了 asm.js,使得模型在 Firefox 浏览器中的运行效率得到了显著优化。 这个更新迈出了将深度学习模型自动编译到浏览器的第一步。

1.7K50

高冷的 WebGL

Threejs是一个用于在浏览器中绘制3D图形的JS,其底层实际是对浏览器提供的WebGL Api进行了封装。...以上是WebGL在百科上的一段介绍,说白了,就是通过浏览器提供的接口,我们能直接和底层的OpenGL打交道。...第一,由于WebGL是直接调用底层的OpenGL,这使得WebGL的接口十分晦涩,对于一般的Web开发人员来说,门槛比较高。...首先明确一点,WebGL也是基于canvas标签的,只是获取的上下文不一样而已,在WebGL中我们获取的上下文对象是webgl,但由于大部分浏览器并没有全面支持WebGL,而是通过experimental-webgl...有了WebGL的上下文,我们就可以开始调用WebGL为我们提供的接口。不过WebGL和Canvas 2D Api不同,并没有直接可以绘制图像的接口,而是需要我们一笔一划的告诉它如何绘制图像。

5.1K20

WebAssembly 小 Demo

Asm.js 是一个规范,它定义了高度可优化的 JavaScript 严格子集。仅允许诸如 while、if、数字、顶级命名函数和其他简单构造之类的东西。...Asm.js 代码在许多方面都类似于C,但是它仍然是完全有效的 JavaScript,可以在所有当前引擎中运行。...一旦 JavaScript 引擎发现运行的是 asm.js,就知道这是经过优化的代码,可以跳过语法分析这一步,直接转成汇编语言。另外,浏览器还会调用 WebGL 通过 GPU 执行 asm.js。...这些就是 asm.js 运行较快的原因。 加载和运行 WebAssembly 代码 当前还没有内置的方式让浏览器为你获取模块。...//developer.mozilla.org/zh-CN/docs/WebAssembly https://developer.mozilla.org/en-US/docs/Games/Tools/asm.js

1.5K20

WebGL问题总结

1.中文的输入输出问题: 1).输出问题:Unity的默认字体Arial在WebGL平台并不能正常的显示,解决方法也简单,自己创建一个字体或者去资源商店里找一个,替换所有的Text文本字体。...2).输入问题:InputField在WebGL平台里不支持中文输入,在Gihub上下载了一个插件-WebGLNativeInputField。插件写了一个InputField的派生类。...2.视频播放问题: VideoPlayer组件,Source来源有两种形式,VideoClip和URL 使用VideoClip,不管是在检视面板将视频拖拽赋值或者是代码动态赋值,在WebGL...,我们真实填入的WebGL平台下的路径参数,是以file:///开头的,但是File读取后的路径开头却是/file:/ 所以结论是,在WebGL平台下不要使用System.IO.File类。...4.URL链接问题: 在PC平台使用Application.OpenURL函数可以打开指定的网页,但是在WebGL端使用该函数打开网页时会覆盖我们的程序页面,没有其他重载方法。

1.4K20

WebAssembly 小 Demo

JavaScript 一个 .wasm 模块 用来加载和运行该模块的 JavaScript ”胶水“代码 一个用来展示代码运行结果的 HTML 文档 Emscripten生成的代码(其默认输出格式为 asm.js...Asm.js 是一个规范,它定义了高度可优化的 JavaScript 严格子集。仅允许诸如 while、if、数字、顶级命名函数和其他简单构造之类的东西。...Asm.js 代码在许多方面都类似于C,但是它仍然是完全有效的 JavaScript,可以在所有当前引擎中运行。...一旦 JavaScript 引擎发现运行的是 asm.js,就知道这是经过优化的代码,可以跳过语法分析这一步,直接转成汇编语言。另外,浏览器还会调用 WebGL 通过 GPU 执行 asm.js。...这些就是 asm.js 运行较快的原因。 加载和运行 WebAssembly 代码 当前还没有内置的方式让浏览器为你获取模块。

2.5K20
领券